CloudKit 与沙盒用户同步测试
Posted
技术标签:
【中文标题】CloudKit 与沙盒用户同步测试【英文标题】:CloudKit sync testing with sandbox users 【发布时间】:2016-05-07 22:34:17 【问题描述】:我正在创建一个 Mac 应用,该应用具有非续订订阅作为应用内购买。我想将此数据同步到云端,原因如下:
我希望用户能够在其所有 Mac 上使用该应用程序 应用内购买启用小部件,因此小部件需要访问此数据。 根据 Apple 的文档,非续订订阅的恢复必须由应用程序通过某种注册/云同步来处理。所以我决定实现一个 CloudKit 同步来存储以下数据:
用户购买了哪个 IAP 产品(目前只有一个值,但将来可能会改变) 购买发生的时间。当用户进行应用内购买时,我现在正在执行以下操作:
-
我验证收据
如果我找到任何 IAP 数据,我会将其同步到 CloudKit
我使用一个函数从 CloudKit 获取上述小部件的购买数据
问题 1:据我所知,所有应用内购买都包含在收据文件中,即使在删除和恢复后也是如此。我可以使用它,但是文档清楚地表明我不应该使用它。连论坛都不确定……你怎么看?
问题 2:在使用多个沙盒用户测试应用程序时,我注意到无论我使用哪个沙盒用户进行购买,当前登录的 iCloud 帐户(我的个人帐户)都会将收据数据同步到 CloudKit。为什么购买者(App Store)用户没有将数据获取到他们的私有云数据库?如何测试一切正常?我是否必须退出我的 iCloud 帐户才能进行这项工作?
感谢您的宝贵时间:)
【问题讨论】:
【参考方案1】:问题 1:使用 App Receipt 恢复不可续订的订阅
来自 Apple 的文档:
Apple 关于应用内购买的非续订订阅是否保留在收据中的文档有矛盾的答案:
Yes(2016-05-11 检索):
表1-2订阅类型对比
Subscription type Auto-renewable Non-renewing Free
Users can buy Multiple times Multiple times Once
Appears in the receipt Always Always Always
Synced across devices By the system By your app By the system
Restored By the system By your app By the system
No(检索 2016-05-11):
消费产品或非续订订阅的应用内购买收据会在购买时添加到收据中。它会保存在收据中,直到您的应用完成该交易。在此之后,它会在下次更新收据时从收据中删除 - 例如,当用户进行另一次购买或您的应用显式刷新收据时。
来自 Apple 的开发者论坛:
在thread reporting the temporary (now fixed) loss of non-renewable subscriptions from the app receipt 中,一位苹果开发者技术支持工程师说:
我已询问做出更改的 iTunes 生产支持工程师 - 在申请收据中提供非续订订阅历史的“修复”是永久性的。我的解释是,永久意味着如果我们做出改变,我们会在开发者大会上宣布改变,并宣布一段时间内将弃用的功能。
关于使用 iCloud 作为恢复非续订订阅的一种方式,我从我的 App Review 联系人那里听说 - 一个应用程序“可以使用 iCloud 来跟踪非续订订阅 (NRS),但它不能强制用户在购买之前登录。它必须是可选的 - 可以提醒用户需要 iCloud 从他们的其他 ios 设备访问 NRS 内容 - 并提供一种稍后注册的方式,如果用户希望拥有稍后访问此内容。”
来源:https://forums.developer.apple.com/thread/22345#79067
您可以尝试刷新应用收据以恢复不可续订的订阅,但它有broken before,文档不清楚,并且过去有报告称应用审查拒绝尝试此方法的应用程序。
问题2:
CloudKit 始终使用 Settings > iCloud 下的当前 iCloud 帐户。
App Store 购买使用在 设置 > iTunes 和 App Store 中配置的 Apple ID。
用户可以为 iCloud 和 iTunes 登录同一个 Apple ID,但不能保证。这是两个完全不同的设置。
【讨论】:
以上是关于CloudKit 与沙盒用户同步测试的主要内容,如果未能解决你的问题,请参考以下文章