課金アイテムの購入ダイアログの結果
アプリ内アイテムを購入するときに下のようなダイアログが表示されます。
このダイアログでアイテムが購入されたりキャンセルされたりしてダイアログが終了するとGooglePlayから"RESPONCE_CODE"という名前(キー)の応答コードを受け取ることができます。
ただこの応答コードは定数として定義されていないみたいなので次のように自分で定義します。
/**購入成功*/ public static final int BILLING_RESPONSE_RESULT_OK = 0; /**ダイアログがキャンセルされた*/ public static final int BILLING_RESPONSE_RESULT_USER_CANCELED = 1; /**In-App BillingのAPIが端末でサポートされていない*/ public static final int BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE = 3; /**アプリ内アイテムが存在しない*/ public static final int BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE = 4; /**ダイアログに不正な値が渡された*/ public static final int BILLING_RESPONSE_RESULT_DEVELOPER_ERROR = 5; /**表示中にエラーが発生*/ public static final int BILLING_RESPONSE_RESULT_ERROR = 6; /**既にアイテムを購入済み*/ public static final int BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED = 7; /**アイテムを購入していないので消費できない*/ public static final int BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED = 8;
これらのコードがあり、それぞれの意味はコード中のコメントにある通りです、
このコードはonActivityResultに渡されたIntentから"RESPONCE_CODE"をキーにしてint型で受け取ることができます。
具体的には次のコードです。
@Override public void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == 12345){ int billingResponseCode = data.getIntExtra("RESPONSE_CODE", -1); switch(billingResponseCode){ case BILLING_RESPONSE_RESULT_OK: Toast.makeText(this, "アイテムを購入", Toast.LENGTH_LONG).show(); break; case BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED: Toast.makeText(this, "アイテムは購入済み", Toast.LENGTH_LONG).show(); break; case BILLING_RESPONSE_RESULT_USER_CANCELED: Toast.makeText(this, "購入ダイアログがキャンセル", Toast.LENGTH_LONG).show(); break; case BILLING_RESPONSE_RESULT_ERROR: case BILLING_RESPONSE_RESULT_DEVELOPER_ERROR: case BILLING_RESPONSE_RESULT_ITEM_UNAVAILABLE: case BILLING_RESPONSE_RESULT_ITEM_NOT_OWNED: case BILLING_RESPONSE_RESULT_BILLING_UNAVAILABLE: Toast.makeText(this, "アイテム購入失敗", Toast.LENGTH_LONG).show(); break; } } }
このように購入結果から処理を振り分けるのに使えます。
© Kaz