2016-03-30 7 views
1

私のアプリでは、サブスクリプションの料金を支払うユーザーだけに表示するアイテムがあります。ユーザーは電子メールとパスワードでアプリにログインでき、ログアウトすることができ、同じデバイスに別のユーザーを記録することができます。同じAppleアカウントでもアプリケーション内のユーザーアカウントが異なる場合の復元IAPを無効にする

私の問題は、電話のApple Idはまだ同じです。だから、別のユーザがログインしたとき、彼は何も支払っていないのに買い物を復元することができました。

私の質問はどのように修正できますか? Appleアカウントを私のカスタムアカウントに接続するにはどうしたらいいですか?または、少なくとも何らかの形でIAPを復元しようとすると、このAppleアカウントに既にこのサブスクリプションがありますが、別のユーザーがログインしていることを確認します。ありがとう

編集: 自分のアプリで自動更新サブスクリプションを使用したいのですが、自分のカスタムアカウントシステムに接続する方法がわかりません。

+0

私はAppleがこの実装でアプリケーションを拒否すると思います。 In App PurchaseはAppleIDに関連付けられている必要があり、ユーザーはIAPコンテンツにアクセスする前にログインする必要がありません。私はちょうど17.2のガイドラインのためにいくつかのアプリを拒否しました(現在受け入れられています):https://developer.apple.com/app-store/review/guidelines/ – r3c0d3

+0

私は私がやったアプリで働いています以下で説明します。しかし、私たちは特に電子メールを使用せず、むしろ「ユーザー名」を使用しました。もし彼らが望むなら彼らは彼らの電子メールを作ることができます。アプリを使用する前にログインする必要がありました。 –

答えて

5

ユーザーがIAPを作成すると、購入に使用されたApple IDがわからなくなります。しかし、あなたが知っていることは、購入のトランザクションIDです。あなたがしたいことは、カスタムアカウントで元の購入のトランザクションIDを保存することです。

ユーザーが復元するときに、SKPaymentTransactionのoriginalTransactionのtransactionIdentifierがカスタムアカウントと一致するかどうかを判断します。そうでない場合、これは別のユーザーであるとみなすことができます。あなたはここでその詳細を読むことができます:領収書は、元のトランザクションIDと呼ばれるフィールドが含まれていることを

https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/StoreKitGuide/Chapters/Restoring.html

注意を。これは、元のトランザクションIDを追跡するためにサブスクリプションに使用するものです。これは、自動更新するたびに、自動更新のために新しいトランザクションIDが生成されるためです。領収書には実際にすべての購入が含まれます。

サーバーでは、元のトランザクションIDと領収書を保存することをお勧めします。基本的には、この周りにストアするメタデータが多くなるほど、ダブルチェックトランザクションの任意の形式を実行する必要がある場合は、より良い結果が得られます。

関連する問題