我有一个测试帐户,其交易历史记录中只有两次购买。这两种产品都是非消耗品。
我在iPad 1上登录并购买了产品A.
然后我退出iPad 1并登录iPad 2并购买了产品B.
然后,我尝试使用[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
恢复之前的交易,以解锁iPad 2上的产品A.
当电话回来时,只有产品B在可恢复交易列表中。
此外,当我尝试使用
在iPad 2上再次购买产品A.SKPayment *payment = [SKPayment paymentWithProduct:productA];
[[SKPaymentQueue defaultQueue] addPayment:payment];
我得到一个弹出窗口,说'你已经购买了它。点击确定再次免费下载。'
如果我已经购买了产品A,当我尝试恢复以前的购买时,为什么它不在产品列表中?为什么我必须让用户再次尝试购买?
编辑:
我发现使用哪个iPad(iPad 1或iPad 2)无关紧要,只有产品B出现在可恢复交易列表中,产品A需要回购。
编辑:
我将产品请求,恢复和购买工作外推到自己的项目中,使用与原始相同的捆绑ID和产品ID。
现在没有出现在可恢复交易列表中,但当我尝试购买任何一种产品时,会出现相同的弹出窗口。
用苹果工具破坏兔子洞的另一次旅行。
编辑:
这项调查的灵感来自一系列用户对失踪权利的投诉。当用户从iPad 2切换到新的iPad 3时,这在很大程度上开始成为一个问题。这在我的所有用户中并不一致,但是他们中的很多人已经提出了将其作为优先事项的恶臭,并且Apple客户支持已经将它们发回给我,但我不确定这是一个我可以解决的问题特别是因为Apple坚持要成为应用内购买的收银机。
答案 0 :(得分:3)
此消息'您已经购买了此消息。点按“确定”即可免费下载。通常在您将支付交易添加到默认队列并且未完成交易时出现,因此StoreKit
假设用户确实购买了该项目,但您的应用程序尚未下载该项目,因此请确保您将该项目交付给用户并完成交易......我有办法检索用户购买的物品及其对我有用的工作..试试吧
- (void) checkPurchasedItems
{
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
}//You Call This Function
//Then this delegate Function Will be fired
- (void) paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue
{
purchasedItemIDs = [[NSMutableArray alloc] init];
NSLog(@"received restored transactions: %i", queue.transactions.count);
for (SKPaymentTransaction *transaction in queue.transactions)
{
NSString *productID = transaction.payment.productIdentifier;
[purchasedItemIDs addObject:productID];
}
}
purchasedItemIDs
将包含用户购买的所有产品ID。
答案 1 :(得分:3)
我有很好的权威,这是Apple的服务器软件中的一个错误。