5

我正在使用 Apple 建议的交易 VerificationController 代码更新我的 iOS 应用程序,以验证应用程序内购买,因为最近发布的“黑客”允许人们购买应用内购买而无需支付,因为来自欺骗性 Apple 服务器的欺骗性收据。

我已经集成了所有内容,现在正在测试。我已多次运行该应用程序,并且验证内容已运行多次。

我想测试有关购买的所有内容,包括从全新的应用程序和 AppleID 开始。所以我从我的测试设备上完全删除了这个应用程序。我在 iTunes Connect 中创建了一个全新的“测试用户”AppleID。我去了我的测试设备上的设置应用程序,去商店,并将设备的默认 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]);

这表明没有旧交易。

我不知道为什么在新安装应用程序时它开始询问原始测试用户的 AppleID,设备商店的 AppleID 不同,并且我无法识别正在运行的访问 StoreKit 的代码(除了上面提到的)。

对此的任何见解将不胜感激。

ETA:在密码对话框中点击取消不会导致任何额外代码在应用程序中运行,也不会阻止应用程序运行。

如果我随后进入应用内购买屏幕(应用程序会在该屏幕上查询商店以获取可用的应用内购买),它会以相同的方式再次在旧 AppleID 上要求输入密码。我可以取消,似乎什么都没有发生。如果我真的在我的应用程序中触摸“恢复购买”按钮,它会要求输入在商店设置中设置的新 AppleID 上的密码。我没有超过这一点,因为我想了解正在发生的事情,并且不想通过完成/尝试在新 AppleID 下进行恢复或购买来搞砸事情。

谢谢

4

3 回答 3

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];
}

大概是这样的:

  • 我首先使用我的测试 Apple ID 购买了该产品
  • 我出于测试目的删除了产品
  • 我试图再次购买它。此时我输入了错误的凭据,并且 RMStore 没有调用[[SKPaymentQueue defaultQueue] finishTransaction:.
  • 该应用程序开始在每次启动时要求登录。

我尝试使用不同的测试帐户登录,但仍然出现相同的警报,要求使用旧的 Apple ID 登录。我还在 iTunes Connect 上删除了 Apple ID,但这并没有帮助。

最后,我设法通过使用相同帐户恢复(而不是购买)产品来解决。我不知道是否有其他方法可以解决这个问题(即重置 StoreKit 队列)。无论如何,请始终记住调用finishTransaction您的代码。

于 2014-07-12T09:54:33.290 回答
2

StoreKit.framework在系统范围内工作,因此显示的 Apple ID 与您的应用程序没有任何关系,重新安装应用程序不会有任何影响。

但是,您可以从 iTunes Store / App Store 注销

  1. 点击设置 → iTunes 和应用商店
  2. 轻点已登录的 Apple ID(顶部的按钮)
  3. 点击“退出”

当您再次使用您的应用程序时,StoreKit应提示输入电子邮件和密码。

于 2013-04-11T16:16:17.237 回答
-1

修复步骤:

  1. 从 App Store 开始,拉起多任务栏并点击设置应用程序。
  2. 向下滚动并点击“常规”。
  3. 向下滚动并点击“日期和时间”。
  4. 如果“自动设置”开关打开,请将其关闭。
  5. 点击“设置日期和时间”。
  6. 点击显示“[星期几]、[月][日]、2013 年”的字段。
  7. 将年轮调整为“2012”并退出“日期和时间”部分。
  8. 多任务返回 App Store 并尝试再次下载该应用程序。
  9. 在“无法连接...”模式中点击“取消”。
  10. 返回到原生设置 > 常规 > 日期和时间 > 设置日期和时间。
  11. 返回月、日、年轮并将年份更改为“2030”。
  12. 返回主屏幕并启动 App Store。
  13. “无法连接到商店”模式应立即出现。
  14. 点击“确定”,然后多任务返回设置。
  15. 再次回到月份,日期,年份轮并将年份更改回“2013。
  16. 多任务返回 App Store 并尝试再次下载该应用程序。
于 2013-04-14T22:50:34.387 回答