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

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

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

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

Q&A

解決済

1回答

3329閲覧

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

scrpgil

総合スコア109

iOS

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

0グッド

0クリップ

投稿2017/04/04 02:22

編集2017/04/04 02:45

###前提・実現したいこと

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

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

  • クライアント側で接続不良によりレシートが送信できない時はどうするか?

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

  • サーバー側は送付されたレシートが他のユーザーで検証済かどうか確認するとあるがどのように行うのか?

→送付されたレシートをDBに保存しておくのか?そして、検証成功したかどうかの情報をユーザーIDと紐付けて保持しておくのか?

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

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

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

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

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

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

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


【追記】

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

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

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

投稿2017/04/04 09:52

編集2017/04/05 02:14
lazhuward

総合スコア1294

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

scrpgil

2017/04/04 14:50

回答ありがとうございます。 すいません。再度リクエストしてもらうなどのフォローについてもう少し教えてください。 これは、例えばサーバ側の検証結果をクライアント側で受け取れなかった場合、ユーザに対して処理が中断されたことを明確に伝えて、再度、レシート送信を行うようなボタンを押してもらう and アプリ起動時のレシートチェック処理で前回中断されていた場合はレシートを送付するといった処理を入れるのでしょうか?
lazhuward

2017/04/05 02:15 編集

すみません。誤解を生む表現でした。 iOSはレシート処理は全てAppStore側に任せますので、 AppStoreが必要としている情報を投げることになります。 失敗した場合はそのレシートを使うのではなく破棄し、再度新しいレシートでの処理になります。 #AppStoreで課金処理が完了していない状態 回答に処理のマトリクスを追記しておきましたのでご確認ください。 一度、iPhoneのゲームなどで課金処理のキャンセルや実行を行ってみてください。 iPhoneの左上の通信マークのところに、くるくる回っているアイコンが出ているときに 実際に通信していますので、画面上だけの処理なのか実際に通信が走っているのか判断できます。 iOSでの課金は課金処理終了後にAppStoreからユーザに対してレシートメールが来ます。 もし処理失敗した場合は、ユーザーサポートとして人間がそれを元にちゃんと課金されているかの判断をして処理を行うことになります。 ちなみに、お金だけ取られてアイテムなどが与えられなかった場合は、ユーザーは怒ってきますが お金を取らないで不正にアイテムを入手できる場合は、何も言ってきません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問