SlideShare a Scribd company logo
1 of 14
Download to read offline
アプリ内購入

関連機能紹介

技術統括部 プラットフォームエキスパートG



山根哲也

トピックス

● Google

○ Google Play Billing Library 

○ Google Play Developer API 

● Apple

○ AppStore Server Notifications 

○ Test an Interrupted Purchase 



2
Google Play Billing Library

■Android 課金ライブラリ

 昔:AIDL / IAB Helper

 今:Google Play Billing Library



■2021年にはBilling Libraryのv3以降が必要

 新規アプリは2021/08/02〜

 既存アプリは2021/11/01〜



■Billing Libraryは今後毎年更新され、アプリ開発者も毎年アップデートが必要

 2022年にはv4以降、2023年にはv5以降…

3
※Android Developers Blog

 https://android-developers.googleblog.com/2020/06/meet-google-play-billing-library.html

Google Play Billing Library - Acknowledge

■ Billing Library v2で生まれた新しい概念 Acknowledge (承認)

  3 日以内に購入を承認しない場合、ユーザーは自動的に払い戻しを受け、Google Play は購入を取り消します。



4
※Billing Library Overview

 https://developer.android.com/google/play/billing/billing_library_overview

Google Play Billing Library - Acknowledge

■ 例えば…







5
ユーザー課金

課金処理

(アイテム付与)

Acknowledge

/ Consume

3日間このままだと
自動的に払い戻し
アプリクラッシュ?
通信障害?
Google Play Billing Library - Acknowledge

6
ユーザー課金

課金処理

(アイテム付与)

Acknowledge
済みなら
Acknowledge

アプリサーバ

3日間このままだと
自動的に払い戻し
Google Play Developer API

■大別すると2種類のAPI

 ・Subscriptions and In-App Purchases API 

 ・Publishing API 



■できること

 ・ユーザーのアプリ内商品購入のステータス取得・操作(返金・キャンセル・Acknowledgeなど)

 ・ユーザーによる返金のリスト取得

 ・アプリバイナリのアップロード・公開

 ・ユーザのレビュー取得・返信

 



7
※Google Play Developer API

 https://developers.google.com/android-publisher

Google Play Developer API - サブスクリプション

■サブスクリプション型のアプリ内購入にはサーバーAPIがほぼ必須?

 ・サブスクリプションはアプリの外(Google Play)で解約できる

 ・アプリ起動していない購読中のユーザが、現在も購読中か?など、状況を知りたいケースが多い



■Real-time Developer Notifications(RTDN)

 ・購読状況の変化をリアルタイムに監視するためには通知型の機能も合わせて利用





8
※RESTリソース:purchases.subscriptions

 https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.subscriptions

※リアルタイム デベロッパー通知のリファレンス ガイド

 https://developer.android.com/google/play/billing/rtdn-reference

Google Play Developer API - リクエスト上限に注意

■Google Play Developer APIのリクエストは200,000req/日まで

 ・その開発者アカウントの全アプリの合計なので、提供しているアプリが多い開発者ほど注意が必要



■Google Play Developer APIを採用する際は…

 ・自分たちの提供しているアプリ1つ1つが、どのくらいAPIを使うのか/使っているのかを管理

 ・200,000req/日では足りない場合、上限引き上げを申請



9
※Google Play Developer API - Quotas

 https://developers.google.com/android-publisher/quotas

App Store Server Notifications

■設定したサーバーに以下2種類の通知が届く機能

 ・サブスクリプションの購読状況の変化を通知(更新やキャンセルなど)

 ・ユーザーによる返金情報の通知



■サブスクリプション関連機能としてはGoogleのRTDNに相当する

 ・使わなくてもサブスクリプションは実現できるが、

  購読状況の変化管理のリアルタイム性を上げるために有用







10
※App Store Server Notifications

 https://developer.apple.com/documentation/appstoreservernotifications

■App Store Server Notifications 返金通知サンプル

