提醒:自 2022 年 8 月 2 日起,所有新應用程式都必須採用帳款服務程式庫 4.0 以上版本 自 2022 年 11 月 1 日起,現有應用程式的所有更新都必須採用帳款服務程式庫 4.0 以上版本。瞭解詳情

新增獎勵商品專屬功能

透過集合功能整理內容 你可以依據偏好儲存及分類內容。

如要為使用者提供應用程式內產品和福利,其中一種方法就是建立「獎勵商品」,也就是使用者在觀看影片廣告後收到的商品。您可以透過提供獎勵商品的方式讓使用者取得應用程式內獎勵和福利,這樣使用者就不必直接購買。

本文說明如何實作獎勵商品的專屬功能。本頁的工作流程圖部分說明了相關流程。

確定應用程式的獎勵商品

獎勵商品的 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。
  • 在使用者每次進入應用程式時,都嘗試載入影片。這個步驟可協助您檢查影片是否仍能載入,並且可供觀看。
  • 在決定何時載入影片時,請在頻寬用量和應用程式的反應時間之間找到平衡,選擇最適合您用途的時間。

    • 最早:在呼叫相關聯獎勵商品的 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 帳款服務程式庫成功載入與獎勵商品相關聯的影片 (即 RewardResponseListener 收到的 responseCodeBillingResponse.OK),您就可以啟動帳單流程。

您可以呼叫 launchBillingFlow() 以開始播放用於提供獎勵商品的廣告,就像提供所有其他類型的應用程式內產品一樣。雖然使用者不是透過直接購買的方式取得獎勵商品,但您還是需要啟用帳單流程,這樣使用者才能順利取得及使用獎勵商品。

消耗購買的產品

如要在使用者獲得並消耗獎勵商品後通知帳款服務用戶端,請透過帳款服務用戶端事件監聽器的 onPurchasesUpdated() 方法處理購買的商品。請注意,必須消耗購買的獎勵產品。

測試獎勵商品

想測試應用程式如何載入影片廣告以及如何為使用者提供獎勵商品,請讓「授權測試人員」進行測試。根據預設,測試人員會取得測試廣告,而非實際的廣告。如要瞭解如何為這些測試人員設定帳戶,請參閱 Google Play 帳款服務應用程式的使用者測試

另一種測試方法則是使用 android.test.reward 產品 ID。這項特定產品是 Google Play 帳款服務中的預留名稱,因此您不必在 Play 管理中心的應用程式內產品清單中加入該產品。

注意:測試應用程式的獎勵商品時,請勿使用實際商品,否則您的帳戶可能會遭標記為垃圾或詐欺帳戶。

不過,在測試完畢後,請務必先使用實際獎勵商品的產品 ID 取代 android.test.reward,然後為使用者部署正式版應用程式。

獎勵商品工作流程圖

以下流程圖顯示使用者、應用程式與 Google Play 帳款服務程式庫如何搭配運作,從而放送影片廣告並授權使用者存取獎勵商品:

顯示獎勵商品通訊協定的流程圖
圖 1. 使用 Google Play 帳款服務完成獎勵商品購買程序的步驟