我正在开发一款iOS应用。它将进行非消费类应用内购买。
Q1。假设用户使用“account1”在iPad或iPhone上登录“iTunes& App Store”,然后购买应用内购买,然后退出“iTunes& App Store”。然后他们回到应用程序。
他们的应用内购买是否仍然存在?不是会它,但应该吗?
如果没有,我的问题得到解答。另一方面,让我们说它应该存在。然后我有一个后续问题。
Q2。在完成上述所有步骤后,同一位用户使用其他帐户“account2”登录“iTunes& App Store”。如果以“account2”身份登录,他们使用“account1”进行的应用内购买是否仍然存在?
如果您可以通过Apple 的官方声明来增强您自己清晰简洁的答案,那就太棒了,更有可能被标记为解决方案!如果没有,请提前感谢您对最佳用户体验的个人想法,想法和意见......如果Apple对此没有明确的立场,那么无论谁做出最好的案例都会将其答案标记为解决方案。
答案 0 :(得分:1)
当然,两个用户在同一台设备上输入App Store凭据的情况很不寻常。也就是说,我能看到Apple having something to say about this最接近的是:
"非消耗品。用户可用的项目 无限期地在所有用户的设备上。他们可以使用 所有用户的设备。示例包括内容,例如书籍和 游戏关卡和其他应用功能。"
如果您从字面上理解这一点,并且如果您认为该设备仍然是同一个用户即使他们已经退出,那么我认为您应该确保将非耗材也授予新用户
根据我的经验,许多应用程序在购买IAP时在本地存储,因此如果应用程序尚未删除,任何用户都将看到未锁定的内容。您的应用程序不一定知道新的iTunes用户正在使用该应用程序,因此很难检测到新用户正在使用该应用程序并撤消该内容。
此外,如果您不希望两个用户分享购买,那么在我看来,将购买作为消费品并在您的应用中强制执行某种登录机制会更有意义。它会记入个人认证帐户。
答案 1 :(得分:1)
购买实际上存储在设备上的应用包中的文件中。可以使用appStoreReceiptURL访问文件的路径或URL。 This documentation州:
在OS X中,如果appStoreReceiptURL方法不可用(在旧系统上),则可以回退到硬编码路径。收据的路径是应用程序包内的/ Contents / _MASReceipt / receipt。
虽然这是特别提及OS X的引用,但iOS的情况也是如此,除了结果是本地化的应用程序URL。为了进一步支持这一点,NsBundle的文档(appStoreReceiptURL
返回的内容)指出:
NSBundle对象可帮助您访问磁盘上的bundle目录中的代码和资源。
因此,通过这种理解,我们可以得出结论,购买不是无国籍的。它们仍然在应用程序的上下文中。如果用户退出iTunes,则不会删除该文件。
如果应用程序收听SKPaymentQueue,则新的交易将不时出现,尤其是当用户购买自动续订订阅时。如果用户退出iTunes,他们将收到使用他们最初订阅的帐户登录的请求,以便应用程序接收并保存新收据。但我离题了。
通过在应用中保留购买状态,它允许在没有互联网连接的情况下使用购买。由于离线设备无法通过Apple进行身份验证,因此将购买状态保留在其他任何位置都会破坏此功能。所以是的,它应该存在。
对于 Q2 ,一旦收到account1
的交易,account2
的收据将替换为account2
。但是,在account2
进行首次交易account1
之前,收据仍将在磁盘上。这可以用作在用户和AFAIK之间共享购买的漏洞,没有使用您自己的用户帐户就没有好的解决方案。有bunch of stack posts描述了这个问题。
它应该发生吗?我希望它没有,但它似乎是购买收据的有状态设计的意外后果。