应用程序在运行时要求AppleID

cha*_*bag 5 iphone storekit ios in-app

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

我已将所有内容集成在一起,现在正在测试.我已经多次运行应用程序并且验证内容已经运行了好几次.

我想测试有关购买的所有内容,包括从全新的应用程序和AppleID开始.所以我完全删除了我的测试设备上的应用程序.我在iTunes Connect中创建了一个全新的"测试用户"AppleID.我转到测试设备上的"设置"应用,转到"存储",然后将设备的默认AppleID更改为此新创建的AppleID.

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

问题是,几乎在发布时,测试设备会立即发出AppleID密码警报类型视图,并询问我最初用于测试所有内容的旧AppleID的密码,包括原始的应用程序内购买和验证.它不会要求在商店下的"设置"应用中设置的新设备AppleID的密码.

当我将它作为一个新应用程序运行时,验证代码不会运行,并且除了单独运行之外,没有任何代码可以运行任何与Apple StoreKit相关的任何例程

[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
Run Code Online (Sandbox Code Playgroud)

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

为了检查目的,我也加入了

NSLog(@"in App Delegate, payment queue transactions are %@", [[SKPaymentQueue defaultQueue] transactions]);
Run Code Online (Sandbox Code Playgroud)

这显示没有旧的交易闲置.

我不知道为什么它在新安装App时开始要求我的原始测试用户的AppleID,设备的商店的AppleID是不同的,我可以识别没有运行的代码访问StoreKit(除了上面提到的).

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

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

如果我然后进入应用程序内购买屏幕(应用程序在商店中查询可用的应用程序内购买),它会在旧AppleID上以相同的方式再次询问密码.我可以取消,似乎没有任何事情发生.如果我实际触摸了我的应用中的"恢复购买"按钮,则会在商店设置中设置新AppleID上的密码.我没有超越这一点,因为我想了解发生了什么,并且不希望通过在新的AppleID下完成/尝试恢复或购买来搞砸.

谢谢

Mar*_*ona 7

我有完全相同的问题,并努力解决它几个小时.

如前所述,StoreKit系统范围内工作,系统不断要求登录任何事务

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
Run Code Online (Sandbox Code Playgroud)

没有被称为.我正在使用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];
}
Run Code Online (Sandbox Code Playgroud)

这可能是发生的事情:

  • 我首先使用我的测试Apple ID购买了该产品
  • 我删除了产品用于测试目的
  • 我试着再次购买它.此时我输入了错误的凭证,而RMStore没有打电话[[SKPaymentQueue defaultQueue] finishTransaction:.
  • 该应用程序开始要求每次启动时登录.

我尝试使用不同的测试帐户登录,但仍然需要使用旧的Apple ID登录相同的警报.我还删除了iTunes Connect上的Apple ID,但这没有用.

最后,我设法通过使用相同的帐户恢复(而非购买)产品来解决.我不知道是否有另一种方法可以解决这个问题(即重置StoreKit队列).无论如何总是记得打电话给finishTransaction你的代码.


And*_*Ley 2

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

\n\n

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

\n\n
    \n
  1. 点击设置\xe2\x86\x92 iTunes & App Store
  2. \n
  3. 点按已登录的 Apple ID(顶部的按钮)
  4. \n
  5. 点击“退出”
  6. \n
\n\n

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

\n