SlideShare a Scribd company logo
1 of 34
Developers
Summit




             Androidのアプリ内課金
       In-app Billing of Android




15-C-1                                瀬戸          健二
                                      パナソニックAVCマルチメディアソフ
                                                     ト(株)

                Developers Summit 2013 Action !
Developers
Summit




                自己紹介




             Developers Summit 2013 Action !
Developers
 Summit
                           自己紹介


• 瀬戸 健二(28)
   – パナソニックAVCマルチメディアソフト(株)
   – 航空機エンターテイメントシステム開発、
     モバイルアプリ開発
   – Android、Linux、マイコンなどが得意
   – 元TechBoosterメンバー
   – Twitter
        • @rongon_xp


                       Developers Summit 2013 Action !
Developers
Summit




             Androidのアプリ内課金




                Developers Summit 2013 Action !
Developers
Summit
             本日のテーマ

• アプリ内課金プログラミング完全ガイド
  では
  In-app Billing(IAB) v2について解説
• 発売直後にIABv3が発表・・・。
• 今日はIABv3について
  お話させて頂きます


             Developers Summit 2013 Action !
Developers
Summit
             IABv3特徴

• 実装がとても簡単に。
  – v2では100行以上、v3では50行程度に。
• 非同期処理の排除とローカルキャッシン
  グ
  – 高速なAPI実行が可能に。
  – セキュリティ向上
• 購入情報の管理
• アイテム情報の参照
             Developers Summit 2013 Action !
Developers
Summit
     Androidアプリ内課金 - 概要

• Playストアサーバ上に存在する購入情報を更新す
  る
• アプリからはPlayストアアプリを介してPlayスト
  アサーバにアクセスする
                                               購入情報




             Developers Summit 2013 Action !
Developers
Summit
             IABv2の購入シーケンス




                Developers Summit 2013 Action !
Developers
Summit
             IABv2のアプリ構成

• 課金リクエストを送信するためのサービス
• 非同期メッセージを受け取るためのブロードキャストレ
  シーバ
• アプリケーションに通知するためのレスポンスハンドラ
  と
  オブザーバ




               Developers Summit 2013 Action !
Developers
Summit
             IABv3の購入シーケンス

                        getBuyIntent()


                           Bundle
                 (RESPONSE_CODE, BUY_INTENT)

                                                               Play
 Your
                                                              Store
 App             startIntentSenderForResult()                  App
                                                                      IAB API

                           Bundle
             (RESPONSE_CODE, INAPP_PURCHASE_DATA,                     同期レスポンス
                       INAPP_SIGNATURE)




                            Developers Summit 2013 Action !
Developers
Summit
             IABv3のアプリ構成

• 同期処理になったため、アプリ構成がシ
  ンプルになった
                                                      Playストアアプリ

             アプリ本体

                                                       InAppBilling
                                        bind             Service
             セキュリ
              ティ


                    Developers Summit 2013 Action !
Developers
Summit




             アイテムの購入




             Developers Summit 2013 Action !
Developers
  Summit
                 アイテムの購入(1)

• IInAppBillingService.getBuyIntent()で購入画面を起
  動
// 購入画面を起動するためのインテントを取得
Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(),
  sku, "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ");

PendingIntent pendingIntent =
buyIntentBundle.getParcelable("BUY_INTENT");

// インテントを使って購入画面を起動する
startIntentSenderForResult(pendingIntent.getIntentSender(),
  1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0),
  Integer.valueOf(0));
                           Developers Summit 2013 Action !
Developers
 Summit
                     アイテムの購入(2)

• 購入結果はonActivityResult()に返される
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 if (requestCode == mRequestCode) {
    int responseCode = data.getIntExtra("RESPONSE_CODE", 0);
    String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA");
    String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE");

        if (resultCode == RESULT_OK) {
          // 購入処理
        }
    }
}

                                Developers Summit 2013 Action !
Developers
Summit




             アイテムの消費




             Developers Summit 2013 Action !
Developers
Summit
             アイテムの消費(1)

• IABv3ではすべての購入情報がPlayストア
  サーバで管理

• 消費しないと再購入できない
  – 消費型 : 購入が完了したら消費処理を実施
  – 非消費型 : 購入が完了しても消費処理をしな
    い



               Developers Summit 2013 Action !
Developers
  Summit
               アイテムの消費(2)

• 消費型アイテムの場合はconsumePurchaseを実行
  することで再購入できるようにする
• INAPP_PURCHASE_DATAに含まれている
  purchaseTokenを指定する


