有没有什么办法知道由哪个iTunes帐户进行购买? – iOS

我的应用程序提供了一个应用程序内购买非消费types。 该应用程序已login设施。 是否有可能根据login的用户购买我的应用程序?

我知道这听起来很尴尬。 让我指定问题。

该设备已经在iTunes商店login了一个用户。 那时,当我的应用首次安装到设备上时,任何用户都可以使用凭证login到我的应用。 考虑一下,他做了一些购买并从应用程序注销。 现在,另一个用户login到应用程序,并且不能在应用程序购买之后使用之前用户可用的设施。 但是,如您所知基于iTunes商店帐户的非消费品购买(每个帐户只能购买一种非消费品)。 我尝试了以下的方式..

  1. 将用户ID保存到iCloud,但我不知道用哪个iTunes帐户购买了。 所以,我不能显示正确的消息“你应该login不同的iTunes帐户进行购买”。

  2. 在Android中,通过应用内结算v3, developer payloadstring可以与购买请求一起发送。 该string也会在为该购买进行查询时返回。 所以,这可以用来识别进行购买的用户。 有什么类似的iOS可用吗?

从iOS 7开始, SKMutablePayment具有applicationUsername属性,可以在付款时设置。 并且, SKPaymentQueue具有restoreCompletedTransactionsWithApplicationUsername:方法(链接) 。

苹果公司的指导是将您的服务器端用户ID打散,并在购买和恢复时将其传递给用户。 因此,对于您的情况,如果iTunes用户A购买了该产品,它将被绑定到该购买者的服务器端用户ID。 然后,如果iTunes用户B尝试恢复,恢复将失败,因为他们仍然会传递相同的服务器端用户ID。

您还必须跟踪(在服务器上)您的服务器端用户标识已经购买了该产品。 否则,如果iTunes用户B尝试恢复,则需要知道他们使用不同的iTunes帐户login到设备之间的区别,他们从未购买。 当然,您还需要阻止相同的服务器端用户在不同的iTunes帐户下购买产品两次。

注意事项:

  • 如果您已经购买了生产产品,这很可能不会起作用。
  • iOS 7+
  • 上面提到的“已经购买”的情况。

如果恢复购买是成功比由此帐户购买。

 [[SKPaymentQueue defaultQueue] addTransactionObserver:self]; [[SKPaymentQueue defaultQueue]restoreCompletedTransactions]; // Then this is called - (void)paymentQueueRestoreCompletedTransactionsFinished:(SKPaymentQueue *)queue { NSLog(@"%@",queue ); NSLog(@"Restored Transactions are once again in Queue for purchasing %@",[queue transactions]); NSMutableArray *purchasedItemIDs = [[NSMutableArray alloc] init]; NSLog(@"received restored transactions: %i", queue.transactions.count); for (SKPaymentTransaction *transaction in queue.transactions) { NSString *productID = transaction.payment.productIdentifier; [purchasedItemIDs addObject:productID]; NSLog (@"product id is %@" , productID); // here put an if/then statement to write files based on previously purchased items // example if ([productID isEqualToString: @"youruniqueproductidentifier]){write files} else { nslog sorry} } }