为未续订订阅恢复交易而不注册

AppStore审阅者要求我们购买Non-renewing subscriptionstypes不会强制用户注册。 他也意味着用户不注册,他也可以购买Non-renewing subscriptionstypes

而苹果文档要求Non-renewing subscriptions必须可以恢复。 他说 :

不更新的订阅和消耗品不会由Store Kit自动恢复。 但是,不更新订阅必须是可恢复的。 要恢复这些产品,您必须在购买时在自己的服务器上logging事务,并提供自己的机制将这些事务恢复到用户的设备。

所以当用户注册时,我会给用户一个唯一的userId,他可以用他的用户名和密码得到userId,这样我就可以分享用户的信息给不同的ios设备,我可以恢复交易,因为他们有一个唯一的userId 。

但是问题是这样的:当用户没有注册时,我的服务器也会给它们一个唯一的userId,非注册用户将把userId保存到.plist 。 他们也可以恢复交易。 但是,当他删除我的应用程序,然后下载一次,userId丢失,所以他不能恢复交易。 他将是一个正常的默认用户。

appStore会拒绝我的应用程序的原因:

无法注册,无法恢复非续订订阅事务,这会在还原之前删除应用程序

如果appStore会拒绝,如何解决它,thx所有。

我已经提交我的应用程序到appStore。

我为恢复注册或login的非续订订阅恢复事务。

我不会恢复不更新订阅谁不“注册”和“删除我的应用程序”的交易。

我的应用程序被批准

  • 对于不可再生的inapp项目,注册必须是可选的。
  • 你可以给他们一个消息,如果你想在多个设备上使用,那么你必须注册并login。
  • 在注册时,电子邮件和手机等个人信息不必是可选的,您必须具体解释为什么您保留了电子邮件注册(例如密码恢复)。
  • 就像以前的评论一样,如果不可再生物品的inapp不那么昂贵,他们可以接受这个应用程序。 但是,如果inapp是昂贵的,他们不会让你违反任何规则。

注意:您可以使用一种机制来使用UUID并将其存储在钥匙串中。 如果你重新安装应用程序,你可以从钥匙链再次获得,并使用相同的UUID,你可以在你的服务器pipe理到期。

Applebuild议使用iCloud来坚持购买数据:

 #if USE_ICLOUD_STORAGE NSUbiquitousKeyValueStore *storage = [NSUbiquitousKeyValueStore defaultStore]; #else NSUserDefaults *storage = [NSUserDefaults standardUserDefaults]; #endif NSData *newReceipt = transaction.transactionReceipt; NSArray *savedReceipts = [storage arrayForKey:@"receipts"]; if (!receipts) { // Storing the first receipt [storage setObject:@[newReceipt] forKey:@"receipts"]; } else { // Adding another receipt NSArray *updatedReceipts = [savedReceipts arrayByAddingObject:newReceipt]; [storage setObject:updatedReceipts forKey:@"receipts"]; } [storage synchronize]; 

至less比用户删除应用程序时丢弃购买信息要好。 让客户支付两次服务,并不是一个好的用户体验。