"latest_receipt_info": [
{
"original_transaction_id": “0000000000000”,
"purchase_date_ms": "1601565699000",
"product_id": "xxxxxxxxxxxxxxxx",
"original_purchase_date": "2020-10-01 15:21:39 Etc/GMT",
"purchase_date_pst": "2020-10-01 08:21:39 America/Los_Angeles",
"transaction_id": "0000000000000",
"purchase_date": "2020-10-01 15:21:39 Etc/GMT",
"cancellation_reason": "0",
"original_purchase_date_ms": "1601565699000",
"quantity": "1",
"is_trial_period": "false",
"cancellation_date_pst": "2020-10-22 14:28:15 America/Los_Angeles",
"original_purchase_date_pst": "2020-10-01 08:21:39 America/Los_Angeles",
"cancellation_date": "2020-10-22 21:28:15 Etc/GMT",
"cancellation_date_ms": "1603402095000"
}
],
"status": 0,
"environment": "Production"
},
"bvrs": "4.0.0",
"environment": "PROD",
"notification_type": "REFUND",


11
※responseBody.Latest_receipt_info

 https://developer.apple.com/documentation/appstorereceipts/responsebody/latest_receipt_info



Test an Interrupted Purchase

■アプリ内での購入時に規約同意を求められるなど、購入操作が中断するケースがある

 ・iOS14以降限定ではあるが、このケースをSandbox環境でテストする機能が追加された

12
※中断された購入のテスト

 https://help.apple.com/app-store-connect/#/dev7e89e149d?sub=dev55ecec74d

購入すると…
Test an Interrupted Purchase

13
今日話したこと

● 期限が決まっていて対応しないといけない

○ Google Play Billing Library 



● 特にサブスクリプションで活用機会の多いサーバーAPI

○ Google Play Developer API 

○ AppStore Server Notifications 



● 新OS(iOS14)に合わせて追加された課金テスト関連機能

○ Test an Interrupted Purchase 



14

More Related Content

More from KLab Inc. / Tech

ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテストゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
KLab Inc. / Tech
 

More from KLab Inc. / Tech (20)

ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
ゲーム開発を知らない人にも分かるKLabのゲーム開発運営
 
「リアルISUCON」としてのモバイルオンラインゲーム開発
「リアルISUCON」としてのモバイルオンラインゲーム開発「リアルISUCON」としてのモバイルオンラインゲーム開発
「リアルISUCON」としてのモバイルオンラインゲーム開発
 
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテストゴリラテスト  モバイルゲームのUIを自動的に検出・操作する モンキーテスト
ゴリラテスト モバイルゲームのUIを自動的に検出・操作する モンキーテスト
 
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術モバイルアプリの高速で安定したビルドを支えるJenkins運用術
モバイルアプリの高速で安定したビルドを支えるJenkins運用術
 
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
『ラブライブ!スクールアイドルフェスティバル ALL STARS』を支えるビルドパイプライン 〜より安定したサービス提供を目指して〜
 
KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷KLabのチャットシステム インフラ変遷
KLabのチャットシステム インフラ変遷
 
Ganglia のUIにGrafanaを追加する話
Ganglia のUIにGrafanaを追加する話Ganglia のUIにGrafanaを追加する話
Ganglia のUIにGrafanaを追加する話
 
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
KLabのインフラエンジニア 〜 こんな感じで働いてます 〜
 
属人化して詰まってた作業を自動化で楽しようとした話
属人化して詰まってた作業を自動化で楽しようとした話属人化して詰まってた作業を自動化で楽しようとした話
属人化して詰まってた作業を自動化で楽しようとした話
 
見よう見まねでやってみる2D流体シミュレーション
見よう見まねでやってみる2D流体シミュレーション見よう見まねでやってみる2D流体シミュレーション
見よう見まねでやってみる2D流体シミュレーション
 
モバイルオンラインゲームにおけるUIエンジニアの業務紹介
モバイルオンラインゲームにおけるUIエンジニアの業務紹介モバイルオンラインゲームにおけるUIエンジニアの業務紹介
モバイルオンラインゲームにおけるUIエンジニアの業務紹介
 
VyOSで作るIPv4 Router/IPv6 Bridge
VyOSで作るIPv4 Router/IPv6 BridgeVyOSで作るIPv4 Router/IPv6 Bridge
VyOSで作るIPv4 Router/IPv6 Bridge
 
ワールド別のDBへの取得・更新に後から対応した話
ワールド別のDBへの取得・更新に後から対応した話ワールド別のDBへの取得・更新に後から対応した話
ワールド別のDBへの取得・更新に後から対応した話
 
運営型モバイルゲームの運用について
運営型モバイルゲームの運用について運営型モバイルゲームの運用について
運営型モバイルゲームの運用について
 
Adobe AIR で作る カジュアルゲーム開発
Adobe AIR で作る カジュアルゲーム開発Adobe AIR で作る カジュアルゲーム開発
Adobe AIR で作る カジュアルゲーム開発
 
個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~
個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~
個人情報の保護となりすまし対策~KLabのゲーム内通貨の払戻のシステムの場合~
 
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​
シェーダーを活用した3Dライブ演出のアップデート ~『ラブライブ!スクールアイドルフェスティバル ALL STARS』(スクスタ)の開発事例~​
 
cedec2021
cedec2021cedec2021
cedec2021
 
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
Unityネイティブプラグインの勧め 〜UnityでiOS, AndroidのAPIを利用する方法〜
 
モバイルオンラインゲーム運用のための開発
モバイルオンラインゲーム運用のための開発モバイルオンラインゲーム運用のための開発
モバイルオンラインゲーム運用のための開発
 

Recently uploaded

Recently uploaded (12)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
知識ゼロの営業マンでもできた!超速で初心者を脱する、悪魔的学習ステップ3選.pptx
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
Utilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native IntegrationsUtilizing Ballerina for Cloud Native Integrations
Utilizing Ballerina for Cloud Native Integrations
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 

アプリ内購入 関連機能紹介

  • 2. トピックス
 ● Google
 ○ Google Play Billing Library 
 ○ Google Play Developer API 
 ● Apple
 ○ AppStore Server Notifications 
 ○ Test an Interrupted Purchase 
 
 2
  • 3. Google Play Billing Library
 ■Android 課金ライブラリ
  昔:AIDL / IAB Helper
  今:Google Play Billing Library
 
 ■2021年にはBilling Libraryのv3以降が必要
  新規アプリは2021/08/02〜
  既存アプリは2021/11/01〜
 
 ■Billing Libraryは今後毎年更新され、アプリ開発者も毎年アップデートが必要
  2022年にはv4以降、2023年にはv5以降…
 3 ※Android Developers Blog
  https://android-developers.googleblog.com/2020/06/meet-google-play-billing-library.html

  • 4. Google Play Billing Library - Acknowledge
 ■ Billing Library v2で生まれた新しい概念 Acknowledge (承認)
   3 日以内に購入を承認しない場合、ユーザーは自動的に払い戻しを受け、Google Play は購入を取り消します。
 
 4 ※Billing Library Overview
  https://developer.android.com/google/play/billing/billing_library_overview

  • 5. Google Play Billing Library - Acknowledge
 ■ 例えば…
 
 
 
 5 ユーザー課金
 課金処理
 (アイテム付与)
 Acknowledge
 / Consume
 3日間このままだと 自動的に払い戻し アプリクラッシュ? 通信障害?
  • 6. Google Play Billing Library - Acknowledge
 6 ユーザー課金
 課金処理
 (アイテム付与)
 Acknowledge 済みなら Acknowledge
 アプリサーバ
 3日間このままだと 自動的に払い戻し
  • 7. Google Play Developer API
 ■大別すると2種類のAPI
  ・Subscriptions and In-App Purchases API 
  ・Publishing API 
 
 ■できること
  ・ユーザーのアプリ内商品購入のステータス取得・操作(返金・キャンセル・Acknowledgeなど)
  ・ユーザーによる返金のリスト取得
  ・アプリバイナリのアップロード・公開
  ・ユーザのレビュー取得・返信
  
 
 7 ※Google Play Developer API
  https://developers.google.com/android-publisher

  • 8. Google Play Developer API - サブスクリプション
 ■サブスクリプション型のアプリ内購入にはサーバーAPIがほぼ必須?
  ・サブスクリプションはアプリの外(Google Play)で解約できる
  ・アプリ起動していない購読中のユーザが、現在も購読中か?など、状況を知りたいケースが多い
 
 ■Real-time Developer Notifications(RTDN)
  ・購読状況の変化をリアルタイムに監視するためには通知型の機能も合わせて利用
 
 
 8 ※RESTリソース:purchases.subscriptions
  https://developers.google.com/android-publisher/api-ref/rest/v3/purchases.subscriptions
 ※リアルタイム デベロッパー通知のリファレンス ガイド
  https://developer.android.com/google/play/billing/rtdn-reference

  • 9. Google Play Developer API - リクエスト上限に注意
 ■Google Play Developer APIのリクエストは200,000req/日まで
  ・その開発者アカウントの全アプリの合計なので、提供しているアプリが多い開発者ほど注意が必要
 
 ■Google Play Developer APIを採用する際は…
  ・自分たちの提供しているアプリ1つ1つが、どのくらいAPIを使うのか/使っているのかを管理
  ・200,000req/日では足りない場合、上限引き上げを申請
 
 9 ※Google Play Developer API - Quotas
  https://developers.google.com/android-publisher/quotas

  • 10. App Store Server Notifications
 ■設定したサーバーに以下2種類の通知が届く機能
  ・サブスクリプションの購読状況の変化を通知(更新やキャンセルなど)
  ・ユーザーによる返金情報の通知
 
 ■サブスクリプション関連機能としてはGoogleのRTDNに相当する
  ・使わなくてもサブスクリプションは実現できるが、
   購読状況の変化管理のリアルタイム性を上げるために有用
 
 
 
 10 ※App Store Server Notifications
  https://developer.apple.com/documentation/appstoreservernotifications

  • 11. ■App Store Server Notifications 返金通知サンプル
 "latest_receipt_info": [ { "original_transaction_id": “0000000000000”, "purchase_date_ms": "1601565699000", "product_id": "xxxxxxxxxxxxxxxx", "original_purchase_date": "2020-10-01 15:21:39 Etc/GMT", "purchase_date_pst": "2020-10-01 08:21:39 America/Los_Angeles", "transaction_id": "0000000000000", "purchase_date": "2020-10-01 15:21:39 Etc/GMT", "cancellation_reason": "0", "original_purchase_date_ms": "1601565699000", "quantity": "1", "is_trial_period": "false", "cancellation_date_pst": "2020-10-22 14:28:15 America/Los_Angeles", "original_purchase_date_pst": "2020-10-01 08:21:39 America/Los_Angeles", "cancellation_date": "2020-10-22 21:28:15 Etc/GMT", "cancellation_date_ms": "1603402095000" } ], "status": 0, "environment": "Production" }, "bvrs": "4.0.0", "environment": "PROD", "notification_type": "REFUND", 
 11 ※responseBody.Latest_receipt_info
  https://developer.apple.com/documentation/appstorereceipts/responsebody/latest_receipt_info
 

  • 12. Test an Interrupted Purchase
 ■アプリ内での購入時に規約同意を求められるなど、購入操作が中断するケースがある
  ・iOS14以降限定ではあるが、このケースをSandbox環境でテストする機能が追加された
 12 ※中断された購入のテスト
  https://help.apple.com/app-store-connect/#/dev7e89e149d?sub=dev55ecec74d
 購入すると…
  • 13. Test an Interrupted Purchase
 13
  • 14. 今日話したこと
 ● 期限が決まっていて対応しないといけない
 ○ Google Play Billing Library 
 
 ● 特にサブスクリプションで活用機会の多いサーバーAPI
 ○ Google Play Developer API 
 ○ AppStore Server Notifications 
 
 ● 新OS(iOS14)に合わせて追加された課金テスト関連機能
 ○ Test an Interrupted Purchase 
 
 14