Androidのアプリ内課金

13,617 views

Published on

Androidのアプリ内課金(In-app Billing v3)について

0 Comments
17 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
13,617
On SlideShare
0
From Embeds
0
Number of Embeds
164
Actions
Shares
0
Downloads
48
Comments
0
Likes
17
Embeds 0
No embeds

No notes for slide

Androidのアプリ内課金

  1. 1. DevelopersSummit Androidのアプリ内課金 In-app Billing of Android15-C-1 瀬戸 健二 パナソニックAVCマルチメディアソフ ト(株) Developers Summit 2013 Action !
  2. 2. DevelopersSummit 自己紹介 Developers Summit 2013 Action !
  3. 3. Developers Summit 自己紹介• 瀬戸 健二(28) – パナソニックAVCマルチメディアソフト(株) – 航空機エンターテイメントシステム開発、 モバイルアプリ開発 – Android、Linux、マイコンなどが得意 – 元TechBoosterメンバー – Twitter • @rongon_xp Developers Summit 2013 Action !
  4. 4. DevelopersSummit Androidのアプリ内課金 Developers Summit 2013 Action !
  5. 5. DevelopersSummit 本日のテーマ• アプリ内課金プログラミング完全ガイド では In-app Billing(IAB) v2について解説• 発売直後にIABv3が発表・・・。• 今日はIABv3について お話させて頂きます Developers Summit 2013 Action !
  6. 6. DevelopersSummit IABv3特徴• 実装がとても簡単に。 – v2では100行以上、v3では50行程度に。• 非同期処理の排除とローカルキャッシン グ – 高速なAPI実行が可能に。 – セキュリティ向上• 購入情報の管理• アイテム情報の参照 Developers Summit 2013 Action !
  7. 7. DevelopersSummit Androidアプリ内課金 - 概要• Playストアサーバ上に存在する購入情報を更新す る• アプリからはPlayストアアプリを介してPlayスト アサーバにアクセスする 購入情報 Developers Summit 2013 Action !
  8. 8. DevelopersSummit IABv2の購入シーケンス Developers Summit 2013 Action !
  9. 9. DevelopersSummit IABv2のアプリ構成• 課金リクエストを送信するためのサービス• 非同期メッセージを受け取るためのブロードキャストレ シーバ• アプリケーションに通知するためのレスポンスハンドラ と オブザーバ Developers Summit 2013 Action !
  10. 10. DevelopersSummit 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. 11. DevelopersSummit IABv3のアプリ構成• 同期処理になったため、アプリ構成がシ ンプルになった Playストアアプリ アプリ本体 InAppBilling bind Service セキュリ ティ Developers Summit 2013 Action !
  12. 12. DevelopersSummit アイテムの購入 Developers Summit 2013 Action !
  13. 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. 14. Developers Summit アイテムの購入(2)• 購入結果はonActivityResult()に返される@Overrideprotected 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. 15. DevelopersSummit アイテムの消費 Developers Summit 2013 Action !
  16. 16. DevelopersSummit アイテムの消費(1)• IABv3ではすべての購入情報がPlayストア サーバで管理• 消費しないと再購入できない – 消費型 : 購入が完了したら消費処理を実施 – 非消費型 : 購入が完了しても消費処理をしな い Developers Summit 2013 Action !
  17. 17. Developers Summit アイテムの消費(2)• 消費型アイテムの場合はconsumePurchaseを実行 することで再購入できるようにする• INAPP_PURCHASE_DATAに含まれている purchaseTokenを指定するint response = mService.consumePurchase(3, getPackageName(),purchaseToken); Developers Summit 2013 Action !
  18. 18. DevelopersSummit トラブルシューティング Developers Summit 2013 Action !
  19. 19. DevelopersSummit うまく動かないとき(1)• テストアカウントを設定していない – Androidデバイスのプライマリアカウントに設 定• 公開鍵をアプリに設定していない – Developer Consoleで取得可能• Playストアにアプリ/課金アイテムを登録 した直後 – 反映されるのに数時間〜数日かかることがあ る Developers Summit 2013 Action !
  20. 20. DevelopersSummit うまく動かないとき(2)• アプリの署名が不正 – Playストアに登録している署名と一致してい る必要がある• アプリの公開設定 – 公開設定にすると動作する場合も・・・。 Developers Summit 2013 Action !
  21. 21. DevelopersSummit どちらを使えばいいのか?• v3は定期購読未サポート – アプリ内課金アイテムのみであればv3でok• 簡単に実装したいのであればv3 Developers Summit 2013 Action !
  22. 22. DevelopersSummit• ご清聴ありがとうございました Developers Summit 2013 Action !
  23. 23. DevelopersSummit 参考資料 Developers Summit 2013 Action !
  24. 24. DevelopersSummit アイテムの販売形式• 消耗型 – ゲーム上のお金、ポーションなど使用すると消耗してしまうも の• 非消耗型 – アプリ上の機能制限のアンロックなど、購入することで永続的 に効果が持続されるもの• 購読型 – 定期的な課金によって効果が持続されるもの Developers Summit 2013 Action !
  25. 25. DevelopersSummit IABv3 Sample App Developers Summit 2013 Action !
  26. 26. Developers Summit IABv3 Sample App• サンプルアプリケーションをダウンロード – Extras -> Google Play Billing Library• Eclipseにインポート• サンプルアプリを修正 – パッケージ名を変更 – 公開鍵を設定• アプリをPlayストアにアップロード• アップロードしたapkをadb install Developers Summit 2013 Action !
  27. 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. 28. DevelopersSummit 購入シーケンス(IABv2) Developers Summit 2013 Action !
  29. 29. DevelopersSummit 購入シーケンス(IABv3) 購入情報 購入情報 IABv3では不要 Developers Summit 2013 Action !
  30. 30. DevelopersSummit アイテム情報の参照(1)• 購入可能なアイテム情報を取得可能 – セール価格など簡単に実現 getSkuDetails() Bundle Play Your (RESPONSE_CODE, DETAILS_LIST) Store App App Developers Summit 2013 Action !
  31. 31. DevelopersSummit アイテム情報の参照(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. 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. 33. DevelopersSummit アイテムの消費(1)• 消費しないと再購入できない – 消費型 : 購入が完了したら消費処理を実施 – 非消費型 : 購入が完了しても消費処理をしな い getPurchase() Bundle (INAPP_PURCHASE_ITEM_LIST, etc) Play Your consumePurchase() Store App App SUCCESS/FAILURE Developers Summit 2013 Action !
  34. 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 !

×