Androidアプリにアプリ内課金を実装してみよう:Android Marketアプリ内課金サービス徹底解説(2)(4/4 ページ)
Androidアプリの新たな可能性を開拓するアプリ内課金について、概要から利用方法、アプリへの実装の仕方まで詳しく解説する特集
Androidアプリ内課金の実装に役立つリファレンス
以下はアプリ内課金を実装するうえで必要な定数定義や値の意味のリファレンスです。
■ Android Marketサーバレスポンスコード
以下のリストは、アプリに送られるAndroid Marketからのサーバレスポンスコードの一覧です。Android Marketはcom.android.vending.billing.RESPONSE_CODEブロードキャストインテントのresponse_codeエクストラで非同期にレスポンスコードを送信します。アプリは、これらのレスポンスコードをハンドリングしなければいけません。
- RESULT_OK
リクエストがサーバに送信成功したことを示すCHECK_BILLING_SUPPORTEDリクエストに対するレスポンスでこのコードは返され、課金はサポートされていることを示す - RESULT_USER_CANCELED
ユーザーが商品を購入せずに、「戻る」ボタンを押したことを示す - RESULT_SERVICE_UNAVAILABLE
ネットワーク接続がダウンしていることを示す - RESULT_BILLING_UNAVAILABLE
アプリ内課金はAPI_VERSIONの指定がAndroid Marketアプリの要求を満たしていないか、アプリにアプリ内課金を使用する資格がない(例えばユーザーがアプリ内購入を許可していない国に居住しているなど)ため、アプリ内課金が使用できないことを示す - RESULT_ITEM_UNAVAILABLE
Android Marketはアプリの商品リストを見つけられなかったことを示す。これは、もしREQUEST_PURCHASEリクエストで商品IDの“つづり”を間違えている場合や商品がアプリの商品リストに登録されていない場合に引き起こされる - RESULT_ERROR
想定しないサーバエラーを示す - RESULT_DEVELOPER_ERROR
アプリがアプリ内課金リクエストを作成することを試み、しかしアプリのマニフェストにcom.android.vending.BILLINGパーミッションが定義されていないことを示す。「アプリが署名されていない」「リクエストにバンドルキーが存在しない」「リクエストに許可されていないリクエストタイプを使用した」など、誤ったリクエストを送信した場合にも起こる
■ アプリ内課金サービスのインターフェイス
以下に、Android Marketアプリ内課金サービスのインターフェイスについて述べます。インターフェイスはアプリ内課金サンプルアプリに含まれるIMarketBillingService.aidlファイルで定義されます。
インターフェイスは1つの引数を取るsendBillingRequest()メソッドで構成されます。このメソッドはBundleを引数に取ります。Bundleに示されるいくつかの主要なキーと値のペアを含みます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
開発者固有文字列は、REQUEST_PURCHASEリクエストを作成する際に指定できます。このフィールドは注文のためのトランザクション情報に含まれるJSON文字列で返されます。開発者は、このキーを使用して注文のための補助情報を送信できます。
例えば、このキーを注文のインデックスとして使用した場合、購入情報をデータベースに格納する際に便利です。このキーを使用してデータやコンテンツを送信しないことを推奨します。
表3はそれぞれのリクエストタイプのために戻されるキーを示しています。
リクエストタイプ | 戻されるキー | レスポンスコードの取り得る値 |
---|---|---|
CHECK_BILLING_SUPPORTED | RESPONSE_CODE | RESULT_OK RESULT_BILLING_UNAVAILABLE RESULT_ERROR RESULT_DEVELOPER_ERROR |
REQUEST_PURCHASE | RESPONSE_CODE PURCHASE_INTENT REQUEST_ID |
RESULT_OK RESULT_ERROR RESULT_DEVELOPER_ERROR |
GET_PURCHASE_INFORMATION | RESPONSE_CODE REQUEST_ID |
RESULT_OK RESULT_ERROR RESULT_DEVELOPER_ERROR |
CONFIRM_NOTIFICATIONS | RESPONSE_CODE REQUEST_ID |
RESULT_OK RESULT_ERROR RESULT_DEVELOPER_ERROR |
RESTORE_TRANSACTIONS | RESPONSE_CODE REQUEST_ID |
RESULT_OK RESULT_ERROR RESULT_DEVELOPER_ERROR |
■ アプリ内課金ブロードキャストインテント
Android Marketアプリが送信するアプリ内課金ブロードキャストインテントについて説明します。これらのブロードキャストインテントはアプリ内課金で発生したイベントをアプリに通知します。アプリはアプリ内課金のサンプルアプリに含まれるBillingReceiverのようなBroadcastReceiverを実装しなければいけません。
● com.android.vending.billing.RESPONSE_CODE
このブロードキャストインテントはAndroid Marketレスポンスコードを含み、アプリ内課金リクエストを作成した後に送信されます。サーバレスポンスコードは課金リクエストがAndroid Marketに送信成功したことを、または課金リクエスト中にいくつかのエラーが発生したことを示します。
このインテントは購入状態変更(払い戻しや購入情報など)を報告するために使用されません。このレスポンスで送信されたレスポンスコードの詳細な情報については、「アプリ内課金のためのAndroid Marketレスポンスコード」を参照してください。サンプルアプリはACTION_RESPONSE_CODEと命名された定数に、このブロードキャストインテントが割り当てられています。
エクストラは、以下です。
- request_id
longで表されるリクエストIDです。リクエストされるとき、リクエストIDはその課金リクエストを特定し、Android Marketによって戻される - response_code
intで表されるAndroid Marketサーバレスポンスコード
● com.android.vending.billing.IN_APP_NOTIFY
このレスポンスは購入状態が変更されたことを示します。つまり、購入成功、キャンセル、払い戻しを意味します。このレスポンスは1つ以上の通知IDを含みます。それぞれの通知IDはサーバサイドメッセージと一致し、それぞれのメッセージは1つ以上のトランザクション情報を含みます。
アプリがIN_APP_NOTIFYブロードキャストインテントを受信した後、GET_PURCHASE_INFORMATIONリクエストを通知IDと一緒にメッセージの詳細を受信するために送ります。サンプルアプリでは、ACTION_NOTIFYと命名された定数が、このブロードキャストインテントに割り当てられています。
エクストラは、以下です。
- notification_id
Stringで表される購入状態変更のための通知ID。Android Marketは購入状態が変更されたときにアプリに通知し、通知はユニークな通知IDを含む。購入状態変更の詳細を取得するために、アプリはGET_PURCHASE_INFORMATIONリクエストと一緒に通知IDを送信する
● com.android.vending.billing.PURCHASE_STATE_CHANGED
このブロードキャストインテントは1つ以上のトランザクション情報の詳細を含みます。トランザクション情報はJSON文字列を含みます。JSON文字列は署名されていて、シグネチャは(暗号化されていない)JSON文字列と一緒にアプリに送信されます。
アプリ内課金メッセージの安全性を確立する補助として、アプリはJSON文字列のシグネチャを検証できます。サンプルアプリではこのブロードキャストインテントはACTION_PURCHASE_STATE_CHANGEDと命名された定数に割り当てられています。
エクストラは、以下です。
- inapp_signed_data
Stringで表される署名されたJSON文字列 - inapp_signature
Stringで表されるシグネチャ
アプリはブロードキャストインテントとエクストラをアプリ内でユニークな定数にマッピングするべきです。サンプルアプリのConsts.javaを参照すれば、その方法が分かります。
JSON文字列のフィールドは以下のようになっています。
- nonce
ナンス。アプリはナンスを生成し、GET_PURCHASE_INFORMATIONリクエストで送信。Android MarketはJSON文字列の一部としてナンスを返し、アプリは返されたナンスを使用してメッセージの完全性を検証できる - notificationId
IN_APP_NOTIFYブロードキャストインテントで送信されるユニークなID。それぞれのnotificationIdはAndroid Marketサーバ上の受領待ちメッセージと一致。アプリはGET_PURCHASE_INFORMATIONメッセージと一緒にnotificationIdを返信し、Android Marketはどのメッセージをアプリが受信したかを知ることができる - orderId
トランザクションのためのユニークな注文ID。これはGoogleチェックアウトの注文IDと一致 - packageName
アプリのパッケージ名 - productId
商品ID。すべてのアイテムはAndroid Market開発者サイトのアプリ商品リストで指定された商品IDを持つ - purchaseTime
商品が購入された時間で、エポックタイム(1970年1月1日)からの経過ミリ秒 - purchaseState
注文の状態。0が購入済み、1がキャンセル、2が払い戻し - developerPayload
注文のための補助情報を含む開発者固有文字列。アプリは、このフィールドに特定の値を持たせ、REQUEST_PURCHASEリクエストを作成
アプリ内課金はマッシュアップによる開発だ
サンプルを通じてアプリ内課金の実装方法と、開発者自身のアプリへのアプリ内課金を実装する方法を見てきました。もし、マッシュアップによるアプリ開発を経験したことがあるなら、「アプリ内課金はマッシュアップによる開発だ」ということを理解していただけたのではないかと思います。
また、開発に必要なリファレンスもまとめたので、実際に開発を行う際に参照してください。
次回は、アプリ内課金の管理、テスト方法、セキュリティと設計に関して説明します。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 今日から始める! Androidケータイアプリ作成の基礎
日に日に国内でのニュースが増えているAndroidケータイ。その特徴を押さえてアプリ作成を始めるための基礎を紹介します - 女子部が斬る! Androidアプリ評価コメント
昨今問題となっているアプリストアのアプリ評価(レビュー)コメント。参考にならないコメントや点で的外れの評価、いわれのない中傷などなどに悩むアプリ開発者も多い。そんな状況を打破するための“評価コメント”を“評価”するコラム連載 - 開発者は覚えておきたいアプリストア/マーケット大全
iPhoneの大ヒットにより一般的になった、アプリの新しい流通形態の現状をお伝えする。今の“アプリ”には多種多様なサービスが必要だ - Androidアプリはビジネスになるのか
「iPhoneアプリの次はAndroid?!」NECビッグローブのAndroidアプリ販売サイト「andronavi」を通して、その可能性に迫る - 「韓ドロイド」に見る1年後のAndroidアプリビジネス
Androidアプリ市場はいつ、どんな形で離陸するのか。そのヒントを、韓国へのアプリ取次ビジネスを展開する「韓ドロイド」に見た - OPhoneだけじゃない! 中国のAndroidは三国志!?
2010年現在の中国の携帯電話事情や、各プラットフォームの現状、OPhone SDKでのアプリ作成やマーケットなどを紹介します