特典アイテム専用機能の追加

ユーザーがアプリ内アイテムや特典のロックを解除できるようにする方法として、特典アイテムの作成や、ユーザーが動画広告を見た後に受け取るアイテムを作成する方法があげられます。特典アイテムを提供することで、ユーザーは直接購入していなくてもアプリ内で特典を受けることができます。

このドキュメントでは、特典アイテムに固有の機能を実装する方法について説明しています。このページのワークフロー図でそのプロセスを表示しています。

アプリの特典アイテムの指定

特典アイテムには INAPPSkuType があります。ユーザーが複数の広告を視聴してその数だけの特典を取得できるようにするには、アイテムが消費アイテムである必要があります。

ユーザーに特典アイテムを提供できるようにするためには、まずそのアイテムの SkuDetails を取得する必要があります。そのためには、querySkuDetailsAsync() を呼び出します(アイテムタイプとして SkuType.INAPP を指定します)。

年齢に応じた広告の宣言

児童オンライン プライバシー保護法(COPPA)一般データ保護規則(GDPR)など、子供や未成年のユーザーに関する法的義務を遵守するために、米国内で子供向けとして扱う必要のある広告や、お住まいの国の該当する同意年齢に満たないユーザー向けの広告をアプリで宣言する必要があります。広告リクエストに子供向けのタグを設定すべき条件や、同意年齢に満たないユーザー向けのタグを設定すべき条件、ならびにそれぞれの効果については、AdMob ヘルプセンターをご覧ください。

アプリの請求クライアントを作成する際には、リワード広告リクエストを子供向けとするか、それとも同意年齢に満たないユーザー向けとするかを検討してください。広告リクエストでこれらの制限を設定する必要がある場合は、setChildDirected() および setUnderAgeOfConsent() メソッドを呼び出し、適切な値をそれぞれのメソッドに渡してください。

次のコード スニペットは、動画広告が子供または同意年齢に満たないユーザー向けであることを宣言する方法を示しています。

Kotlin

val billingClient = BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build()

Java

BillingClient billingClient =
    BillingClient.newBuilder(context)
        .setListener(this)
        .setChildDirected(ChildDirected.CHILD_DIRECTED)
        .setUnderAgeOfConsent(UnderAgeOfConsent.UNDER_AGE_OF_CONSENT)
        .build();

動画広告の読み込み

特典アイテムを受け取るために動画広告を見るオプションをユーザーに表示する前に、動画を読み込む必要があります。そのためには、RewardLoadParams オブジェクトを作成し、特典アイテムを示す SkuDetails オブジェクトに関連付けます。次に、請求クライアントの loadRewardedSku() メソッドを呼び出し、RewardLoadParams オブジェクトと RewardResponseListener オブジェクトを渡します。

動画の読む込みが終わると、RewardResponseListener リスナーに通知されます。動画が利用できない場合や、サーバーのタイムアウトなどのエラーが発生した場合も、リスナーに通知されます。

アプリの特典アイテムに関連付けられた動画を読み込む際のデバイスのパフォーマンスを維持するには、以下を念頭に置いてください。

  • 一度にロードできる特典アイテムの SKU は最多 3 つです。
  • ユーザーがアプリを起動する際はいつでも動画を読み込むようにしてください。動画がまだ読み込み中で利用可能かどうかを確認するのに役立ちます。
  • 動画をいつ読み込むかを決める際は、使用帯域幅とアプリのレスポンスとのバランスをユースケースにとって適したものにします。

    • 関連する特典アイテム用に getSkuDetails() を呼び出したら、できるだけすぐに動画を呼び出してください。アプリはレスポンシブな状態のままですが、ユーザーが視聴しない動画を読み込むためにネットワークを浪費する可能性があります。
    • 動画が表示されるページにユーザーが移動したら、できるだけ遅く動画を読み込んでください。この場合、アプリが帯域幅を浪費することはめったにありませんが、動画を視聴するためのボタンがクリックできるようになるまで多ユーザーは多少待たなければなりません。

次のコード スニペットは、ユーザーが特典アイテムを受け取る前に再生する動画広告を読み込むプロセスを示しています。

Kotlin

if (skuDetails.isRewarded()) {
    val params = RewardLoadParams.Builder()
            .setSkuDetails(skuDetails)
            .build()
    mBillingClient.loadRewardedSku(params.build(),
            object : RewardResponseListener {
        override fun onRewardResponse(@BillingResponse responseCode : Int) {
            if (responseCode == BillingResponse.OK) {
                // Enable the reward product, or make
                // any necessary updates to the UI.
            }
        }
    })
}

Java

if (skuDetails.isRewarded()) {
    RewardLoadParams.Builder params = RewardLoadParams.newBuilder();
    params.setSkuDetails(skuDetails);
    mBillingClient.loadRewardedSku(params.build(),
        new RewardResponseListener() {
            @Override
            public void onRewardResponse(int responseCode) {
                if (responseCode == BillingResponse.OK) {
                      // Enable the reward product, or make
                      // any necessary updates to the UI.
                  }
            }
        });
}

ユーザーへの特典アイテム

Google Play Billing Library が特典アイテムに関連する動画を正常に読み込む、つまり RewardResponseListenerresponseCodeBillingResponse.OK)を受け取ると、請求フローを開始できます。

他のすべてのタイプのアプリ内アイテムと同じように、launchBillingFlow() を呼び出すことで特典アイテムに関連する広告の再生を開始します。ユーザーが特典アイテムを受け取るために直接購入していなくても、アイテムを入手して使用できるように請求フローを有効にする必要があります。

購入の消費

ユーザーが特典アイテムを受け取って消費したことを請求クライアントに知らせるには、請求クライアントのリスナーの onPurchasesUpdated() メソッドで購入を処理します。特典アイテムが消費される必要があることに注意してください。

特典アイテムのテスト

アプリがどのように動画広告を読み込み、ユーザーに特典アイテムを提供するかをテストするには、デフォルトで本物の代わりにテスト中の広告を取得するライセンスを保持するテスターに依頼できます。テスター用にアカウントを設定する方法については、Google Play 請求サービス アプリのユーザーテストをご覧ください。

もうひとつのテスト方法は、自分で android.test.reward サービス ID を使用することです。この固有のサービスは Google Play 請求サービスで予約されており、Play Console のアプリ内アイテムの一覧に追加する必要はありません。

注意: アプリの特典アイテムをテストする際は、実際のサービスを使用しないでください。使用すると、アカウントがスパムまたは不正なアカウントとしてフラグされる可能性があります。

テストが完了したら、エンドユーザーに本番環境のアプリを展開する前に android.test.reward を実際の特典アイテムのサービス ID で置き換えてください。

特典アイテムのワークフロー図

次のシーケンス図は、ユーザー、アプリ、Google Play Billing Library が連携して動画広告を表示し、ユーザーに特典アイテムへのアクセスを許可する方法を示しています。

特典アイテムのプロトコルを示すシーケンス図
図 1. Google Play 請求サービスを使用して特典アイテムの購入を完了する手順