含加購項目的訂閱方案

訂閱方案加購功能可讓您將多項訂閱產品組合在一起,以便購買、收費及管理。您可以將現有的產品目錄訂閱項目無縫提供為外掛程式,無須事先指定或額外設定。您可以啟動包含多項現有訂閱產品的購買流程,並將這些產品做為加購項目販售。

注意事項

使用附加功能訂閱功能時,請考量下列事項:

  • 只有自動續訂型基本方案支援附加購訂閱方案。

  • 購買交易中的所有項目都必須採用相同的週期性付款週期。舉例來說,您無法同時擁有按年付費的訂閱項目和按月付費的加購項目。

  • 在購買加購項目的訂閱方案中,最多可包含 50 項商品。

  • 這項功能不適用於印度 (IN) 和韓國 (KR) 地區。

整合 Play 帳款服務程式庫

本節說明如何將訂閱與外掛功能整合至 Play 帳款服務程式庫 (PBL)。這篇文章假設您熟悉初始的 PBL 整合步驟,例如將 PBL 依附元件新增至應用程式、初始化 BillingClient 以及連線至 Google Play。本節將著重於與加購內容訂閱方案相關的 PBL 整合層面。

啟動購買流程

如要啟動含有加購項目的訂閱方案購買流程,請按照下列步驟操作:

  1. 使用 BillingClient.queryProductDetailsAsync 方法擷取所有訂閱項目。

  2. 為每個項目設定 ProductDetailsParams 物件。

    ProductDetailsParams 物件代表的項目會指定 ProductDetails (用於指示訂閱項目),以及選取特定訂閱項目 base planofferofferToken

  3. BillingFlowParams.Builder.setProductDetailsParamsList 方法中指定項目詳細資料。BillingFlowParams 類別會指定購買流程的詳細資料。

    以下範例說明如何針對包含多項商品的訂閱購買交易啟動結帳流程:

    Java

       BillingClient billingClient = ;
    
        // ProductDetails obtained from queryProductDetailsAsync().
        ProductDetailsParams productDetails1 = ...;
        ProductDetailsParams productDetails2 = ...;
        ArrayList productDetailsList = new ArrayList<>();
        productDetailsList.add(productDetails1);
        productDetailsList.add(productDetails2);
    
        BillingFlowParams billingFlowParams =
            BillingFlowParams.newBuilder()
               .setProductDetailsParamsList(productDetailsList)
               .build();
        billingClient.launchBillingFlow(billingFlowParams);

購買項目適用的規則

  • 為確保加購項目的續約日期最終與基本項目一致,Google Play 可能會在任何試用或新手價格階段後插入按比例收費。
  • 系統會分別評估每項商品的優惠資格

處理購買交易

處理含有加購項目的訂閱項目,與處理單一商品的購買交易相同,如「將 Google Play 帳款服務程式庫整合至應用程式」一文所述。唯一的差異在於,使用者可以透過單一購買交易獲得多項授權。購買含有加購項目的訂閱項目會傳回多個項目,您可以使用 Google Play 帳款服務程式庫中的 Purchase.getProducts() 擷取這些項目,然後再擷取 Google Play Developer APIpurchases.subscriptionsv2.get 中的 lineItems 清單。

使用外掛程式修改訂閱項目

如有任何變更,訂閱方案會升級或降級。詳情請參閱升級或降級訂閱方案

如要變更或還原應用程式中附加項目的現有訂閱項目,您必須使用額外參數呼叫 launchBillingFlow API,並確保下列事項:

  • 請一律使用目前訂閱購買交易的購買憑證呼叫 setOldPurchaseToken
  • 如要升級、降級或跨級升級基本項目,請呼叫 setSubscriptionReplacementMode,指定如何處理舊版基本項目與新購買的附加功能訂閱方案之間的方案變更。否則,您不需要設定這個參數。
  • 即使基礎項目未變更,您仍可呼叫 setSubscriptionReplacementMode 來套用特定的配給行為。如要瞭解這類情況適用的規則,請參閱在同一訂閱項目內重新訂閱或切換方案
  • 系統會立即套用新加購項目,並按比例收費,以便將下次續訂日期與訂閱項目中的基礎項目保持一致。
  • 移除的加購項目會在當前帳單週期結束時失效。
  • 啟動帳單流程時,您需要指定含有加購內容的訂閱項目中所有有效項目 (不含要移除的項目),以及任何新的加購內容。

以下範例說明如何在變更現有附加購訂閱項目購買交易時,呼叫 launchBillingFlow API:

Java

BillingClient billingClient = ;

int replacementMode =;

// ProductDetails obtained from queryProductDetailsAsync().
ProductDetailsParams productDetails1 = ...;
ProductDetailsParams productDetails2 = ...;
ProductDetailsParams productDetails3 = ...;

ArrayList newProductDetailsList = new ArrayList<>();
newProductDetailsList.add(productDetails1);
newProductDetailsList.add(productDetails1);
newProductDetailsList.add(productDetails1);

