我在应用内购买恢复流程中遇到了很多麻烦。似乎我的一小部分用户无法正确恢复。我曾经有自己的自定义构建实现,但我发现它更难调试并决定切换到RMStore
.
这不是一个错误RMStore
——它在我切换到使用它之前就已经存在。
通过我的分析,似乎一些用户达到了恢复成功的案例,但从未成功触发高级状态。恢复代码如下。
[[RMStore defaultStore] restoreTransactionsOnSuccess:^(NSArray *transactions){
if ([SKPaymentQueue defaultQueue].transactions.count == 0) {
[self.tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"RESTORE"
action:@"failure"
label:@"no_purchases"
value:nil] build]];
[self fail:@"There are no items available to restore at this time."];
} else {
// seems to be triggered every time a successful restore made if there are items
[self.tracker send:[[GAIDictionaryBuilder createEventWithCategory:@"RESTORE"
action:@"success"
label:@"items_in_queue"
value:nil] build]];
for (SKPaymentTransaction *transaction in transactions) {
if (transaction.transactionState == SKPaymentTransactionStateRestored) {
if ([transaction.payment.productIdentifier isEqualToString:(NSString*)productID]) {
[Utils setPremium:YES];
}
}
}
[self success];
}
} failure:^(NSError *error) {
//...
}];
我在这里唯一的猜测是受影响用户交易的 transactionState 不是SKPaymentTransactionStateRestored
. 我已经与一些受影响的用户确认,他们都购买了高级版。他们的交易可能处于什么其他状态?
在这种情况下,我是否应该完成任何不是SKPaymentTransactionStateRestored
via的交易[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
?这会恢复陷入这种状态的用户吗?
编辑:这是一个非消耗品购买,id 自创建以来一直相同。