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

我的应用程序正在使用应用内购买,我的大多数用户可以毫无问题地购买。对于这些人,我的应用程序在购买成功后下载内容,他们很高兴。 但是,对于越来越多的用户,一旦他们完成了成功的应用内购买,他们就会在每次应用启动后被要求提供App Store密码。我相信这是在致电:
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
我根据Apple的应用内购买指南中的第6步在启动时调用它: 存档指南:https://web.archive.org/web/20130515222703/https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/AddingaStoretoYourApplication/AddingaStoretoYourApplication.html 实际指南:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/DeliverProduct.html#//apple_ref/doc/uid/TP40008267-CH5-SW4 我的猜测是,出于某种原因,Apple的应用内购买服务器没有注册交易成功完成 - 即使我打电话
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
当交易完成并且我的内容已成功下载时。 2个问题: 还有其他人看到这个吗? 有没有人有建议的修复? BOUNTY编辑: 这是一个使用不同Apple-ID制作的交易。这就是为什么除非你在对话框中键入正确的凭据,否则无法完成。该问题应该是: 如何防止此类死机事务(事务尚未完成,用户没有网络,同时更改App-ID)? 你怎么能修剪
SkPaymentQueue
?     
已邀请:
我有同样的问题。确定你打电话
[[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 
对于交易的所有三种状态:SKPaymentTransactionStatePurchased,SKPaymentTransactionStateRestored,SKPaymentTransactionStateFailed。     
我遇到了在通话时出现登录提示的问题:
[[SKPaymentQueue defaultQueue] addTransactionObserver:observer];
即使我没有使用我的应用程序(在主屏幕或其他应用程序中),它也会偶尔出现,这真的很烦人。环顾四周,这个问题似乎有很多建议的答案,但我终于从我收集的内容中找到了一个解决方案。 注意:在第1步之前,我已删除iTunes Connect中的测试沙盒帐户。我不确定这是否会影响解决方案。 为了解决这个问题,这就是我所做的: 从Xcode运行您的应用程序。 等待提示出现。输入所需帐户的密码,然后点按“确定”。 按设备上的主屏幕按钮。 从Xcode中杀死应用程序。 从设备中删除应用程序。 退出iTunes& App Store中的App Store。 关闭设备,然后重新打开。 从App Store购买东西。当它提示您时,请使用生产Apple ID帐户登录。 (我假设你应该能够在设置应用程序下的iTunes& App Store中使用生产帐户登录,但这就是我的做法)。 返回Xcode并再次运行您的应用程序。 (这应该是一个新的安装,因为你之前删除了应用程序。) 等待登录提示出现。 点按取消。一个对话框说“需要登录。点击继续并登录以检查下载。[环境:沙箱]”应该出现。这是与以前的关键区别。当我在询问密码时按下“取消”时,我从未出现过此对话框。 点按继续。 输入帐户的密码。 而已。从那时起,每当我运行我的应用程序时,登录提示就会停止,并且也会在随机时间停止。 希望这可以帮助!     
我怀疑这是一个正确的行为。当您设置委托SKPaymentQueue时,尝试检查是否有一些事务要完成。可能没有完成的交易,但检查的事实需要在iTunes中登录。而且我认为你无能为力。 它通常有一定的意义,但对于已经设置了每次交易密码的用户(例如某些儿童保护)来说,这非常烦人。因此,与之抗争的唯一方法是在您要求iTunes时明确设置委托。例如,您可以添加一些按钮,例如“恢复我的购买”。不是很漂亮,但绝对不那么讨厌。     
存在称为“无限循环”的问题。在汽车可再生能源的早期,这是一个很大的问题,大约一个星期,服务器没有将续订限制为5.获得交易并且不调用finishTransaction的设备将把该交易交付给设备一次一个星期,直到该特定测试用户登录并调用finishTransaction。如果您切换到飞行模式,您可以“清除”这些交易一周 - 但他们会回来。     
不要在这里删除答案。正是这个特殊的Stackoverflow问题误导了我并且把我搞砸了好几天。 我把它放在这里因为有很多非常糟糕的答案提供了关于如何解决问题的错误信息。 不要: 删除沙箱测试用户。这使得无法解决问题,您必须联系Apple开发人员支持以手动解决。 如果删除沙盒测试用户,当您随后反复提示以该用户身份登录并完成事务时,则不能,因此名称Endless Loop问题。您也无法再次添加已删除的测试用户;开发人员门户网站表示用户ID已被使用。 删除应用程序或重新安装iOS或任何其他此类废话。它没有效果,没有解决问题,浪费了很多时间。 做: 为所有交易调用完成。 如果由于某种原因中断了一个,只需在App的后续运行中完成。应用程序将重复发送付款队列通知,直到您调用完成为止:   [[SKPaymentQueue defaultQueue] finishTransaction:transaction]; 就是这样,完成所有交易!否则,每当您的应用程序在该设备上启动时,您将被发送到无尽循环的地狱。     
我在测试IAP时遇到同样的问题。 我测试了3个测试帐户,应用程序会继续询问两个帐户的密码。即使我没有触摸任何购买/恢复按钮或addTransactionObserver。 我认为这是因为之前的一些交易没有正确完成, 但是
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
根本无法帮助。 所以这就是我要解决这个问题的方法: 无论app多少次,都输入每个帐户的密码 商店要求 - 我为3个帐户输入6次 - 直到它从不问 再次。 转到设置并注销苹果ID。 正常退出应用程序 - 不要在xcode中终止它。然后杀死任务列表中的进程。 从设备中删除应用程序(只需删除该应用程序将无法正常工作,它仍然会要求输入密码) 重启设备 从XCode /再次运行应用程序在您的情况下从应用商店重新安装应用程序。 使用iTunes测试用户时受到预期序列的启发     
我通过删除与此问题相关的iTunes Connect测试用户帐户解决了这个问题。应用程序实际上再次要求登录,但随后它消失了(我还删除了应用程序,重新启动了iPhone并以普通的非沙盒用户身份登录,在其他非沙盒应用程序中进行了真正的还原,然后启动了应用程序)     
如果有人看到这个并且正在使用GoogleMobileAds.framework,那么您可能还需要致电
[GADMobileAds disableAutomatedInAppPurchaseReporting];
-application:didFinishLaunchingWithOptions:
    
这似乎是一个无法解决的问题:)我将在Apple支持中提交请求...     
删除并重新安装应用程序将删除与其他itunes帐户关联的任何旧事务。如果您仍然看到事务发布到通知队列,那么您的逻辑中可能有一些分支没有调用finishTransaction。 您需要在发布到paymentQueue:updatedTransactions:的所有交易上调用finishTransaction,甚至是使用SKPaymentTransactionStateFailed的交易。     
与iOS更新5.1.1中修复的应用内购买相关的错误 http://support.apple.com/kb/DL1521     
检查以下内容,因为我在viewDidLoad方法中使用了它。当苹果希望我从非消耗品转到消耗品时我拒绝了应用程序,但是我在viewDidLoad方法中留下了以下行:(我认为密码提示是从测试用户交换到普通用户回到测试用户)
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions];
一旦删除,密码请求就会停止。 我离开了:
[[SKPaymentQueue defaultQueue] addTransactionObserver:self];
in和应用程序现在已经被批准了。     
你知道,我通过在updatedTransactions中进行修改来解决这个问题。我并没有为所有情况添加
[[SKPaymentQueue defaultQueue] finishTransaction:transaction];
。     
以下是我如何能够始终如一地重现并解决此问题: iOS 8.4,应用程序的开发构建。 1)使用测试(沙盒)Apple帐户。 2)恢复购买的交易。
[[SKPaymentQueue defaultQueue] restoreCompletedTransactions]
3)立即关闭应用程序。 4)退出测试帐户(通过设置) 5)启动应用程序 现在每次启动应用程序时,它都会弹出“登录”表单。如果我输入密码没关系。如果我购买或恢复购买并不重要。如果我删除并重新安装应用程序并不重要。每次启动应用程序时,都会显示iTune登录信息。 修复:硬重启设备。 这是我不知道的。这会发生在生产环境中(已发布的应用程序和实际的苹果登录)吗?我希望不是。     

要回复问题请先登录注册