【问题标题】:app is asking for AppleID when being run应用程序在运行时要求 AppleID
【发布时间】:2012-07-26 00:20:44
【问题描述】:

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

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

我想测试有关购买的所有内容,包括从全新的应用和 AppleID 开始。所以我从我的测试设备上完全删除了这个应用程序。我在 iTunes Connect 中创建了一个全新的“测试用户”AppleID。我在我的测试设备上打开了“设置”应用,进入了商店,并将设备的默认 AppleID 更改为这个新创建的 AppleID。

我使用调试器从 Xcode 重新运行应用程序,它将应用程序重新安装到测试设备上并重新运行。

问题是,几乎在启动时,测试设备会立即显示 AppleID 密码警报类型的视图,并询问我最初用于测试所有内容的旧 AppleID 的密码,包括原始应用内购买和验证为了它。它不会要求输入在商店下的“设置”应用中设置的新设备 AppleID 的密码。

当我将其作为新应用程序运行时,验证码不会运行,并且我的任何例程中与 Apple StoreKit 相关的任何代码都不会运行,除了一个单独的应用程序

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];

(observer 是我的 StoreKit 东西的委托对象,并且已创建但其中没有例程运行,除了 init 和 init 什么都不做,只是为自己设置一个静态变量以创建一个单例类型类)

出于检查目的,我还添加了

NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]);

这表明没有旧交易。

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

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

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

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

谢谢

【问题讨论】:

  • 你解决了吗?
  • @bluesm 我从来没有解决过问题,也不再真正使用我遇到问题的设备。对不起。我最终可能会尝试回到它,因为我的抽屉里还有那个设备......

标签: iphone ios storekit in-app


【解决方案1】:

我遇到了完全相同的问题,并努力解决了几个小时。

如前所述,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

【讨论】:

  • 谢谢!我刚刚以我的测试用户身份登录,点击我的“恢复”按钮。然后退出并重新启动,登录没有发生。登录窗口的时间太奇怪了。即使是逐行调试,它也始终发生在与 StoreKit 完全无关的事情上。
【解决方案2】:

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

不过,你可以log out from the iTunes Store / App Store:

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

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

【讨论】:

  • 不知道大家有没有看到 AppleID 与设置中存储的 AppleID 无关(“设备商店的 AppleID 不同”)
  • 这几乎就好像 iOS 已经在某处存储了信息说“这个应用程序正在请求以前的购买信息”并且不禁在后续加载时要求它。只有删除应用程序才能为我摆脱它。
  • @chadbag 啊,抱歉,没有正确理解您的意思。不知道当时发生了什么。 :(
  • @AndreasLey 无害无犯规 ;)。我遇到这个问题的设备不再是我的主要设备,尽管由于其他付费演出,我没有使用过这个应用程序,所以我现在不确定我在这个问题上的立场。我很快就会回来,除非人们从木制品中走出来带薪工作......
【解决方案3】:

修复步骤:

  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 并尝试再次下载该应用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多