BillingFlowParams billingFlowParams =
    BillingFlowParams.newBuilder()
        .setSubscriptionUpdateParams(
          SubscriptionUpdateParams.newBuilder()
              .setOldPurchaseToken(purchaseTokenOfExistingSubscription)
              // No need to set if change does not affect the base item.
             .setSubscriptionReplacementMode(replacementMode)
             .build())
        .setProductDetailsParamsList(productDetailsList)
        .build();

billingClient.launchBillingFlow(billingFlowParams);

訂閱項目修改情境

下表列出附加項目訂閱方案的各種修改情境,以及對應的行為。

現有項目 已修改的項目 是否需要設定替換模式? 行為
A (基本項目)、B A (基本項目) 項目 B 已排定延後移除。
A A (基本項目)、B 項目 B 會立即加入,並按比例收費。
A (基本項目)、B A (基本項目)、C
  • B 已排定延後移除。
  • 系統會立即新增 C,並按比例收費。
A (基本項目)、B B (基本項目) A 已排定延後移除。
A (基本項目)、B C (基本項目)
A (基本項目)、B C (基本項目)、B A -> C 的替換值取決於 setSubscriptionReplacementMode
A (基本項目)、B C (基本項目)、D Yes

即時開發人員通知

RTDN 不會針對含有多項商品授權的訂閱項目購買交易提供 subscriptionId 欄位。您可以改用 Play Developer API 取得購買交易,並查看相關商品的授權。

現有訂閱者的價格異動

如要變更含有加購項目的訂閱項目現有訂閱者的訂閱價格,請參閱「變更訂閱價格」一文,瞭解如何變更單一項目訂閱項目的訂閱價格。不過,本節會說明一些限制和功能差異。

停用舊版價格同類群組

停用舊版同類群組也會影響附加購買項目的訂閱方案。適用下列規則:

  • 所有選擇接受型漲價方案的續約時間應與新價格相同。如果訂閱項目中含有附加購買項目,且該項目有尚未經過使用者確認的選擇加入型漲價方案,系統會忽略購買項目中其他項目的任何新選擇加入型漲價方案,除非新價格的套用時間與 OUTSTANDING 狀態中的現有漲價方案相同。使用者確認價格調漲後,系統就會註冊任何新價格異動。而且使用者只能一次接受所有未確認的選擇接受型漲價方案。

    例子:

    • 假設有附加項目的訂閱方案 (項目 A 和 B) 會在每月 7 日續約。
    • 商品 A 的價格正在從 $7 美元遷移至 $10 美元,且價格調漲預計會在 7 月 7 日生效。
    • 從 5 美元調整為 6 美元的新價格調整作業,將自 6 月 2 日起針對項目 B 開始。由於選擇接受型漲價方案會在遷移後 37 天開始,因此項目 B 最早會在 8 月 7 日調漲價格。

    在這種情況下,除非使用者接受項目 A 的價格異動 (價格異動狀態為「CONFIRMED」),否則系統不會為這筆訂閱購買交易註冊項目 B 的價格異動,而 SubscriptionPurchaseV2 也不會傳回項目 B 的價格異動詳細資料。使用者確認商品 A 的價格異動後,商品 B 的價格異動就會開始。使用者必須先接受商品 A 的主動接受型漲價方案,才能收到商品 B 的主動接受型漲價方案。

  • Google Play 的電子郵件會列出所有在同一天調高或調低價格的項目。

取消訂閱外掛程式

使用者可以在 Play 訂閱中心取消整筆訂閱交易 (含加購項目),而您只能使用 Google Play Developer API 取消整筆訂閱交易 (含加購項目)。

當訂閱購買交易取消但未遭撤銷時,購買交易中的所有項目都不會自動續訂,但使用者仍可繼續存取授權項目,直到相應帳單週期結束為止。

撤銷及退款含外掛程式的訂閱項目

以下是取消訂閱和退款的部分規範:

  • 使用 Play 管理中心為特定訂單核發金額退款,且不會撤銷訂閱項目的存取權。

  • 呼叫 orders.refund 可全額退還使用者已支付的特定訂閱款項,且不會撤銷訂閱的存取權。

  • 呼叫 purchases.subscriptionsv2.revoke 即可立即撤銷所有訂閱項目的存取權。您可以使用這項 API 執行下列操作:

    • 撤銷所有項目的存取權,並提供按比例計算的退款。

    • 當您使用按比例退款功能撤銷含有加購項目的訂閱項目時,系統會針對每項商品的最新訂單發出退款,並根據下次續訂前剩餘的時間,按比例退還金額。

    • 撤銷所有項目的存取權,並提供全額退款

    • 撤銷個別商品的存取權,並全額退款。

撤銷含有加購內容的訂閱項目中的個別項目

如要撤銷含有加購項目的訂閱項目,而不撤銷整筆交易,請在 RevocationContext 中設定 ItemBasedRefund 欄位,然後呼叫 purchases.subscriptionsv2.revoke。您可以在 ItemBasedRefund 欄位中設定應撤銷及退款的商品 productId

