iOSで自動更新定期購読の課金処理を実装していて、サーバーサイドでのレシート検証で不正なレシートを弾く方法を探しています。
ちょっと古いのですが、こちらの記事を参照して、レシート検証で検証すべき点は以下の3点であると認識しています。
- 不正なレシートを検出して弾く
- 別アプリの正規購入レシートを検出して弾く
- あるユーザーが購入した正規購入レシートを別のユーザーが使用しようとしているのを検出して弾く
1と2については、記事にあるように、verifyReceipt
エンドポイントにレシートを投げて、返ってきたレスポンスボディのstatus
、bundle_id
をチェックすれば大丈夫かと思います。(記事ではproduct_id
のチェックとなっていますが、自分のアプリかをチェックするのであれば、bundle_id
が適切かと思いました。)
3についても、記事にあるように、「決済をした後、一番最初にそのレシートを有料会員登録にしようしたユーザーを正規のユーザーとし、 以降のユーザーを不正ユーザーとして扱うことにしています。」とすれば、一応不正ユーザーを検知できるかとは思うのですが、これだと、Restore時(新しくスマホを購入するなどの事情で別の端末でアプリを使う場合)に正しいユーザーなのに不正ユーザーとして検知されてしまうのではないかと思っています。
ユーザー認証の処理があれば、アクセストークンをヘッダーに入れてリクエストすることでユーザーをサーバー側で認識できるのですが、今回ユーザー認証はなしで実装することとなりました。
このような状況で3の場合の処理のベストプラクティスはどのようなものが考えられるでしょうか。
もしご存知の方がいらっしゃいましたら、ご教授いただけますと幸いです。
あなたの回答
tips
プレビュー