ios - 如果用户在进入隧道之前付款,StoreKit 会返回什么
问题描述
苹果文档说以下内容:
例如,如果用户在进入隧道之前在您的应用中购买了一些东西,那么如果没有网络连接,您的应用可能无法交付购买的内容。下次您的应用启动时,StoreKit 会再次调用您的交易队列观察者,您的应用应该处理交易并交付购买的内容。
paymentQueue(_:updatedTransactions:)
我想知道当 StoreKit 未能在隧道中完成购买时,应用程序是否会收到任何东西?
我的第一个想法是 StoreKit 可能会返回SKPaymentTransactionState.failed
与网络连接相关的错误域或代码。但如果是这样,应用程序会调用finishTransaction(_:)
以删除支付队列中的交易。结果,上述文档最后一句中描述的内容永远不会发生。
那么,这是否意味着在上述情况下 StoreKit 不返回任何内容并且应用程序似乎挂起给用户?用户是否必须终止应用才能继续?或者,购买视图(由 StoreKit 提供)不会阻止应用程序的 UI,因此用户可以关闭购买视图并继续使用应用程序(我想应用程序没有实现活动指示器视图来阻止 UI)?
谢谢你的帮助。
解决方案
Apple 文档中描述的情况是,Apple 方面已完成购买,但您的应用无法交付内容。
例如,用户可能已经购买了电影租赁。需要在您的服务器上记录对该租赁的访问。
如果他们在 Apple 返回状态后进入隧道,.purchased
但在您从服务器确认购买已记录之前,您不会致电,completeTransaction
因为交易尚未完成,直到购买记录在您的服务器上。您可能会遇到网络错误或与服务器通信超时。
待处理的事务将保留在队列中,供您的应用稍后重试。
推荐阅读
- heroku - 如何在 Twilio 中使用 Heroku Review 应用程序?
- javascript - 显示密码计强度级别
- javascript - 对象键作为车把中的变量(enduro.js)
- android - 折叠 AppBarLayout 不使用 TabLayout 和 NestedScrollView 滚动
- c# - 优化 neo4j cypher 导入查询
- c++ - 在 C++ 项目中链接 ITK 头文件
- python-3.x - 请求发出的python HTTP批处理请求
- c# - 无法将 lambda 表达式转换为类型“InjectionMember[]”,因为它不是委托类型。- 如何在 MVC 应用程序中使用 DI
- javascript - JQuery 无法使用 hover() 方法识别数据表的“tbody”和“tr”
- java - Google Sheets API-com.google.gdata.util.AuthenticationException:刷新访问令牌失败:400 错误请求