objective-c – SKPaymentQueue finishTransaction:在网络完成
这个问题让我头疼了一段时间.
我的应用程序采用自动更新的订阅模式.我有一个SKPaymentQueue transactionObserver,当通过Apple成功完成购买时会通知我,此时我将Apple收据发送到我的服务器以验证我的结果.一旦我验证它,我就会向我的应用程序发送一个成功回调,该应用程序向用户提供内容,然后在事务上调用finishTransaction:according to the docs是正确的操作过程. 问题是,我害怕等待这么长时间才能调用finishTransaction:Apple预计它被调用(3-4秒)后禁止交易实际上“完成”.如果我在我的应用程序中成功购买(并且已经调用了completeTransaction:),然后终止我的应用程序(在Xcode中“停止”)并再次运行它,立即启动时会有一个,两个,三个,有时四个在UI甚至加载之前,SKPaymentQueue中有五个事务. 以下是对我的服务器的调用,该调用是在Apple完成交易后发生的 -(void)completeTransaction:(SKPaymentTransaction *)transaction { NSLog(@"complete transaction"); [self sendReceiptToServer:transaction]; } -(void)sendReceiptToServer:(SKPaymentTransaction*)transaction { NSString *rawReceiptData = [[NSString alloc] initWithData:transaction.transactionReceipt encoding:NSUTF8StringEncoding]; NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys:rawReceiptData,@"receipt",[[UserSingleton sharedInstance] memberID],@"member",nil]; NSMutableURLRequest *request = [[HTTPRequestSingleton sharedClient] requestWithMethod:@"POST" path:cFunctionAddCredits parameters:params]; AFJSONRequestOperation *operation = [AFJSONRequestOperation JSONRequestOperationWithRequest:request success:^(NSURLRequest *request,NSHTTPURLResponse *response,id JSON) { NSLog(@"%@",JSON); NSString *creditsString = [JSON valueForKey:@"limit"]; int numberOfCredits = [creditsString intValue]; [self provideContent:transaction.payment.productIdentifier withNumberOfCredits:numberOfCredits]; [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; } failure:^(NSURLRequest *request,NSError *error,id JSON) { NSLog(@"failed to send receipt to server"); [[NSNotificationCenter defaultCenter] postNotificationName:cFailedToSendReceiptToServer object:transaction]; [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; }]; [operation start]; } 如您所见,[[SKPaymentQueue defaultQueue] finishTransaction:transaction];在我的服务器的请求的成功或失败块内被调用.这会有问题吗? *编辑* *编辑2 * 解决方法
经过数周的“幻影”购买,我终于意识到发生了什么.这不是finishTransaction:或AFNetworking的错.
应用程序启动时发生的交易实际上是Apple正在执行的自动续订过程的一部分. life of a 1 month subscription in the Apple Sandbox is 5 minutes,所以我在启动我的应用程序时会在队列中有1,2或3个事务,具体取决于自上次启动它以来它是5分钟,10分钟还是15分钟. 我不得不调整一些服务器端设置,以确保续订不被视为与新订阅相同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |