Android Billing API
Overview
Android アプリでサブスクリプションやアプリ内課金の状態をサーバーから取得・検証する場合は Google Play Developer API を利用する。
この API を利用することで以下のような情報を取得できる。
- サブスクリプションの契約状態
- 有効期限
- 自動更新状態
- 支払い状態
- キャンセル状態
Android では ユーザー一覧を取得する API は存在せず、purchaseToken を基準に個別のサブスクリプション状態を取得する設計になっている。
purchaseToken
↓
Google Play Developer API
↓
Subscription Status
そのため実際のシステムでは以下のような構成になることが多い。
Google Play Billing
↓
purchaseToken
↓
Backend Server
↓
Google Play Developer API
Authentication
Google Play Developer API は OAuth2 + Service Account を利用して認証を行う。
フローは次の通り。
Service Account
↓
JWT生成
↓
OAuth Token取得
↓
access_token
↓
Google Play Developer API
1. JWT を生成
Service Account の秘密鍵を使用して JWT を生成する。
Payload 例
{
"iss": "SERVICE_ACCOUNT_EMAIL",
"scope": "https://www.googleapis.com/auth/androidpublisher",
"aud": "https://oauth2.googleapis.com/token",
"exp": now + 3600,
"iat": now
}
署名アルゴリズム
RS256
2. OAuth Token を取得
エンドポイント
POST https://oauth2.googleapis.com/token
Body
grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer
assertion=<JWT>
レスポンス
{
"access_token": "...",
"expires_in": 3600,
"token_type": "Bearer"
}
Subscription API
サブスクリプション状態を取得する API。
GET
https://androidpublisher.googleapis.com/androidpublisher/v3/applications/{packageName}/purchases/subscriptions/{subscriptionId}/tokens/{purchaseToken}
Header
Authorization: Bearer ACCESS_TOKEN
Response Example
{
"startTimeMillis": "1670000000000",
"expiryTimeMillis": "1672592000000",
"autoRenewing": true,
"priceCurrencyCode": "JPY",
"paymentState": 1
}
主要フィールド
| Field | Description |
|---|---|
| startTimeMillis | サブスクリプション開始日時 |
| expiryTimeMillis | 有効期限 |
| autoRenewing | 自動更新状態 |
| paymentState | 支払い状態 |
Payment State
| Value | Status |
|---|---|
| 0 | Pending |
| 1 | Purchased |
| 2 | Free Trial |
| 3 | Pending Upgrade |
Important Notes
purchaseToken の保存
Android ではサブスクリプションを識別するために purchaseToken を保存する必要がある。
purchaseToken
このトークンを使用して API からサブスクリプション状態を取得する。
ユーザー一覧 API は存在しない
Google Play Developer API では 契約ユーザー一覧を取得する API は提供されていない。
そのため以下のような設計が一般的である。
Google Play Billing
↓
purchaseToken
↓
Database
↓
Subscription Status API
References
Google Play Developer API
Subscriptions API
Service Account OAuth