如要設定含有一或多個自動續約訂閱項目的購買交易,可以設定 ItemBasedRefund 欄位。

  • 如果在撤銷 ItemBasedRefund 中指定的項目後,訂閱購買項目中仍有有效項目,系統只會撤銷該項目,並全額退款,不會中斷訂閱狀態。
  • 如果在撤銷 ItemBasedRefund 中指定的項目後,訂閱購買項目中沒有任何有效項目,系統會撤銷該項目、全額退款,並取消訂閱。

注意事項

  • 使用 ItemBasedRefund 時,一次只能撤銷一個項目。如果需要撤銷不同的項目,可以多次呼叫這項要求。
  • 如果訂閱購買交易處於任何付款遭拒狀態,或是 ItemBasedRefund 中指定的項目未擁有或已過期,則系統會封鎖項目拒絕。
  • 預付訂閱方案不支援拒絕項目。

付款遭拒時的商品到期

如果購買含有加購內容的訂閱項目,某些續約作業可能只需要延長部分項目的授權,而不影響未來到期的項目。

無論續訂項目為何,如果續訂付款遭拒,整體訂閱項目就會進入寬限期,並根據下列文件說明暫時保留帳戶。

選取復原期間

由於寬限期本身仍會授予使用者授權,因此在購買含有加購項目的訂閱項目時,續訂付款遭拒,系統會選取所有有效項目中寬限期最短的項目,並將其寬限期和帳戶保留期,做為這次續訂的復原期。

有效項目包括在嘗試續約前,購買含有加購項目的訂閱項目時有效的項目,不包括任何新新增的項目 (這些項目必須在復原後才會獲得授權),也不包括因移除或拒絕而不再有效的項目。

系統會套用所選項目的帳戶保留期設定,並設為最短寬限期。如果有多個項目設有最低寬限期,但帳戶保留期不同,系統會套用最長的帳戶保留期。

寬限期

當訂閱項目續訂付款遭拒時,訂閱購買交易會進入寬限期狀態。在寬限期內,使用者仍可繼續存取先前續訂期內的所有有效項目。寬限期過後,如果付款方式仍未修正,整筆訂閱購買交易就會進入帳戶保留狀態。如果其他項目在寬限期內到期,系統會在訂閱項目恢復付款失敗後,針對這些項目啟動新的收費作業。

帳戶保留

訂閱購買交易處於帳戶保留狀態時,所有訂閱項目的存取權都會暫停,直到付款恢復為止。

如果帳戶保留中的訂閱項目已復原,訂閱購買交易會維持原樣。如果訂閱項目未復原,付款遭拒的項目會到期,其他項目則會在其帳單週期結束後恢復存取權。

例子:

  • 使用者訂閱的「My Base Plan」會在每月 1 日續約,然後在 8 月 15 日新增一項每月 $10 美元的加購方案,並享有 7 天的免費試用期。兩項商品都未設定寬限期,且都設有 30 天的帳戶保留期。

  • 在 8 月 22 日,系統會向使用者收取 $2.90 美元 (10*9/31),以按比例收取至 8 月 31 日的費用,但使用者的付款方式會在該日期之前到期,因此訂閱項目會在 8 月 22 日因付款失敗而終止。

當訂閱項目因付款遭拒而進入帳戶保留狀態時,使用者將無法存取附加功能訂閱項目中的任何項目。當付款已復原或取消,訂閱項目就會從帳戶保留狀態中解除,使用者就能繼續使用未續約的項目。

在上一個範例中,訂閱項目於 8 月 22 日進入帳戶保留狀態。

  • 如果帳戶在 9 月 1 日的一般續約日之前 (8 月 25 日) 恢復,使用者將在同一天重新取得 我的 Base Plan加購方案的存取權。下次帳單日期已變更為 9 月 4 日。

  • 如果帳戶在 30 天後仍未復原,訂閱項目會在 9 月 21 日取消,使用者將無法存取加購方案,並恢復存取我的基本方案,直到 9 月 30 日為止。

在本範例中,您必須為含有加購內容的訂閱項目中的所有項目取得更新的 expiryTime,因為部分項目可能會在寬限期和帳戶保留期後恢復授權。

財務報表和對帳

請使用收益報表,將有效訂閱項目與 Play 上的交易進行對帳。每筆交易委刊項都有訂單 ID。如果購買交易代表多項商品,收益和預估銷售報表會針對每項交易 (包括每項商品的收費、費用、稅金和退款) 加入個別的資料列。

如要查看 Play 管理中心的資訊主頁:

  • 控制台「財務報表」部分顯示的收益統計資料會依項目細分。

  • 訂單管理系統會反映購買含有加購項目的訂閱項目,並顯示購買項目的明細清單。您可以透過訂單管理工具撤銷、取消或全額退還使用者的購買交易。