2017-11-02 14 views
1

アプリのロジック。 ログインパスワードで登録します。その後、購読していない(サーバーによってチェックされている)場合は、 "購読購読ページ"に行きます。iOS inapp購入サブスクリプションサーバの検証セキュリティ

問題。 私はuser1を登録します。購読を購入する。 token1はサーバーに移動します。 私はuser2を登録します。彼は、「購入申し込みページ」に行くのサブスクリプションを持っていないとして、「購入」をクリックすると、Appleは「あなたはすでにサブスクリプションを買って」と言うとtoken2を与える(なぜそれが別のトークンを与えるのでしょうか?)

var receiptUrl = NSData.FromUrl(NSBundle.MainBundle.AppStoreReceiptUrl); 
return receiptUrl.GetBase64EncodedString(NSDataBase64EncodingOptions.None); 

token2は行きますサーバーに転送します。その結果、1つのサブスクリプションを購入しましたが、同じサブスクリプションを使用する2人のユーザーがいます。 ユーザーのiTunesを識別する方法はありますか?トークンに沿って保存し、そのiTunesのユーザーは、すでにいくつかのサーバー側のアカウント

答えて

1

これはStoreKitの領収書の基本的な問題であり、私はほとんどの開発者がそれを理解していないと思うのサブスクリプションを購入しているかどうかを確認することができるようにします。

問題は、Appleが開発者に領収書が属するiTunesのアカウントを識別するための方法を与えないということです。これにより、ユーザーはiTunesの資格情報を他のユーザーと共有したり、購読を解除したりすることが簡単になります。

これを処理する正しい方法は、Apple verifyReceiptレスポンスのtransaction_idという実際のデータをデータベースに保存し、データベース内で一意であることを確認することです。これは大変な作業なので、価値がないかもしれません。

それはさらに、時には、あなたがiTunesアカウントが異なるアプリ側のアカウントで使用可能になりたいという事実によって複雑になります。たとえば、ユーザーがアカウントを作成してサブスクリプションを購入した場合、そのサブスクリプションが期限切れになり、後で新しいアカウントを作成して再度購入しようとすると、同じ領収書が複数のアカウントで使用されている場合でも許可する必要があります。

あなたはそれに対処したくない場合は、自動的にすべてのこれらのエッジケースを処理I have a service