2011年5月9日月曜日

アプリ内課金のメッセージ処理

■ アプリ内課金のリクエスト

 すべてのアプリ内課金リクエストは、Android Marketアプリへのメソッド呼び出しによるプロセス間通信という形で送信されます。このAndroid Marketアプリへのメソッド呼び出しは、「Android Interface Definition LanguageAIDL)」ファイルによって定義されます。

 インターフェイスはキーと値を指定したバンドルを引数に取ります。以下は5つのキーとその説明です。

  • 1CHECK_BILLING_SUPPORTED

 このリクエストはAndroid Marketアプリがアプリ内課金をサポートするかどうかを検証します。大抵、このリクエストはアプリ開始時に送信されます。

 Android Marketアプリがアプリ内課金に対応していない場合で、もしアプリがアプリ内課金関連だけのユーザーインターフェイスと機能を無効にしたい場合、このリクエストは役に立ちます。

  • 2REQUEST_PURCHASE

 このリクエストはアプリ内課金で最も重要な、購入情報をAndroid Marketアプリに送信します。

 ユーザーがアプリ内で商品を購入した場合に、アプリはこのリクエストを送信します。Android Marketはその際、チェックアウトのユーザーインターフェイスを表示することで金融取り引きを処理します。

  • 3GET_PURCHASE_INFORMATION

 このリクエストは購入状態変更の詳細を受信します。購入リクエストが完了した場合、またはユーザーがチェックアウト時に購入をキャンセルした場合に、購入状態は変更されます。以前に購入された商品が払い戻しされることもあり得ます。

 Android Marketはアプリに購入状態の変更を通知し、アプリはそのトランザクション情報を受信するために、このリクエストを送信します。

  • 4CONFIRM_NOTIFICATIONS

 このリクエストは、アプリが購入状態変更の詳細を受信したことを通知します。Android Marketはこのリクエストを受信するまで、アプリに対し購入状態変更通知を送り続けます。

  • 5RESTORE_TRANSACTIONS

 このリクエストは「アカウント単位で管理」された購入のためのユーザーのトランザクション情報を受信します。アプリはユーザーのトランザクション状況を受信する必要があるときだけ、このリクエストを送るべきで、それは大抵アプリがインストールまたは再インストールされたときだけです。

■ アプリ内課金のレスポンス

 Android Marketアプリはアプリ内課金リクエストに同期と非同期の両方でレスポンスを返します。同期レスポンスは以下の3つのキーを持つバンドルです。

  • 1RESPONSE_CODE

 このキーはリクエストに対するステータス情報とエラー情報を提供します。

  • 2PURCHASE_INTENT

 このキーはアプリがチェックアウトアクティビティを起動するために使用するPendingIntentを提供します。

  • 3REQUEST_ID

 このキーは、アプリがリクエストに対する非同期レスポンスを特定可能にするリクエストIDを提供します。

 これらのキーは必ずしもすべてのリクエストに対して返されるものではありません。詳細については後述する「購入リクエストのメッセージシーケンス」を参照してください。また次回記事の「表4 アプリ内課金リクエストタイプで戻されるバンドルキーの詳細」も参照してください。

 非同期レスポンスは以下を含むブロードキャストインテントの形式で送信されます。

  • com.android.vending.billing.RESPONSE_CODE

 このレスポンスはAndroid Marketサーバのレスポンスコードを含み、アプリがアプリ内課金リクエストを作成した後に送られます。サーバレスポンスコードは課金リクエストがAndroid Marketに送信成功したこと、または課金リクエスト中にいくつかのエラーが発生したことを表します。

 このレスポンスは(払い戻しや購入情報などの)購入状態変更通知には利用されません。このレスポンス時に送信されるレスポンスコードの詳細については、「Android Marketサーバレスポンスコード」を参照してください。

  • com.android.vending.billing.IN_APP_NOTIFY

 このレスポンスは購入状態が変更されたこと(購入成功、キャンセル、払い戻し)を表します。このレスポンスは1つ以上の通知IDを含みます。それぞれの通知IDはサーバ側の特定のメッセージと一致し、それぞれのメッセージは1つ以上のトランザクション情報を含みます。

 アプリがIN_APP_NOTIFYブロードキャストインテントを受信した後、アプリは詳細情報を取得するために通知IDと一緒にGET_PURCHASE_INFORMATIONリクエストを送信します。

  • com.android.vending.billing.PURCHASE_STATE_CHANGED

 このレスポンスは1つ以上のトランザクション情報の詳細を含みます。トランザクション情報はJSON文字列に含まれます。JSON文字列は署名され、シグネチャは(暗号化されていない)JSON文字列と一緒にアプリに送信されます。アプリ内課金のセキュリティを堅牢にする補助として、アプリはJSON文字列のシグネチャを検証できます。

 PURCHASE_STATE_CHANGEインテントで返されるJSON文字列は1つ以上の課金トランザクションの詳細をアプリに提供します。以下はJSON文字列のサンプルです。

{ "nonce" : 1836535032137741465,
  "orders" :
    { "notificationId" : "android.test.purchased",
      "orderId" : "transactionId.android.test.purchased",
      "packageName" : "com.example.dungeons",
      "productId" : "android.test.purchased",
      "developerPayload" : "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ",
      "purchaseTime" : 1290114783411,
      "purchaseState" : 0 }
}

 

0 件のコメント:

コメントを投稿