Android 11 デベロッパー プレビュー 2 が公開されました。ぜひお試しのうえ、フィードバックをお寄せください

特典アイテム固有の機能の追加

ユーザーにアプリ内アイテムや特典を供与する方法のひとつに、「特典アイテム」(動画広告を視聴することで得られるアイテム)の作成があります。特典アイテムを提供することで、ユーザーはアプリ内特典などの特典を、直接購入することなしに得られるようになります。

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

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

特典アイテムの SkuTypeINAPP です。 ユーザーが複数の広告を視聴していくつもの特典を獲得できるようにするには、アイテムが消費される必要があります。

ユーザーに特典アイテムを提供するには、その前にアイテムの SkuDetails を取得する必要があります。これを行うには、アイテムタイプを SkuType.INAPP にして querySkuDetailsAsync() を呼び出します。

年齢に応じた広告の宣言

児童オンライン プライバシー保護法(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 によって、特典アイテムに関連付けられた動画が正常に読み込まれたら(すなわち、RewardResponseListenerBillingResponse.OKresponseCode を受信したら)、請求フローを開始できます。

他のタイプのアプリ内アイテムと同様に、launchBillingFlow() を呼び出すことで特典アイテム用の広告の再生を開始します。ユーザーが直接購入を行って特典アイテムを受け取る場合でなくても、請求フローを有効にする必要があります。そうすることで、ユーザーはそのアイテムを取得し利用できるようになります。

購入の消費

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

特典アイテムのテスト

アプリでの動画広告の読み込みや、ユーザーへの特典アイテムの提供をテストするには、「ライセンスを持つテスター」に協力を依頼します。テスターは、デフォルトで本物の代わりにテスト用の広告を受け取ります。テスター用のアカウントをセットアップする方法については、Google Play 請求サービスを実装するアプリのユーザーテストを行うをご覧ください。

もうひとつのテスト方法として、android.test.reward というアイテム ID を使用する方法があります。この特殊なアイテム ID は Google Play 請求サービスで予約済みのため、Play Console でアプリ内アイテムのリストに追加する必要はありません。

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

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

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

次のシーケンス図は、動画広告の表示からユーザーに対する特典アイテムの供与まで、ユーザー、アプリ、Google Play Billing Library の間でどのように処理が進められるかを示しています。

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