int response =
  mService.consumePurchase(3, getPackageName(),
purchaseToken);


                     Developers Summit 2013 Action !
Developers
Summit




             トラブルシューティング




               Developers Summit 2013 Action !
Developers
Summit
             うまく動かないとき(1)

• テストアカウントを設定していない
  – Androidデバイスのプライマリアカウントに設
    定
• 公開鍵をアプリに設定していない
  – Developer Consoleで取得可能
• Playストアにアプリ/課金アイテムを登録
  した直後
  – 反映されるのに数時間〜数日かかることがあ
    る
                Developers Summit 2013 Action !
Developers
Summit
             うまく動かないとき(2)

• アプリの署名が不正
  – Playストアに登録している署名と一致してい
    る必要がある
• アプリの公開設定
  – 公開設定にすると動作する場合も・・・。




                Developers Summit 2013 Action !
Developers
Summit
     どちらを使えばいいのか?

• v3は定期購読未サポート
  – アプリ内課金アイテムのみであればv3でok


• 簡単に実装したいのであればv3




             Developers Summit 2013 Action !
Developers
Summit




• ご清聴ありがとうございました




             Developers Summit 2013 Action !
Developers
Summit




                参考資料




             Developers Summit 2013 Action !
Developers
Summit
             アイテムの販売形式

• 消耗型
  – ゲーム上のお金、ポーションなど使用すると消耗してしまうも
    の


• 非消耗型
  – アプリ上の機能制限のアンロックなど、購入することで永続的
    に効果が持続されるもの


• 購読型
  – 定期的な課金によって効果が持続されるもの


               Developers Summit 2013 Action !
Developers
Summit
             IABv3 Sample App




                Developers Summit 2013 Action !
Developers
 Summit
                IABv3 Sample App

• サンプルアプリケーションをダウンロード
   – Extras -> Google Play Billing Library
• Eclipseにインポート
• サンプルアプリを修正
   – パッケージ名を変更
   – 公開鍵を設定
• アプリをPlayストアにアップロード
• アップロードしたapkをadb install

                       Developers Summit 2013 Action !
Developers
 Summit
              INAPP_PURCHASE_DATA

