- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我在 iPhone 上的应用程序中模拟购买自动续订订阅。我的问题是购买被认为是由 App store 完成的,但事实并非如此。
事情是这样的:
当第 3 步出现网络故障时,我遇到了问题。我无法验证收据。但是如果用户第二次尝试购买,应用商店会告诉他他已经订阅了,即使我没有调用 finishTransaction
方法来完成购买!
这是预期的行为吗?应用商店不应该将未完成的交易视为未完成的交易,还是我遗漏了什么?我欢迎任何解决此问题的建议。
-(void) userPurchase:(SKProduct*) product{
SKPayment *payment = [SKPayment paymentWithProduct:product];
[[SKPaymentQueue defaultQueue] addPayment:payment];
}
-(void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
NSLog(@"paymentQueue updatedTransaction");
for (SKPaymentTransaction * transaction in transactions) {
switch (transaction.transactionState) {
case SKPaymentTransactionStatePurchasing:
break;
case SKPaymentTransactionStatePurchased:
[self recordSubscription:transaction];
break;
case SKPaymentTransactionStateFailed:
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
break;
case SKPaymentTransactionStateRestored:
[self recordSubscription:transaction];
break;
default: NSLog(@"Default");
break;
}
};
}
-(void) recordSubscription:(SKPaymentTransaction*)transaction{
NSString *jsonObjectString = [self encode:(uint8_t *)transaction.transactionReceipt.bytes length:transaction.transactionReceipt.length];
NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithObjectsAndKeys:jsonObjectString,@"receiptdata", nil];
[[AFNetworkSubClass sharedClient] postPath:@"myserver" params:params
success:^(AFHTTPRequestOperation *operation, id output) {
/* some code */
if([valstring isEqualToString:@"ok"]){
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
}
}
}failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"validation failed");
}
最佳答案
我认为在调用 recordSubscription 方法之前,您可以调用 finish finishTransaction 方法将付款从付款队列中删除,因为您已经完成了与苹果服务器的购买操作。
如果网络故障导致您无法验证应用收据,只需记录收据并再次验证收据到您自己的服务器或在网络可达时再次验证。
希望对您有所帮助。
关于ios - 自动续订订阅 : app-store completes transaction despite finishTransaction not called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20066553/
我们一直在 iOS 9 iPhone 6 上测试使用 Xcode 6.4 编译的应用程序,在完成应用内购买时出现无法解释的崩溃。在 paymentQueue:updatedTransactions:
tl;dr 如何 FinishTransaction 非来自 UpdatedTransactions 的应用内购买回调? 详细信息 目前我有一个SKPaymentTransactionObserver
我对什么时候打电话有点困惑: [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 在“服务器产品模型”中:http://dev
我使用服务器端收据验证。 当客户的 - (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transa
我们的应用程序中有两个用于购买非续订订阅的 IAP。 - (void)paymentQueue:(SKPaymentQueue*)queue updatedTransactions:(NSArray*
我的应用程序将允许用户通过应用程序内购买升级到专业版功能。我正在用我自己的服务器验证收据数据,如果确认从我的服务器返回,我调用 finishTransaction: 如果验证失败(可能不是因为盗版企图
我正在 iOS sdk 中的应用程序购买项目中工作。我已经准备了应用程序购买类,用于从应用程序商店购买应用程序,并启用项目的内部内容。但是,我的问题是 SKPaymentQueue 没有完成我的类。这
这个问题让我头疼了一段时间。 我的应用采用自动续订订阅模式。我有一个 SKPaymentQueue transactionObserver,当通过 Apple 成功完成购买时会收到通知,此时我将 Ap
我包含了一些非消耗性 IAP,但我在加载我的应用程序时遇到了问题,因为它似乎不断提示我登录到我设置的测试帐户用户。 我看了类似的问题后,我相信这是因为我最初没有在每个 .case 中添加以下行: S
我在 iPhone 上的应用程序中模拟购买自动续订订阅。我的问题是购买被认为是由 App store 完成的,但事实并非如此。 事情是这样的: 用户按下按钮购买续订 用户提供他的 iTunes 密码并
我是一名优秀的程序员,十分优秀!