有什么办法可以知道是哪个 iTunes 帐户购买的吗? - iOS
Is there any way to know purchase made by which iTunes account? - iOS
我的应用提供了应用内购买非消耗型。该应用程序具有登录功能。是否可以根据登录用户到我的应用程序进行购买?
我知道这听起来很尴尬。让我具体说明问题。
该设备有一个用户已经在 iTunes 商店登录。那时,当我的应用程序第一次安装到设备时,任何用户都可以使用凭据登录到我的应用程序。考虑一下,他进行了一些购买并从该应用程序注销。现在,另一个用户登录了该应用程序,并且在应用程序内购买后无法使用前一个用户可用的设施。但如您所知,非消耗品购买是基于 iTunes store 账户的(每个账户只能购买一种非消耗品)。我试过以下方法..
将用户 ID 存储到 iCloud,但我不知道购买是通过哪个 iTunes 帐户进行的。所以,我无法显示正确的消息 "You should log in with different iTunes account to make purchase".
在 android 中,使用应用内结算 v3,可以将 developer payload
字符串与购买请求一起发送。当对该购买进行查询时,也会返回此字符串。因此,这可用于识别进行购买的用户。 iOS有没有类似的东西?
如果恢复购买比此帐户购买成功。
[[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}
}
}
从 iOS 7 开始,SKMutablePayment
有一个 applicationUsername
属性 可以在付款时设置。而且,SKPaymentQueue
有 restoreCompletedTransactionsWithApplicationUsername:
方法 (link).
Apple 的指导是对您的服务器端用户 ID 进行哈希处理,并在购买和恢复时传递该 ID。因此,在您的情况下,如果 iTunes 用户 A 购买了该产品,它将绑定到该购买者的服务器端用户 ID。然后,如果 iTunes 用户 B 尝试恢复,恢复将失败,因为他们仍然会传递相同的服务器端用户 ID。
您还必须(在服务器上)跟踪您的服务器端用户 ID 是否购买了该产品。否则,如果 iTunes 用户 B 尝试恢复,您将需要知道他们使用不同的 iTunes 帐户登录设备与他们从未购买过之间的区别。当然,您还希望防止同一服务器端用户在不同的 iTunes 帐户下两次购买该产品。
注意事项:
- 如果您已经在生产中进行了购买,这很可能不起作用。
- iOS 7+
- 我上面提到的"already purchased"场景。
我的应用提供了应用内购买非消耗型。该应用程序具有登录功能。是否可以根据登录用户到我的应用程序进行购买?
我知道这听起来很尴尬。让我具体说明问题。
该设备有一个用户已经在 iTunes 商店登录。那时,当我的应用程序第一次安装到设备时,任何用户都可以使用凭据登录到我的应用程序。考虑一下,他进行了一些购买并从该应用程序注销。现在,另一个用户登录了该应用程序,并且在应用程序内购买后无法使用前一个用户可用的设施。但如您所知,非消耗品购买是基于 iTunes store 账户的(每个账户只能购买一种非消耗品)。我试过以下方法..
将用户 ID 存储到 iCloud,但我不知道购买是通过哪个 iTunes 帐户进行的。所以,我无法显示正确的消息 "You should log in with different iTunes account to make purchase".
在 android 中,使用应用内结算 v3,可以将
developer payload
字符串与购买请求一起发送。当对该购买进行查询时,也会返回此字符串。因此,这可用于识别进行购买的用户。 iOS有没有类似的东西?
如果恢复购买比此帐户购买成功。
[[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}
}
}
从 iOS 7 开始,SKMutablePayment
有一个 applicationUsername
属性 可以在付款时设置。而且,SKPaymentQueue
有 restoreCompletedTransactionsWithApplicationUsername:
方法 (link).
Apple 的指导是对您的服务器端用户 ID 进行哈希处理,并在购买和恢复时传递该 ID。因此,在您的情况下,如果 iTunes 用户 A 购买了该产品,它将绑定到该购买者的服务器端用户 ID。然后,如果 iTunes 用户 B 尝试恢复,恢复将失败,因为他们仍然会传递相同的服务器端用户 ID。
您还必须(在服务器上)跟踪您的服务器端用户 ID 是否购买了该产品。否则,如果 iTunes 用户 B 尝试恢复,您将需要知道他们使用不同的 iTunes 帐户登录设备与他们从未购买过之间的区别。当然,您还希望防止同一服务器端用户在不同的 iTunes 帐户下两次购买该产品。
注意事项:
- 如果您已经在生产中进行了购买,这很可能不起作用。
- iOS 7+
- 我上面提到的"already purchased"场景。