我的应用正在使用应用内购买,我的大多数用户都可以毫无问题地购买。对于这些人,我的应用程序在购买成功后下载内容,他们很高兴。
但是,对于越来越多的用户,一旦他们完成了成功的应用内购买,他们就会在每次应用启动后被要求提供App Store密码。我相信这发生在致电:
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
我根据Apple的应用内购买指南中的第6步在启动时调用:
我的猜测是,出于某种原因,Apple的应用程序内购买服务器没有注册交易成功完成 - 即使我打电话
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
交易完成后我的内容已成功下载。
2个问题:
还有其他人看到这个吗?
有没有人有建议的修复方法?
BOUNTY EDIT :
这是一个使用不同Apple-ID制作的交易。这就是为什么除非你在对话框中键入正确的凭据,否则无法完成。问题应该是:
SkPaymentQueue
? 答案 0 :(得分:31)
我遇到了同样的问题。请确保你打电话
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
对于交易的所有三种状态:SKPaymentTransactionStatePurchased,SKPaymentTransactionStateRestored,SKPaymentTransactionStateFailed。
答案 1 :(得分:6)
我遇到了在通话时出现登录提示的相同问题:
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
即使我没有使用我的应用程序(在主屏幕或其他应用程序中),它也会偶尔出现,这真的很烦人。环顾四周,这个问题似乎有很多建议的答案,但我终于从我收集的内容中找到了一个解决方案。
注意:在第1步之前,我已删除iTunes Connect中的测试沙盒帐户。我不确定这是否会影响解决方案。
要解决这个问题,我就是这样做的:
就是这样。从那时起,每当我运行我的应用程序时,登录提示就会停止,并且也会在随机时间停止。
希望这有帮助!
答案 2 :(得分:3)
我怀疑这是一种正确的行为。当您设置委托SKPaymentQueue时,尝试检查是否有一些事务要完成。可能没有完成的交易,但检查的事实需要在iTunes中登录。而且我认为你无能为力。
它通常有一定的意义,但对于已经设置了在每个事务上要求密码的用户(例如某些儿童保护),这非常烦人。因此,与之抗争的唯一方法是在您要求iTunes时明确设置委托。例如,您可以添加一些按钮,例如“恢复我的购买”。不是很漂亮,但绝对不那么讨厌。
答案 3 :(得分:3)
有一个叫做“无限循环”的问题。在汽车可再生能源的早期,这是一个很大的问题,大约一个星期,服务器没有将续订限制为5.获得交易并且不调用finishTransaction的设备将把该交易交付给设备一次一个星期,直到该特定测试用户登录并调用finishTransaction。如果你切换到飞行模式,你可以“清除”那些交易一周 - 但他们会回来。
答案 4 :(得分:3)
请勿在此处删除答案。正是这个特殊的Stackoverflow问题误导了我并且把我搞砸了好几天。
我把它放在这里因为有很多非常糟糕的答案提供了有关如何解决问题的错误信息。
请勿:
<强> DO:强>
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
就是这样,完成所有交易!否则,每当您的应用程序在该设备上启动时,您都会被发送到无尽循环的地狱。
答案 5 :(得分:1)
测试IAP时遇到同样的问题
我测试了3个测试帐户,应用程序会继续询问两个帐户的密码。即使我没有触摸任何购买/恢复按钮或addTransactionObserver
我认为这是因为之前的一些交易没有正确完成,
但是[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
根本无法帮助
所以这就是我要解决这个问题的方法:
答案 6 :(得分:1)
我通过删除与此问题相关的iTunes Connect测试用户帐户解决了这个问题。应用程序实际上再次要求登录,但随后它消失了(我还删除了应用程序,重新启动了iPhone并以普通的非沙盒用户身份登录,在其他非沙盒应用程序中进行了真正的还原,然后启动了应用程序)
答案 7 :(得分:1)
如果有人看到这个并且正在使用GoogleMobileAds.framework,那么您可能还需要致电
[GADMobileAds disableAutomatedInAppPurchaseReporting];
-application:didFinishLaunchingWithOptions:
中的
答案 8 :(得分:0)
这似乎是一个无法解决的问题:)我将在Apple支持中提交请求......
答案 9 :(得分:0)
删除并重新安装该应用将删除与其他iTunes帐户关联的所有旧交易。如果您仍然看到发布到通知队列的事务,那么您的逻辑中可能有一些分支没有调用finishTransaction。
您需要在发布到paymentQueue:updatedTransactions:的所有交易上调用finishTransaction,甚至是SKPaymentTransactionStateFailed的交易。
答案 10 :(得分:0)
与iOS更新5.1.1中修复的应用内购买相关的错误 http://support.apple.com/kb/DL1521
答案 11 :(得分:0)
检查我的viewDidLoad方法中的以下内容。当苹果希望我从非消耗品转到消耗品时我拒绝了应用程序,但是我在viewDidLoad方法中留下了以下行:(我认为密码提示是从测试用户交换到普通用户回到测试用户)
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
一旦删除,密码请求就会停止。
我离开了:[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
in和应用程序现已获得批准。
答案 12 :(得分:0)
您知道,我通过在updatedTransactions中进行修改来解决此问题。我没有为所有情况添加[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
。
答案 13 :(得分:0)
以下是我如何能够始终如一地重现并解决此问题:
iOS 8.4,应用程序的开发版本。
1)使用测试(沙盒)Apple帐户。
2)恢复购买的交易。
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
3)立即关闭应用程序。
4)退出测试帐户(通过设置)
5)启动应用
现在每次启动应用程序时,它都会弹出“登录”表单。如果我输入密码没关系。如果我购买或恢复购买并不重要。如果我删除并重新安装应用程序并不重要。每次启动应用程序时,都会显示iTune登录信息。
修复:硬重启设备。
这是我不知道的。这会发生在生产环境中(已发布的应用程序和实际的苹果登录)吗?我希望不会。
答案 14 :(得分:0)
您说:
但是,对于越来越多的我的用户来说,一旦他们成功完成了应用程序内购买,便会在应用程序每次启动后要求他们提供应用程序商店密码。我相信在以下情况下会发生这种情况:
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
请注意,add(_ observer:
/ addTransationObserver:
的文档指出该调用可能导致用户通过App Store进行身份验证,因此这似乎是预期的行为。< / p>
//不保留观察者。仅当队列具有观察者时,事务数组才会与服务器同步。 这可能需要用户进行身份验证。
open func add(_ observer: SKPaymentTransactionObserver)
open func remove(_ observer: SKPaymentTransactionObserver)
因此,除了这里的其他答案之外,您可能还应该停止呼叫add observer
,直到准备好显示App Store登录提示为止。