アプリ内課金バージョン3が出たようです。
非常に簡単になったらしいので、少しずつ訳していきたいと思います。
今回はAndroid Developer Blogの記事です。
※翻訳ミス・改善等ありましたら、お知らせください。
●Google Developers Blog
アプリ内課金はGooglePlay(当時はAndroidマーケット)で発表されて以来、長い道のりを歩んできました。
1年半後にGooglePlay上の収益トップのアプリの大半がアプリ内課金を使用し、
数千の開発者は、体験版、仮想グッズと同時に定期購読でアプリを収益化しています。
アプリ内課金は今日さらに拡大しており、さらに強力で柔軟に成功するアプリを構築し続けることができます。
バージョン3では次の新機能が導入されています。
・設計の改善:アプリの記述、デバッグ、メンテナンスが簡単になります。
以前は数百行のコードが必要でしたが、わずか50行で実装可能です。
・さらに堅牢なアーキテクチャによりトランザクションの失敗を少なくする。
・高速なAPIコール用のローカルキャッシング
・購入の消費の管理やサービス情報のクエリのを使用するような待望の機能
アプリ内課金のバージョン3はアプリ内アイテム、定期購読(2013年2月から)、無料期間のある定期購読を利用可能です。
GooglePlayの最新版を実行しているAndroid2.2以上の端末でサポートされています。(90%以上のアクティブな端末)
以前のリリースしていた非同期構成の4つの異なったアプリコンポーネントを必要とする代わりに、新しいバージョンのAPIは、開発者が同期的なリクエストとレスポンスへの応答を1つのActivityで行えることを可能にしています。
これらは全てわずか数行で達成されます。
実装のコスト削減は、新しく課金ソリューションを実装する開発者の絶好の機会です。
●より簡単になった実装
バックグラウンドサービスを介して非同期通知を行う以前のモデルと比較して、
新しい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) { // 購入フローの開始(GooglePlayのUIを表示します). // 結果はonActivityResult()を介して通知されます。. startIntentSenderForResult(pendingIntent, RC_BUY, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); }
そして、購入結果をActivity#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); // 購入情報をここで処理します。 // (プレミアムアップグレードのような恒久的なアイテム[アップグレードによる効果の適用を意味する] // Xゴールドのコインのように消耗品アイテムのために // 一般的にアプリはここで購入の消費を開始します。) } }
また、前バージョンからの違いは、全ての購入はGooglePlayで管理されます。
これは、購入したアイテムの所有をいつでも照会できることを意味します。
管理対象外のアイテムと同じ仕組みを実装するために、アプリケーションは購入の後直ちにアイテムを消費し、消費の成功と同時にアイテムのメリットを提供することができます。
●ローカルキャッシング
APIは、アプリが端末内のアプリ内課金情報を簡単に利用できるようにキャッシュするGooglePlayストアアプリの新機能を利用しています。
この機能を利用すると多くのAPIの呼び出しは、GooglePlayへ通信して接続する代わりにキャッシュのルックアップを通じてサービスを受けます。
これは大幅にAPIの応答速度を向上します。
例えば、アプリがこの呼び出しを利用して所有する項目を照会できます。
Bundle bundle = mService.getPurchases(3, mContext.getPackageName(), ITEM_TYPE_INAPP); if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) { ArrayList mySkus, myPurchases, mySignatures; mySkus = bundle.getStringArrayList(RESPONSE_INAPP_ITEM_LIST); myPurchases = bundle.getStringArrayList(RESPONSE_INAPP_PURCHASE_DATA_LIST); mySignatures = bundle.getStringArrayList(RESPONSE_INAPP_PURCHASE_SIGNATURE_LIST); // アイテムの処理をここでおこなう }
以前のバージョンでは、所有アイテムの紹介は負荷の高いサーバコールだったため、開発者は頻繁に行う事で落胆しました。
しかし、新しいバージョンのローカルキャッシュの実装はアプリは起動開始時にクエリを毎回実行でき、その後は必要に応じてクエリを実行できます。
●サービス情報
待望のAPIの機能が導入されています。
GooglePlayから直接商品情報を照会できます。
開発者はアイテムのタイトルや説明・価格をプログラム上で取得できます。
通貨変換や書式設定は必要ありません。
価格はロケールに応じてユーザの通貨で表示されフォーマットされます。
Bundle bundle = mService.getSkuDetails(3, "com.example.myapp", ITEM_TYPE_INAPP, skus); // skus is a Bundle with the list of SKUs to query if (bundle.getInt(RESPONSE_CODE) == BILLING_RESPONSE_RESULT_OK) { List detailsList = bundle.getStringArrayList(RESPONSE_SKU_DETAILS_LIST); for (String details : detailsList) { // 詳細はSKU詳細のJSON内にあります。(説明、価格) // SKU:最小管理単位 } }
これは、例えば開発者がデベロッパーコンソールで価格を更新して、ユーザに表示するアプリのコードを変更する必要なしに、このAPIを呼び出して更新された価格を表示(特別プロモーションやセールなど)できます。
●サンプルアプリケーション
APIに加えて、アプリ内課金を実装例のサンプルアプリをリリースしています。
また、JSON文字列やBundleから変換/復元されたデータ構造、署名の検証、バックグラウンド処理を自動的に管理できるユーティリティ(開発者がアプリケーションのUIスレッドからAPIを直接呼び出すことができるようにするため)の一般的に書かれる定型的なコードを実装するヘルパークラスも含んでいます。
Googleは実装のプロセスを簡素化するために、アプリ内課金に慣れていない方はサンプルコードを活用する事を非常に推奨します。
サンプルアプリケーションはAndroid SDK Managerを介してダウンロードする事が出来ます。
●アプリの固有キー
アプリ内課金バージョン3で導入された他の変更に加えて、ライセンスとアプリ内課金のキーの管理方法さらに改善しました。
キーは現在「デベロッパーごと」の代わりに「アプリごと」に設定されています。
これはGoogle Play デベロッパーコンソールプレビュー上にある、各アプリの"Services & APIs"ページで利用可能です。
既存のアプリは現在のキーで動作し続けます。
●始めましょう
新しいAPIを使用してアプリ内課金を実装するために、アプリ内課金の更新されたドキュメントから始まり、アプリ内サービスの販売のトレーニングクラスに行きましょう。
アプリ内課金バージョン3を使用するためにGooglePlayデベロッパーコンソールプレビューを使用する必要があります。
0 件のコメント:
コメントを投稿