我正在使用Apple建议的交易VerificationController代码更新我的iOS应用程序以验证应用内购买,因为最近发布的“hack”允许人们购买in-ap购买而无需付费,因为来自欺骗性Apple服务器的欺骗收据。
我已将所有内容集成在一起,现在正在测试。我已经多次运行应用程序并且验证内容已经运行了几次。
我想测试有关购买的所有内容,包括从全新的应用程序和AppleID开始。所以我完全删除了我的测试设备上的应用程序。我在iTunes Connect中创建了一个全新的“测试用户”AppleID。我在测试设备上访问了Settings应用程序,转到了Store,并将设备的默认AppleID更改为新创建的AppleID。
我使用调试器从Xcode重新运行应用程序,该应用程序将应用程序重新安装到测试设备上并重新运行。
问题是,几乎在发布时,测试设备会立即显示AppleID密码警报类型视图,并询问我最初用于测试所有内容的旧AppleID的密码,包括原始的应用内购买和验证为了它。它不会要求在商店下面的“设置”应用中设置的新设备AppleID的密码。
当我将它作为一个新的应用程序运行时,验证代码不会运行,并且除了单独的
之外,没有任何代码可以运行任何与Apple StoreKit相关的任何例程。[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
(观察者是我对StoreKit东西的委托对象并且已经创建但是没有例程在运行,除了init和init什么都不做,除了为自己设置一个静态变量来创建单例类型类)
为了检查目的,我还添加了
NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]);
显示没有旧的交易。
我不知道为什么在新安装App时,为什么它开始要求我的原始测试用户的AppleID,设备的商店的AppleID是不同的,我可以识别没有运行的代码访问StoreKit(除了上面提到的)。
任何对此的见解都将受到赞赏。
ETA:在密码对话框中触摸取消不会导致任何额外的代码在应用程序中运行,也不会阻止应用程序运行。
如果我进入应用程序内购买屏幕(应用程序在商店中查询可用的应用程序内购买),它会在旧AppleID上以相同的方式再次询问密码。我可以取消,似乎没有任何事情发生。如果我实际触摸了我的应用中的“恢复购买”按钮,则会在商店设置中设置新AppleID上的密码。我没有超越这一点,因为我想了解发生了什么,并且不希望通过在新的AppleID下完成/尝试恢复或购买来搞砸。
由于
答案 0 :(得分:7)
我遇到了完全相同的问题,并且花了好几个小时来解决它。
如前所述,StoreKit
在系统范围内工作,系统一直要求登录任何
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
尚未被召集。我正在使用RMStore,查看我发现这个可疑行的源代码:
if (error.code != RMStoreErrorCodeUnableToCompleteVerification) {
// If we were unable to complete the verification we want StoreKit to keep reminding us of the transaction
[queue finishTransaction:transaction];
}
这可能发生了什么:
[[SKPaymentQueue defaultQueue] finishTransaction:
。 我尝试使用其他测试帐户登录,但仍然需要使用旧Apple ID登录相同的警报。我还删除了iTunes Connect上的Apple ID,但这没有帮助。
最后,我设法通过使用相同帐户恢复(而不是购买)产品来解决。
我不知道是否有其他方法可以解决这个问题(即重置StoreKit队列)。无论如何总是记得在你的代码中打电话给finishTransaction
。
答案 1 :(得分:2)
StoreKit.framework
在系统范围内运行,因此显示的Apple ID与您的应用无关,重新安装该应用不会产生任何影响。
但是,您可以log out from the iTunes Store / App Store:
当您再次使用您的应用时,StoreKit
应提示您输入电子邮件和密码。
答案 2 :(得分:-1)
修复步骤: