SKPaymentQueue addTransactionObserver在应用内购买后在启动时询问App Store密码

mon*_*uno 56 iphone itunes passwordbox app-store in-app-purchase

我的应用程序正在使用应用内购买,我的大多数用户可以毫无问题地购买.对于这些人,我的应用程序在购买成功后下载内容,他们很高兴.

但是,对于越来越多的用户,一旦他们完成了成功的应用内购买,他们就会在每次应用启动后被要求提供App Store密码.我相信这是在致电:

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

我根据Apple的应用内购买指南中的第6步在启动时调用它:

我的猜测是,出于某种原因,Apple的应用内购买服务器没有注册交易成功完成 - 即使我打电话

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

当交易完成并且我的内容已成功下载时.

2个问题:

  1. 还有其他人看到这个吗?

  2. 有没有人有建议的修复?

BOUNTY编辑:

这是一个使用不同Apple-ID制作的交易.这就是为什么除非你在对话框中键入正确的凭据,否则无法完成.该问题应该是:

  1. 如何防止此类死机事务(事务尚未完成,用户没有网络,同时更改App-ID)?
  2. 你怎么修剪SkPaymentQueue

Ilk*_*aci 32

我有同样的问题.确定你打电话

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

对于交易的所有三种状态:SKPaymentTransactionStatePurchased,SKPaymentTransactionStateRestored,SKPaymentTransactionStateFailed.

  • 是的,但我甚至没有_getting_任何交易.我甚至为每个[5个SKPaymentTransactionObserver委托方法](https://developer.apple.com/library/ios/documentation/StoreKit/Reference/SKPaymentTransactionObserver_Protocol/Reference/Reference.html)插入了委托.iTunes商店要求我每次登录_我现在启动我的应用程序.. (3认同)

dor*_*mon 7

我遇到了在通话时出现登录提示的问题:

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

即使我没有使用我的应用程序(在主屏幕或其他应用程序中),它也会偶尔出现,这真的很烦人.环顾四周,这个问题似乎有很多建议的答案,但我终于从我收集的内容中找到了一个解决方案.

注意:在第1步之前,我已删除iTunes Connect中的测试沙盒帐户.我不确定这是否会影响解决方案.

为了解决这个问题,这就是我所做的:

  1. 从Xcode运行您的应用程序.
  2. 等待提示出现.输入所需帐户的密码,然后点按"确定".
  3. 按设备上的主屏幕按钮.
  4. 从Xcode中杀死应用程序.
  5. 从设备中删除应用程序.
  6. 在"设置"应用中退出iTunes和App Store.
  7. 关闭设备,然后重新打开.
  8. 从App Store购买东西.当它提示您时,请使用生产Apple ID帐户登录.(我假设你应该能够在设置应用程序下的iTunes和App Store中使用生产帐户登录,但这就是我的做法).
  9. 返回Xcode并再次运行您的应用程序.(这应该是一个新的安装,因为你之前删除了应用程序.)
  10. 等待登录提示出现.
  11. 点按取消.一个对话框说"需要登录.点击继续并登录以检查下载.[环境:沙箱]"应该出现.这是与以前的关键区别.当我在询问密码时按下"取消"时,我从未出现过此对话框.
  12. 点按继续.
  13. 输入帐户的密码.

而已.从那时起,每当我运行我的应用程序时,登录提示就会停止,并且也会在随机时间停止.

希望这可以帮助!


Cli*_*udo 7

不要在这里删除答案。正是这个特别的 Stackoverflow 问题误导了我并让我搞砸了好几天。

我把它放在这里是因为有很多非常糟糕的答案提供了关于如何解决问题的错误信息。

不要:

  • 删除沙箱测试用户。这使得问题无法解决,您必须联系 Apple 开发人员支持以手动解决。
  • 如果您删除沙箱测试用户,当您随后反复提示您以该用户身份登录并完成事务时,您无法删除,因此称为Endless Loop问题。您也将无法再次添加已删除的测试用户;开发人员门户说用户 ID 已被使用。
  • 删除应用程序或重新安装 iOS 或任何其他此类废话。它没有效果,不能解决问题,浪费大量时间。

做:

  • 为所有事务调用 Finish。
  • 如果由于某种原因中断,只需在应用程序的后续运行中完成即可。该应用程序将重复发送付款队列通知,直到您调用完成为止:

[[SKPaymentQueue defaultQueue] finishTransaction:transaction];

就是这样,完成所有交易!否则,每次您的应用程序在该设备上启动时,您都会被发送到无限循环的登录请求中。