gpt4 book ai didi

ios - 自动续订订阅 : app-store completes transaction despite finishTransaction not called

转载 作者:可可西里 更新时间:2023-11-01 03:21:53 40 4
gpt4 key购买 nike

我在 iPhone 上的应用程序中模拟购买自动续订订阅。我的问题是购买被认为是由 App store 完成的,但事实并非如此。

事情是这样的:

  1. 用户按下按钮购买续订
  2. 用户提供他的 iTunes 密码并确认购买
  3. 应用将从应用商店收到的收据提交到我的服务器以检查有效性
  4. 服务器返回“ok”或“not ok”字符串。该应用仅在“确定”时调用 finishTransaction

当第 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/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com