我有一个应用程序已经在 AppStore 上架了一段时间。
我可以从 iTunes 报告中看到它是使用Apple 的批量购买计划购买的,这很好,但是 - 我想知道某个设备是否正在运行批量购买的应用程序或标准的 AppStore 应用程序。
我尝试在收据内窥探 ( [[NSBundle mainBundle] appStoreReceiptURL]
) 但我找不到任何有用的信息。
为此目的创建不同的捆绑 ID 不是一种选择,并且有点错过了 VPP 的想法,所以请 - 不要提供它。
是否有程序化的方式来判断应用程序是否是使用 VPP 购买的?
问问题
618 次
1 回答
5
您在应用收据中查看 VPP 信息是对的,但您需要先使用设置的SKReceiptPropertyIsVolumePurchase
标志刷新它:
self.refresh = [[SKReceiptRefreshRequest alloc] initWithReceiptProperties:@{SKReceiptPropertyIsVolumePurchase : @YES}];
self.refresh.delegate = self;
[self.refresh start];
然后你得到你的收据数据requestDidFinish:
- (void)requestDidFinish:(SKRequest *)request {
NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
NSData *receipt = [NSData dataWithContentsOfURL:receiptURL];
// decode receipt and examine vpp fields here
}
解码苹果收据的方法有很多,我发现最简单的方法是使用 Apple 的收据验证器,因此我将收据数据移动到receipt-data.der
计算机上的文件 ( ) 中:
curl -d "{ \"receipt-data\" : \"$(base64 receipt-data.der)\" }" https://sandbox.itunes.apple.com/verifyReceipt
这显示了一些有趣的新领域:
"organization_display_name": "ACME Bad VPPReceipt Inc."
"receipt_type": "ProductionVPPSandbox"
"expiration_date": "2015-12-10 00:44:22 Etc/GMT"
这是在沙箱中,因此当您进入生产环境时结果会发生变化,但这应该足以确定给定设备是否为 vpp。如果您使用 Apple 的收据验证器,请确保将 URL 更改为https://buy.itunes.apple.com/verifyReceipt
.
于 2015-11-10T01:22:38.947 回答