Iphone 恢复已完成的事务是否已损坏?
SDK 4.3中的restoreCompletedTransactions是否已中断 我正在尝试恢复我的自动续费订阅。它不会导致对updatedTransactions的回调。这是我的密码Iphone 恢复已完成的事务是否已损坏?,iphone,in-app-purchase,Iphone,In App Purchase,SDK 4.3中的restoreCompletedTransactions是否已中断 我正在尝试恢复我的自动续费订阅。它不会导致对updatedTransactions的回调。这是我的密码 { .... [appDelegate.inapp loadStore]; [[SKPaymentQueue defaultQueue] restoreCompletedTransactions]; .... } 期待对updatedTransactions进行回调,但不接收它 - (voi
{
....
[appDelegate.inapp loadStore];
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
....
}
期待对updatedTransactions进行回调,但不接收它
- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions
{
NSLog(@"IN updatedTransactions, transaction.transactionState");
for (SKPaymentTransaction *transaction in transactions)
{
switch (transaction.transactionState)
{
...
...
case SKPaymentTransactionStateRestored:
NSLog(@"IN updatedTransactions, SKPaymentTransactionStateRestored");
[self restoreTransaction:transaction];
break;
}
}
}
但我最终还是接到了这个电话
-(void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue {
}
我能够绕过这个问题,但这很奇怪。在我的测试设备上,我被iTunes窃听,无法登录到多个测试用户帐户。我通常只是点击“取消”,然后用我想要恢复的帐户测试我的恢复。这一次,我决定为其他恼人的登录框输入密码。它工作了,下次我重新启动我的应用程序并点击restore时,它没有让我登录到其他测试帐户,只是我正在测试的那个帐户。我继续恢复,它确实恢复了我想看的东西 我说我们正在经历愚蠢的沙箱问题,而且我们也知道苹果已经改变了应用程序的购买方式。继续玩弄它,你会解决问题的
希望这对您有所帮助。如果您正在获得PaymentQueueRestoreCompletedTransactions Finished,则不需要updatedTransactions回调。“队列”中有一个事务列表,您可以循环这些事务
- (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
for (SKPaymentTransaction *transaction in queue.transactions)
if ([myItem.productID isEqualToString:transaction.payment.productIdentifier])
myItem.purchased = YES;
}
如果您在沙箱环境中进行测试,并且您的测试用户已中断,则仍可能发生这种情况。在中创建新的测试用户,然后重试
现在还不完全清楚是什么让测试用户变坏;据我所知,在非沙箱环境中使用它们一次可以做到这一点,但也可能有其他原因
(1) Xcode 4.3.1,iOS SDK 5.1确保在使用
[[SKPaymentQueue defaultQueue]restoreCompletedTransactions]之前添加观察者代码>
您的代码应该类似于:
[[SKPaymentQueue defaultQueue]addTransactionObserver:self];
[[SKPaymentQueue defaultQueue]恢复完成的事务]代码>无法还原产品耗材
产品非消耗性可以恢复
检查您的产品是否为非耗材类型,确保Xcode中的内部版本号没有空格。例如“1.0测试版”。如果空间已更新,则不会调用Transactions。此外,收据验证可能会失败。此处未提及的另外两点:
如果您使用的是Firebase请确保在初始化Firebase之前添加一个观察者
确保在处理购买时调用finishTransaction方法。您将无法还原未完成的事务
苹果又回到了我的票上。这是4.3.1中的一个bug。看起来他们现在已经解决了。在iOS 5.0中仍然面临相同的问题在iOS 6和iOS 7中仍然面临相同的问题。来吧,苹果。输入所有为meThis工作的测试用户的密码来自苹果的文档。“此方法在支付队列处理完所有可恢复的交易后调用。您的应用程序无需在此方法中执行任何操作。”。我也觉得这是iOS中的一个bug,但我在iOS 5.0中遇到了它,所以我不知道为什么okgo在上面的回答中说它是固定的。这是固定的吗?我也遇到了同样的问题,我在任何地方都找不到解决方案。我遇到过很多“失败的测试用户”(已经创建了400多个沙盒文本用户)。我看不出是什么打破了它们,但我还没有使用测试用户购买“prod”应用程序。加油,谢谢。那些测试用户很微妙——在测试过程中创建增量测试用户已经成为我的测试流程。哎呀!我的测试用户也“变坏了”…这是一个非常小的样本,但我的应用程序在通过苹果的审查后似乎变坏了…可能相关?哇-这是另一个“坏”测试用户的受害者。我怀疑您是否尝试在系统首选项中设置该帐户,并继续验证它是否为实际帐户(信用卡等),这将使其变糟。我如何确定我的测试用户是否已损坏?但此方法中没有SKProduct
参数,SKPaymentQueue.default().restorecocompletedtransactions()
。