ホーム > カテゴリ > Java・Android >

「アイテム課金」の概要 [Android]

アイテム課金の種類

・消費型
・非消費型
・定期購入型

消費型、非消費型は同一のもので、アプリ側で消費させれば消費型となる。

アイテム課金の流れ

1. (アプリ側)アイテムの購入画面を表示する
2. (ユーザー)アイテムの購入
3. (アプリ側)購入の承認
※3日以内にアプリがアイテムの購入の承認を行わないと、自動的に返金される

その後に、アイテムを消費型にする場合はアイテムを消費する。すると、再度、アイテムが購入可能となる。消費しなければ非消費型となり、同じアイテムは購入不可となる。

テスト

テストは実機かつリリース版APKでのみ可能。 ※エミュレータ不可

キャンセル

キャンセルは原則として48時間以内。48時間を経過するとアプリデベロッパーに連絡後、承諾を得た上で返金手続きを依頼する事になる。返金は各アプリで原則、1度しか受けられません。

参考サイト

Androidでアプリ内課金テストを行う
Androidのアプリ内購入を実装 Google Play Billing Library 2.0

補足

Google Play Consoleの開発者登録済みのGoogleアカウントとは別に、課金テスト用のGoogleアカウントが必要です。課金テスト用のアカウントは開発者登録の25ドルは不要です。(無料)

アイテムの消費のやり方は次のようにします。

// 購入済みアイテムの一覧を取得する
int getPurchasesList(BillingClient billingClient, ArrayList<Purchase> purchase) {

    Purchase.PurchasesResult purchasesResult
            = billingClient.queryPurchases(BillingClient.SkuType.INAPP);
    int responseCode = purchasesResult.getResponseCode ();
    if(responseCode== BillingClient.BillingResponseCode.OK){
        List<Purchase> purchases = purchasesResult.getPurchasesList();
        for (Purchase p : purchases) {
            // 購入済み
            if(Purchase.PurchaseState.PURCHASED == p.getPurchaseState()){
                purchase.add(p);
            }
        }
    }
    return purchase.size();
}
    
// 課金アイテムの消費
// ※消費すると再度、購入が可能となる
void Consume(){

    // 購入済みのアイテムを取得する
    final ArrayList<Purchase> purchase = new ArrayList<>() ;
    int size = getPurchasesList(billingClient, purchase);

    // アイテムを消費する
    for (int i=0;i<size;i++) {

        // 承認済みのアイテムのみ消費を行う
        if (purchase.get(i).isAcknowledged()) {

            // 消費パラメータ
            ConsumeParams params = ConsumeParams.newBuilder()
                    .setPurchaseToken(purchase.get(i).getPurchaseToken())
                    .build();


            // 消費操作が終了
            billingClient.consumeAsync(params, new ConsumeResponseListener() {
                @Override
                public void onConsumeResponse(BillingResult billingResult, String purchaseToken) {
                    int responseCode = billingResult.getResponseCode();

                    // 購入トークンが一致する1つのPurchaseを取得する
                    Purchase p = null;
                    for (Purchase item : purchase) {
                        if (item.getPurchaseToken().equals(purchaseToken)){
                            p = item;
                        }
                    }

                    if (responseCode == BillingClient.BillingResponseCode.OK) {

                        // ココで消費完了なので、お好きな処理を行う 
                        // p.getSku()
                        // p.getOrderId() などを使う                      

                    }
                }
            });
        }
    }
}

上記は「購入済み」(PURCHASED)のアイテムですが、その他に「保留中」(PENDING)、「不特定状態」(UNSPECIFIED_STATE)があります。

保留中の課金処理が不承認された場合は、1,2時間または数時間後に自動的に削除されます。保留中のアイテムは消費不可なので、そのまま放っておくだけです。以上でござる。





関連記事



公開日:2020年06月09日
記事NO:02829