質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.52%

  • iOS

    3994questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

iOSの課金の仕組みについて

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 706

xiaca

score 90

前提・実現したいこと

iOS/Androidアプリ内課金の不正なレシートによる有料会員登録を防ぐ

上記のサイトを参考にApp内課金の実装をしようとしています。  
しかし、以下の内容がわかりません。

  • クライアント側で接続不良によりレシートが送信できない時はどうするか?
    →スマホ側DBにレシート情報を保存しておき、サーバーに送信成功したかどうかを記録しておく。クライアント側はどこかのタイミング(起動時?画面遷移時?)に送信成功していないレシートがあれば送付する

  • サーバー側は送付されたレシートが他のユーザーで検証済かどうか確認するとあるがどのように行うのか?
    →送付されたレシートをDBに保存しておくのか?そして、検証成功したかどうかの情報をユーザーIDと紐付けて保持しておくのか?

どなたか経験がありましたらご教示ください

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

課金に対する考え方としては、通常のプログラミング処理とは違い、かなりシビアな世界になってきます。
最近は課金部分を肩代わりしてくれるサービスも出てきており実装も楽になっていますが、
個人で実装する場合、課金が上手く行かなかったりすると、最悪、訴訟にも発展しかねなかったり、
そのセキュリティホールを突かれて不正利用されたりします。

よく規約やガイドラインを読んで、慎重に実装することをお薦めします。
また約款や利用規約などの法務的書類の書き方や、それに対する法律の勉強もしておくべきでしょう。
でないと、いざという時の保険として自分を守りきることができません。

課金処理に関しては、お金が動くところは特に完全に正常であるという認識ができて初めて一連の課金処理を完了させます。
つまり多くの場合、プログラミング処理途中でロストしたり、リクエストが失敗した場合は、全て不正とみなします。
ただし、再度リクエストしてもらうなどの何らかのフォロー策も必要になることを忘れないでください。
(プログラムではなくユーザサポートとしてのやりとり)

iOSの課金に関して少し資料が古いかもしれませんが、こちら参考になるかと思います。
iOS課金まとめ
iOSの月額課金レシート検証

あとiOSとAndroidでは課金方法も変わってきますので注意してください。


【追記】

以下に処理マトリクスを記載します。

リクエスト 認証結果 レスポンス 結果 アプリ処理
通信失敗 - - 購入失敗 失敗しました。再実行してくださいとダイアログを出す
通信成功 購入可能と判断された 通信完了 購入完了 正常終了のダイアログを出して有料処理に移る
通信成功 購入可能と判断された 通信失敗 AppStore側で購入できない 失敗しました。再実行してくださいとダイアログを出す
通信成功 購入不可と判断された 通信完了 AppStore側で購入できない 失敗しました。再実行してくださいとダイアログを出す
通信成功 購入不可と判断された 通信失敗 AppStore側で購入できない 失敗しました。再実行してくださいとダイアログを出す

※認証結果:ログイン成功、プリペイド金額があるかの判断結果とする

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/04/04 23:50

    回答ありがとうございます。
    すいません。再度リクエストしてもらうなどのフォローについてもう少し教えてください。

    これは、例えばサーバ側の検証結果をクライアント側で受け取れなかった場合、ユーザに対して処理が中断されたことを明確に伝えて、再度、レシート送信を行うようなボタンを押してもらう and アプリ起動時のレシートチェック処理で前回中断されていた場合はレシートを送付するといった処理を入れるのでしょうか?

    キャンセル

  • 2017/04/05 11:14 編集

    すみません。誤解を生む表現でした。

    iOSはレシート処理は全てAppStore側に任せますので、
    AppStoreが必要としている情報を投げることになります。

    失敗した場合はそのレシートを使うのではなく破棄し、再度新しいレシートでの処理になります。
    #AppStoreで課金処理が完了していない状態
    回答に処理のマトリクスを追記しておきましたのでご確認ください。

    一度、iPhoneのゲームなどで課金処理のキャンセルや実行を行ってみてください。
    iPhoneの左上の通信マークのところに、くるくる回っているアイコンが出ているときに
    実際に通信していますので、画面上だけの処理なのか実際に通信が走っているのか判断できます。

    iOSでの課金は課金処理終了後にAppStoreからユーザに対してレシートメールが来ます。
    もし処理失敗した場合は、ユーザーサポートとして人間がそれを元にちゃんと課金されているかの判断をして処理を行うことになります。

    ちなみに、お金だけ取られてアイテムなどが与えられなかった場合は、ユーザーは怒ってきますが
    お金を取らないで不正にアイテムを入手できる場合は、何も言ってきません。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.52%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • iOS

    3994questions

    iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。