• Playストアより得られる購入情報
02-11 10:27:39.908: D/IabHelper(7688): Extras:Bundle[{INAPP_PURCHASE_DATA={
"orderId":"12999763169054705758.1368594429841055",
"packageName":"org.dyndns.ideon.trivialdrivesample",
"productId":"gas",
"purchaseTime":1360578449000,"purchaseState":0,
"purchaseToken":"w…,
RESPONSE_CODE=0}]




                          Developers Summit 2013 Action !
Developers
Summit
             購入シーケンス(IABv2)




                Developers Summit 2013 Action !
Developers
Summit
             購入シーケンス(IABv3)




                                                  購入情報
                    購入情報




                     IABv3では不要


                Developers Summit 2013 Action !
Developers
Summit
             アイテム情報の参照(1)

• 購入可能なアイテム情報を取得可能
  – セール価格など簡単に実現


                            getSkuDetails()

                                  Bundle                 Play
             Your
                    (RESPONSE_CODE, DETAILS_LIST)       Store
             App
                                                         App




                      Developers Summit 2013 Action !
Developers
Summit
             アイテム情報の参照(2)

• getSkuDetails()でアイテム情報を参照
// サービスIDのリストを作成
ArrayList skuList = new ArrayList();
skuList.add("premiumUpgrade");
skuList.add("gas");
Bundle querySkus = new Bundle();
querySkus.putStringArrayList(“ITEM_ID_LIST”, skuList);

// アイテム情報を取得
Bundle skuDetails = mService.getSkuDetails(3, getPackageName(), “inapp”,
querySkus);



                            Developers Summit 2013 Action !
Developers
    Summit
                 アイテム情報の参照(3)

• アイテムの価格を取得する
int response = skuDetails.getInt("RESPONSE_CODE");
if (response == 0) {
   ArrayList responseList
     = skuDetails.getStringArrayList("DETAILS_LIST");

    for (String thisResponse : responseList) {
      JSONObject object = new JSONObject(thisResponse);
      String sku = object.getString("productId");
      String price = object.getString("price");
      if (sku.equals(“premiumUpgrade”)) mPremiumUpgradePrice = price;
      else if (sku.equals(“gas”)) mGasPrice = price;
    }
}
                             Developers Summit 2013 Action !
Developers
Summit
             アイテムの消費(1)

• 消費しないと再購入できない
  – 消費型 : 購入が完了したら消費処理を実施
  – 非消費型 : 購入が完了しても消費処理をしな
    い         getPurchase()

                                   Bundle
                    (INAPP_PURCHASE_ITEM_LIST, etc)
                                                          Play
             Your
                         consumePurchase()               Store
             App
                                                          App
                         SUCCESS/FAILURE


                       Developers Summit 2013 Action !
Developers
 Summit
  Playストアからの非同期レスポンス(IABv2)


• com.android.vending.billing.RESPONSE_CODE
   – レスポンス
• com.android.vending.billing.IN_APP_NOTIFY
   – Playストアサーバ上にある購入情報が更新されたことを示す
• com.android.vending.billing.PURCHASE_STATE_CHANGED
   – 1つ以上のトランザクション情報




                    Developers Summit 2013 Action !

More Related Content

Similar to Androidのアプリ内課金

Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
Tomohiro Kondo
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
Tomohiro Kondo
 
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップiPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
VOYAGE GROUP
 
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップiPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
Kenji Tomita
 
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Yoshihito Kuranuki
 

Similar to Androidのアプリ内課金 (20)

Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
 
Android sdk manual_1.02
Android sdk manual_1.02Android sdk manual_1.02
Android sdk manual_1.02
 
Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~
Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~
Devsumi2013 15-C-1 実践!スマホアプリのマネタイズ!! ~マーケット把握術と iPhone&Androidプログラミングテクニック~
 
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
[Cloud OnAir] アプリケーションにフォーカス!ビジネスに直結する開発の極意をご紹介します。(e-Learning) 2018年3月15日 放送
 
Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編Ignite UI 2012 最新情報 jQuery Mobile 編
Ignite UI 2012 最新情報 jQuery Mobile 編
 
[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-Device[DevSummit2013S]Android_Multi-Version_Multi-Device
[DevSummit2013S]Android_Multi-Version_Multi-Device
 
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナーサーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
サーバ構築不要!HTML5で始めるAndroid&iOSアプリ開発セミナー
 
はじめての UWP アプリ開発
はじめての UWP アプリ開発はじめての UWP アプリ開発
はじめての UWP アプリ開発
 
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップiPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
 
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップiPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
iPhoneアプリ「トリセツ」にて実践したリーンスタートアップ
 
デブサミ2013【15-D-4】Opsから挑むDevOps
デブサミ2013【15-D-4】Opsから挑むDevOpsデブサミ2013【15-D-4】Opsから挑むDevOps
デブサミ2013【15-D-4】Opsから挑むDevOps
 
デブサミ2013【14-E-2】パフォーマンス・チューニングに革命をもたらす最新テクノロジー - トランザクショントレース
デブサミ2013【14-E-2】パフォーマンス・チューニングに革命をもたらす最新テクノロジー - トランザクショントレースデブサミ2013【14-E-2】パフォーマンス・チューニングに革命をもたらす最新テクノロジー - トランザクショントレース
デブサミ2013【14-E-2】パフォーマンス・チューニングに革命をもたらす最新テクノロジー - トランザクショントレース
 
Firebase analytics for_android _ i_os
Firebase analytics for_android _ i_osFirebase analytics for_android _ i_os
Firebase analytics for_android _ i_os
 
Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編Ignite ui 2012 最新情報 jQuery UI 編
Ignite ui 2012 最新情報 jQuery UI 編
 
市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について市場動向並びに弊社製品の今後の展望について
市場動向並びに弊社製品の今後の展望について
 
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image) AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
AZAREA-Cluster (Hadoop Conference Japan 2013 Winter Demo Image)
 
2015年をRTBのアプリ広告元年とするために
2015年をRTBのアプリ広告元年とするために2015年をRTBのアプリ広告元年とするために
2015年をRTBのアプリ広告元年とするために
 
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12QJasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
Jasst12九州 倉貫資料:アジャイル・Ruby・クラウド(ARC)を活用したビジネスにおけるテストの実践 #jasst12Q
 
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
Scalable Generator: Using Scala in SIer Business (ScalaMatsuri)
 
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...Elastic on Azure Integration & Building React UI Based Search App Using Azure...
Elastic on Azure Integration & Building React UI Based Search App Using Azure...
 

Androidのアプリ内課金

  • 1. Developers Summit Androidのアプリ内課金 In-app Billing of Android 15-C-1 瀬戸 健二 パナソニックAVCマルチメディアソフ ト(株) Developers Summit 2013 Action !
  • 2. Developers Summit 自己紹介 Developers Summit 2013 Action !
  • 3. Developers Summit 自己紹介 • 瀬戸 健二(28) – パナソニックAVCマルチメディアソフト(株) – 航空機エンターテイメントシステム開発、 モバイルアプリ開発 – Android、Linux、マイコンなどが得意 – 元TechBoosterメンバー – Twitter • @rongon_xp Developers Summit 2013 Action !
  • 4. Developers Summit Androidのアプリ内課金 Developers Summit 2013 Action !
  • 5. Developers Summit 本日のテーマ • アプリ内課金プログラミング完全ガイド では In-app Billing(IAB) v2について解説 • 発売直後にIABv3が発表・・・。 • 今日はIABv3について お話させて頂きます Developers Summit 2013 Action !
  • 6. Developers Summit IABv3特徴 • 実装がとても簡単に。 – v2では100行以上、v3では50行程度に。 • 非同期処理の排除とローカルキャッシン グ – 高速なAPI実行が可能に。 – セキュリティ向上 • 購入情報の管理 • アイテム情報の参照 Developers Summit 2013 Action !
  • 7. Developers Summit Androidアプリ内課金 - 概要 • Playストアサーバ上に存在する購入情報を更新す る • アプリからはPlayストアアプリを介してPlayスト アサーバにアクセスする 購入情報 Developers Summit 2013 Action !
  • 8. Developers Summit IABv2の購入シーケンス Developers Summit 2013 Action !
  • 9. Developers Summit IABv2のアプリ構成 • 課金リクエストを送信するためのサービス • 非同期メッセージを受け取るためのブロードキャストレ シーバ • アプリケーションに通知するためのレスポンスハンドラ と オブザーバ Developers Summit 2013 Action !
  • 10. Developers Summit IABv3の購入シーケンス getBuyIntent() Bundle (RESPONSE_CODE, BUY_INTENT) Play Your Store App startIntentSenderForResult() App IAB API Bundle (RESPONSE_CODE, INAPP_PURCHASE_DATA, 同期レスポンス INAPP_SIGNATURE) Developers Summit 2013 Action !
  • 11. Developers Summit IABv3のアプリ構成 • 同期処理になったため、アプリ構成がシ ンプルになった Playストアアプリ アプリ本体 InAppBilling bind Service セキュリ ティ Developers Summit 2013 Action !
  • 12. Developers Summit アイテムの購入 Developers Summit 2013 Action !
  • 13. Developers Summit アイテムの購入(1) • IInAppBillingService.getBuyIntent()で購入画面を起 動 // 購入画面を起動するためのインテントを取得 Bundle buyIntentBundle = mService.getBuyIntent(3, getPackageName(), sku, "inapp", "bGoa+V7g/yqDXvKRqq+JTFn4uQZbPiQJo4pf9RzJ"); PendingIntent pendingIntent = buyIntentBundle.getParcelable("BUY_INTENT"); // インテントを使って購入画面を起動する startIntentSenderForResult(pendingIntent.getIntentSender(), 1001, new Intent(), Integer.valueOf(0), Integer.valueOf(0), Integer.valueOf(0)); Developers Summit 2013 Action !
  • 14. Developers Summit アイテムの購入(2) • 購入結果はonActivityResult()に返される @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == mRequestCode) { int responseCode = data.getIntExtra("RESPONSE_CODE", 0); String purchaseData = data.getStringExtra("INAPP_PURCHASE_DATA"); String dataSignature = data.getStringExtra("INAPP_DATA_SIGNATURE"); if (resultCode == RESULT_OK) { // 購入処理 } } } Developers Summit 2013 Action !
  • 15. Developers Summit アイテムの消費 Developers Summit 2013 Action !
  • 16. Developers Summit アイテムの消費(1) • IABv3ではすべての購入情報がPlayストア サーバで管理 • 消費しないと再購入できない – 消費型 : 購入が完了したら消費処理を実施 – 非消費型 : 購入が完了しても消費処理をしな い Developers Summit 2013 Action !
  • 17. Developers Summit アイテムの消費(2) • 消費型アイテムの場合はconsumePurchaseを実行 することで再購入できるようにする • INAPP_PURCHASE_DATAに含まれている purchaseTokenを指定する int response = mService.consumePurchase(3, getPackageName(), purchaseToken); Developers Summit 2013 Action !
  • 18. Developers Summit トラブルシューティング Developers Summit 2013 Action !
  • 19. Developers Summit うまく動かないとき(1) • テストアカウントを設定していない – Androidデバイスのプライマリアカウントに設 定 • 公開鍵をアプリに設定していない – Developer Consoleで取得可能 • Playストアにアプリ/課金アイテムを登録 した直後 – 反映されるのに数時間〜数日かかることがあ る Developers Summit 2013 Action !
  • 20. Developers Summit うまく動かないとき(2) • アプリの署名が不正 – Playストアに登録している署名と一致してい る必要がある • アプリの公開設定 – 公開設定にすると動作する場合も・・・。 Developers Summit 2013 Action !
  • 21. Developers Summit どちらを使えばいいのか? • v3は定期購読未サポート – アプリ内課金アイテムのみであればv3でok • 簡単に実装したいのであればv3 Developers Summit 2013 Action !
  • 23. Developers Summit 参考資料 Developers Summit 2013 Action !
  • 24. Developers Summit アイテムの販売形式 • 消耗型 – ゲーム上のお金、ポーションなど使用すると消耗してしまうも の • 非消耗型 – アプリ上の機能制限のアンロックなど、購入することで永続的 に効果が持続されるもの • 購読型 – 定期的な課金によって効果が持続されるもの Developers Summit 2013 Action !
  • 25. Developers Summit IABv3 Sample App Developers Summit 2013 Action !
  • 26. Developers Summit IABv3 Sample App • サンプルアプリケーションをダウンロード – Extras -> Google Play Billing Library • Eclipseにインポート • サンプルアプリを修正 – パッケージ名を変更 – 公開鍵を設定 • アプリをPlayストアにアップロード • アップロードしたapkをadb install Developers Summit 2013 Action !
  • 27. Developers Summit INAPP_PURCHASE_DATA • Playストアより得られる購入情報 02-11 10:27:39.908: D/IabHelper(7688): Extras:Bundle[{INAPP_PURCHASE_DATA={ "orderId":"12999763169054705758.1368594429841055", "packageName":"org.dyndns.ideon.trivialdrivesample", "productId":"gas", "purchaseTime":1360578449000,"purchaseState":0, "purchaseToken":"w…, RESPONSE_CODE=0}] Developers Summit 2013 Action !
  • 28. Developers Summit 購入シーケンス(IABv2) Developers Summit 2013 Action !
  • 29. Developers Summit 購入シーケンス(IABv3) 購入情報 購入情報 IABv3では不要 Developers Summit 2013 Action !
  • 30. Developers Summit アイテム情報の参照(1) • 購入可能なアイテム情報を取得可能 – セール価格など簡単に実現 getSkuDetails() Bundle Play Your (RESPONSE_CODE, DETAILS_LIST) Store App App Developers Summit 2013 Action !
  • 31. Developers Summit アイテム情報の参照(2) • getSkuDetails()でアイテム情報を参照 // サービスIDのリストを作成 ArrayList skuList = new ArrayList(); skuList.add("premiumUpgrade"); skuList.add("gas"); Bundle querySkus = new Bundle(); querySkus.putStringArrayList(“ITEM_ID_LIST”, skuList); // アイテム情報を取得 Bundle skuDetails = mService.getSkuDetails(3, getPackageName(), “inapp”, querySkus); Developers Summit 2013 Action !
  • 32. Developers Summit アイテム情報の参照(3) • アイテムの価格を取得する int response = skuDetails.getInt("RESPONSE_CODE"); if (response == 0) { ArrayList responseList = skuDetails.getStringArrayList("DETAILS_LIST"); for (String thisResponse : responseList) { JSONObject object = new JSONObject(thisResponse); String sku = object.getString("productId"); String price = object.getString("price"); if (sku.equals(“premiumUpgrade”)) mPremiumUpgradePrice = price; else if (sku.equals(“gas”)) mGasPrice = price; } } Developers Summit 2013 Action !
  • 33. Developers Summit アイテムの消費(1) • 消費しないと再購入できない – 消費型 : 購入が完了したら消費処理を実施 – 非消費型 : 購入が完了しても消費処理をしな い getPurchase() Bundle (INAPP_PURCHASE_ITEM_LIST, etc) Play Your consumePurchase() Store App App SUCCESS/FAILURE Developers Summit 2013 Action !
  • 34. Developers Summit Playストアからの非同期レスポンス(IABv2) • com.android.vending.billing.RESPONSE_CODE – レスポンス • com.android.vending.billing.IN_APP_NOTIFY – Playストアサーバ上にある購入情報が更新されたことを示す • com.android.vending.billing.PURCHASE_STATE_CHANGED – 1つ以上のトランザクション情報 Developers Summit 2013 Action !