2012年12月11日

【Android】In-App Billing API v3


In-App Billing(アプリ内課金)のAPIが更新されました。
Android Developersで紹介されています。

In-App Billing Version 3 | Android Developers Blog

新規機能や変更点をご紹介。


In-App Billing API Version 3


In-App Billingは2012年12月10日に機能の拡張をいたしました。パワフルで自由度の高いAPIへ変更し、ディベロッパーはさらにアプリでの成功を収められるでしょう。In-App Billing API version 3での変更点は、
  • コードのデザインを変更し、書きやすく、デバッグしやすく、メンテナンスしやすくなりました。以前まではIn-App Billingを組み込むのに100行以上も書く必要がありましたが、約50行まで抑える事に成功しました。
  • より健全なアーキテクチャに変更し、トランザクションの失敗が少なくなりました。
  • ローカルキャッシュを組み込み、APIコールが早くなりました。
  • 購入情報の管理や、商品情報の参照など、待ち望まれていた機能の追加をしました。

In-App Billing version 3はアプリ内課金を使うすべてのアプリで使えるようになりますが、月額課金はまだ対応していませんので、もう少しお待ちください。In-App Billing API v3はAndroid2.2以降の最新のGoogle Play storeが入っている端末で対応しております。

以前のバージョンでは4つの非同期処理を使っていましたが、最新バージョンでは、リクエストを1つのActivity内で同期処理のように扱う事が出来るようになりました。また、すべての処理は数行のコードで出来るようになり、組み込みに掛かる手間を減らす事が出来ました。これにより、In-App Billingを使うすべてのユーザに素晴らしい機会を提供出来るようになりました。

簡単な組み込み方法


以前までのバッググラウンドサービスで処理する非同期モデルに比べ、新しいAPIは同期処理で、早くアプリへ結果を返すようになりました。アプリへ組み込む複雑な手順を取り除き、素晴らしく簡素に書けるようになりました。

アイテムを購入するには、APIから購入インテントを入手するところから始まります。
Bundle bundle = mService.getBuyIntent(3, "com.example.myapp",
    MY_SKU, ITEM_TYPE_INAPP, developerPayload);

PendingIntent pendingIntent = bundle.getParcelable(RESPONSE_BUY_INTENT);
if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) {
    // Start purchase flow (this brings up the Google Play UI).
    // Result will be delivered through onActivityResult().
    startIntentSenderForResult(pendingIntent, RC_BUY, new Intent(),
        Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0));
}

その後、購入結果がonActivityResult()に返ってきます。

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == RC_BUY) {
        int responseCode = data.getIntExtra(RESPONSE_CODE);
        String purchaseData = data.getStringExtra(RESPONSE_INAPP_PURCHASE_DATA);
        String signature = data.getStringExtra(RESPONSE_INAPP_SIGNATURE);

        // handle purchase here (for a permanent item like a premium upgrade,
        // this means dispensing the benefits of the upgrade; for a consumable
        // item like "X gold coins", typically the application would initiate
        // consumption of the purchase here)
    }
}

また、以前と違い、すべての購入情報はGoogle Playで管理されています。なので、アイテムの所有権の確認はいつでも出来るようになりました。

以下、ローカルキャッシュ、商品情報、アプリサンプル等と続きますが、
続きは元サイトでご確認ください。

In-App Billing Version 3 | Android Developers Blog

2 件のコメント:

  1. startIntentSenderForResult後の、onActivityResultが呼ばれません
    他のサイトを見ても同じように説明していますが
    呼ばれない原因は何かありますでしょうか?
    実際の購入はできております。

    返信削除
    返信
    1. startIntentSenderForResultはFragmentで呼んでますか?Activityで呼んでますか?
      http://stackoverflow.com/questions/14131171/calling-startintentsenderforresult-from-fragment-android-billing-v3

      削除