ホーム > カテゴリ > 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


この記事を書いた人

💻 ITスキル・経験
サーバー構築からWebアプリケーション開発。IoTをはじめとする電子工作、ロボット、人工知能やスマホ/OSアプリまで分野問わず経験。

画像処理/音声処理/アニメーション、3Dゲーム、会計ソフト、PDF作成/編集、逆アセンブラ、EXE/DLLファイルの書き換えなどのアプリを公開。詳しくは自己紹介へ
プチモンテ代表、アーティスト名:プチモンテ
🎵 音楽制作
BGMは楽器(音源)さえあれば、何でも制作可能。歌モノは主にロック、バラード、ポップスを制作。歌詞は叙情詩、叙情的な楽曲が多い。楽曲制作は2023年12月中旬 ~

オリジナル曲を始めました✨

YouTubeで各楽曲を公開しています🌈
https://www.youtube.com/@petitmonte

【男性ボーカル】DA・KA・RA | 新たな明日が風と共に訪れる

【男性、女性ボーカル】時空を超越する先に | 時空と風の交響曲

【女性、男性ボーカル】絆 | 穏やかな心に奏でる旋律