2

しばらく前から AppStore で入手できるアプリがあります。
iTunes のレポートから、Apple のボリューム購入プログラムを使用して購入されたことがわかります。これは素晴らしいことですが、特定のデバイスでボリューム購入アプリまたは標準の AppStore アプリが実行されているかどうかを知りたいです。
領収書 ( [[NSBundle mainBundle] appStoreReceiptURL]) を調べてみましたが、情報が見つかりませんでした。
この目的のために別のバンドル ID を作成することはオプションではなく、VPP のアイデアを見逃しているため、提供しないでください。
アプリが VPP を使用して購入されたかどうかをプログラムで確認する方法はありますか?

4

1 に答える 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 レシートを解読する方法はたくさんありますが、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 に答える