やろうぜ!アプリ内课金
- 14. アプリ内课金の简単なフロー
課金リクエスト
同期レスポンス
購入画面表示指示
購入情報変更通知
アプリ 購入状態詳細内容リクエスト Marketアプリ
同期レスポンス
購入状態詳細内容送信
購入状態詳細内容受信確認
同期レスポンス
- 15. アプリからのリクエスト
課金リクエスト
同期レスポンス
購入画面表示指示
購入情報変更通知
アプリ 購入状態詳細内容リクエスト Marketアプリ
同期レスポンス
購入状態詳細内容送信
購入状態詳細内容受信確認
同期レスポンス
- 19. アプリからのリクエスト
NONCE
購入状態詳細取得リクエスト
(GET_PURCHASE_INFORMATION)とトランザク
ション回復リクエスト
(RESTORE_TRANSACTIONS)で必須
1回だけ利用できる値
Marketアプリからのトランザクションレス
ポンスの整合性の検証で使用
- 20. アプリからのリクエスト
NOTIFY_IDS
購入状態詳細取得リクエスト
(GET_PURCHASE_INFORMATION)とトランザク
ション回復リクエスト
(RESTORE_TRANSACTIONS)で必須
通知識別子の配列
DEVELOPER_PAYLOAD
開発者が自由につけれる値
結果に指定した値が返ってくるので開発
者が自由に使うことができる
- 22. アプリからのリクエスト
CHECK_BILLING_SUPPORTED
Marketアプリがアプリ内課金をサポートし
ているかどうかを確認するリクエスト
アプリ内課金はPlay Storeのversion 2.3.4 以上
月額課金はPlay Storeのversion 3.5 以上で対応
REQUEST_PURCHASE
アプリ内課金の実施を依頼するリクエス
ト
- 25. アプリからのリクエスト
アプリ内課金サポート確認
CHECK_BILLING_SUPPORTED
アプリ 同期レスポンス Marketアプリ
課金リクエスト
REQUEST_PURCHASE
同期レスポンス
購入画面表示指示
購入情報変更通知
アプリ GET_PURCHASE_INFORMATION Marketアプリ
同期レスポンス
購入状態詳細内容送信
CONFIRM_NOTIFICATIONS
同期レスポンス
- 27. 同期レスポンス
アプリ内課金サポート確認
CHECK_BILLING_SUPPORTED
アプリ 同期レスポンス Marketアプリ
課金リクエスト
REQUEST_PURCHASE
同期レスポンス
購入画面表示指示
購入情報変更通知
アプリ GET_PURCHASE_INFORMATION Marketアプリ
同期レスポンス
購入状態詳細内容送信
CONFIRM_NOTIFICATIONS
同期レスポンス
- 28. 同期レスポンス
トランザクション回復
RESTORE_TRANSACTIONS
同期レスポンス
アプリ レスポンスコード送信 Marketアプリ
購入状態詳細内容送信
すべてのリクエストには同期レスポンスが
Bundleで返ってくる
- 29. 同期レスポンス
返される可能性のあるレスポンス
リクエストタイプ Bundleで返されるキー
コード
RESULT_OK, RESULT_BILLING_UNAVAILABLE,
CHECK_BILLING_SUPPORTED RESPONSE_CODE
RESULT_ERROR, RESULT_DEVELOPER_ERROR
RESPONSE_CODE, PURCHASE_INTENT, RESULT_OK, RESULT_ERROR,
REQUEST_PURCHASE
REQUEST_ID RESULT_DEVELOPER_ERROR
RESULT_OK, RESULT_ERROR,
GET_PURCHASE_INFORMATION RESPONSE_CODE, REQUEST_ID
RESULT_DEVELOPER_ERROR
RESULT_OK, RESULT_ERROR,
CONFIRM_NOTIFICATIONS RESPONSE_CODE, REQUEST_ID
RESULT_DEVELOPER_ERROR
RESULT_OK, RESULT_ERROR,
RESTORE_TRANSACTIONS RESPONSE_CODE, REQUEST_ID
RESULT_DEVELOPER_ERROR
- 30. 返されるキー
RESPONSE_CODE
リクエストに関するステータス情報とエ
ラー情報
PURCHASE_INTENT
購入画面のActivityを起動するために必要
とするPendingIntent
REQUEST_ID
各リクエストの識別子
非同期応答を一致させるために使用
- 31. レスポンスコード
RESULT_OK
正常処理
RESULT_BILLING_UNAVAILABLE
API_VERSIONが対応していない場合やアプリ
内課金が使用できない国で使用する場合
に返ってくる
RESULT_ERROR
予期せぬサーバエラーなどで返ってくる
- 33. 同期レスポンス
アプリ内課金サポート確認
CHECK_BILLING_SUPPORTED
アプリ Bundle(RESPONSE_CODE) Marketアプリ
課金リクエスト
REQUEST_PURCHASE
Bundle(RESPONSE_CODE, PURCHASE_INTENT, REQUEST_ID)
購入画面表示指示
購入情報変更通知
アプリ GET_PURCHASE_INFORMATION Marketアプリ
Bundle(RESPONSE_CODE, REQUEST_ID)
購入状態詳細内容送信
CONFIRM_NOTIFICATIONS
Bundle(RESPONSE_CODE, REQUEST_ID)
- 34. 同期レスポンス
トランザクション回復
RESTORE_TRANSACTIONS
Bundle(RESPONSE_CODE, REQUEST_ID)
アプリ レスポンスコード送信 Marketアプリ
購入状態詳細内容送信
- 35. 非同期通知
課金リクエスト
REQUEST_PURCHASE
Bundle(RESPONSE_CODE, PURCHASE_INTENT, REQUEST_ID)
購入画面表示指示
購入情報変更通知
アプリ GET_PURCHASE_INFORMATION Marketアプリ
Bundle(RESPONSE_CODE, REQUEST_ID)
購入状態詳細内容送信
CONFIRM_NOTIFICATIONS
Bundle(RESPONSE_CODE, REQUEST_ID)
- 36. 非同期通知
トランザクション回復
RESTORE_TRANSACTIONS
Bundle(RESPONSE_CODE, REQUEST_ID)
アプリ レスポンスコード送信 Marketアプリ
購入状態詳細内容送信
- 38. 非同期レスポンスコード
RESULT_USER_CANCELED
購入画面で購入せずにBackボタンを押下
した時にくるコード
購入はされていない
RESULT_SERVICE_UNAVAILABLE
ネットワーク接続ができてない場合に
返ってくるコード
RESULT_ITEM_UNAVAILABLE
リクエストしたプロダクトIDがない場合
やまだ後悔されてない場合に返ってくる
- 41. 非同期通知
課金リクエスト
REQUEST_PURCHASE
Bundle(RESPONSE_CODE, PURCHASE_INTENT, REQUEST_ID)
購入画面表示指示
IN_APP_NOTIFY
アプリ GET_PURCHASE_INFORMATION Marketアプリ
Bundle(RESPONSE_CODE, REQUEST_ID)
PURCHASE_STATE_CHANGED
CONFIRM_NOTIFICATIONS
Bundle(RESPONSE_CODE, REQUEST_ID)
- 42. 非同期通知
トランザクション回復
RESTORE_TRANSACTIONS
Bundle(RESPONSE_CODE, REQUEST_ID)
アプリ RESPONSE_CODE Marketアプリ
PURCHASE_STATE_CHANGED
- 44. PURCHASE_STATE_CHANGEDの値
nonce
GET_PURCHASE_INFORMATION等で指定したnonce
の値が入っている
noti?cationId
IN_APP_NOTIFYと共にBroadCastで送信されて
くるMarket Serverで一意な値
orderId
トランザクション用の一意な値
Google Walletの注文IDに対応
- 48. キャンセルについて
キャンセルはgoogle checkoutの画面より行う
キャンセルされるとIN_APP_NOTIFYの通知が
くるのであとは購入と同じフロー
月額課金のキャンセルについて
アプリからはキャンセルできない
Market アプリのアプリ画面でキャンセル
ボタンを置く場合はMy App画面を開くIntent
でキャンセル画面に誘導
キャンセル後も有効期限内なら使用可能
- 54. サンプルアプリの注意点
プロダクトは早めに登録しないと公開まで1
時間ほどかかるのですぐに確認できない
BillingService.javaのhandleCommandメソッドで
CONFIRM_NOTIFICATIONSを実行する場所がある
が、そこは通らない。
CONFIRM_NOTIFICATIONSはPURCHASE_STATE_CHANGEDの
処理が終わった後に実行する
月額課金の指示は一度実行するとキャンセ
ルしても1ヶ月間は使用できなくなるので
LOGなどを確認する場合は先に入れておく
- 59. In?app Billing Ver1からVer2へ
Web上にあるドキュメントはVer1のものが多
い
Ver2になって(Subscriptionが追加されて)何が変
わったか?
各リクエストに送信するAPI_VERSIONが2に
変更
PURCHASE_STATE_CHANGEDの戻り値に
purchaseTokenが追加
PURCHASE_STATE_CHANGEDのpurchaseStateに3(破
棄)が追加