CloudKit与沙盒用户同步测试

时间:2016-05-07 22:34:18

标签: swift macos testing cloudkit

我正在创建一个Mac应用,它具有非续订订阅作为应用内购买。我想将此数据同步到云中,原因如下:

  • 我希望用户能够在所有Mac上使用该应用
  • 应用内购买可启用小部件,因此小部件需要访问此数据。
  • 根据Apple的文档,应用程序必须通过某种注册/云同步来处理非续订订阅的恢复。

所以我决定实施CloudKit同步来存储以下数据:

  • 用户购买了哪个IAP产品(目前只有一个值,但将来可能会更改)
  • 购买的时间是什么时候。

以下是我在用户进行应用内购买时正在做的事情:

  1. 我验证收据
  2. 如果我找到任何IAP数据,我会将其同步到CloudKit
  3. 我使用一个函数从CloudKit获取所述小部件的购买数据
  4. 问题1:据我所知,所有应用内购买都包含在收据文件中,即使在删除和恢复后也是如此。我可以使用它,但是文档清楚地说我不应该这样做。甚至论坛也不确定......你觉得怎么样?

    问题2:在使用多个沙箱用户测试应用程序时,我注意到无论我使用哪个沙箱用户进行购买,当前登录的iCloud帐户(我的个人帐户)都会将收据数据同步到CloudKit。为什么购买者(App Store)用户没有将数据发送到他们的私有云数据库?我如何测试一切正常?我是否必须退出iCloud帐户才能使其正常工作?

    感谢您的时间:)

1 个答案:

答案 0 :(得分:2)

问题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,Apple开发人员技术支持工程师说:

  

我已经查询了进行更改的iTunes制作支持工程师 - " fix"在申请收据中提供非续订订阅的历史记录是永久性的。我的解释是,permament意味着如果我们进行更改,我们将在开发者大会上宣布更改,并宣布该函数将被弃用一段时间。

     

关于使用iCloud作为恢复非续订订阅的方法,我已经从我的App Review联系人那里听到 - 一个应用程序"可以使用iCloud来跟踪非续订订阅(NRS)但是它不能强制用户在购买之前登录。它必须是可选的 - 可以提醒用户iCloud需要从其他iOS设备访问NRS内容 - 如果用户希望以后能够访问此内容,则提供以后注册的方式。 #34;

来源:https://forums.developer.apple.com/thread/22345#79067

您可以尝试刷新应用收据以恢复不可续订的订阅,但它已broken before,文档不清楚,并且过去有报道称App Review拒绝尝试此操作的应用方法

问题2:

CloudKit始终使用设置>下的当前iCloud帐户的iCloud

App Store购买使用在设置>中配置的Apple ID。 iTunes& App Store

用户可以登录iCloud&amp ;;的同一Apple ID iTunes,但不保证。这是两个完全独立的设置。