含加購項目的訂閱方案

訂閱方案加購內容可讓您將多個訂閱產品組合在一起,以便一併購買、計費及管理。現有的產品目錄訂閱項目可做為外掛程式,無縫提供給使用者,不需預先指定或進行額外設定。您可以啟動包含多個現有訂閱產品的購買流程,並將這些產品做為加購內容銷售。

注意事項

使用「加購內容的訂閱方案」功能時,請注意下列事項:

  • 加購內容僅適用於自動續訂型基本方案。

  • 購買交易中的所有項目必須採用相同的週期性帳單週期。舉例來說,您無法為按年計費的訂閱項目,加購按月計費的加購項目。

  • 訂閱方案最多可包含 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
  • 如要升級、降級或交叉升級項目,請呼叫 SubscriptionProductReplacementParams.setReplacementMode,指定舊購買項目和新購買項目之間的方案變更處理方式。否則不需要設定這個參數。
  • 如果基本項目未變更,您仍可呼叫 SubscriptionProductReplacementParams.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);

訂閱項目修改情境

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

使用 SubscriptionProductReplacementParams 時

現有項目 已修改的項目 您是否需要在 SubscriptionProductReplacementParams 中設定更換模式? 行為
A (基礎項目)、B A (基礎項目) 是 (使用 KEEP_EXISTING)
  • 項目 B 已排定延後移除。
  • 保留項目 A。
  • 使用者會保留項目 A 的現行價格,包括註冊時獲得的任何剩餘新用戶優惠。
A A (基礎項目)、B 是 (使用 KEEP_EXISTING 做為 A)
  • 系統會立即新增項目 B,並按比例收取費用。
  • 保留項目 A。
  • 使用者會保留項目 A 的現行價格,包括註冊時獲得的任何剩餘新用戶優惠。
A (基礎項目)、B A (基礎項目)、C 是 (使用 KEEP_EXISTING 做為 A)
  • B 已排定延後移除。
  • 系統會立即新增 C,並按比例收取費用。
  • 保留項目 A。
  • 使用者會保留項目 A 的現行價格,包括註冊時獲得的任何剩餘新用戶優惠。
A (基礎項目)、B B (基礎項目) A 已排定延後移除。
A (基礎項目)、B C (基本項目)
  • A -> C 的替代項目取決於 SubscriptionProductReplacementParams replacementMode
  • B 已排定延後移除。
A (基礎項目)、B C (基本項目)、B
  • A -> C 的替代項目取決於 SubscriptionProductReplacementParams replacementMode
  • 如要讓項目 B 維持不變,請將其替換模式設為 KEEP_EXISTING。否則,預設的取代模式為 IMMEDIATE_WITHOUT_PRORATION
A (基礎項目)、B C (基礎項目)、D Yes
  • A -> C 的替代項目取決於 SubscriptionProductReplacementParams replacementMode
  • B 已排定延後移除。
  • 系統會立即新增 D,並按比例收取費用。
A (基礎項目)、B A (基礎項目)、C
  • A -> A 和 B -> C 的替代項目取決於每個 ProductDetailsParamsSubscriptionProductReplacementParams replacementMode 提供的替代模式。
  • 如要讓項目 A 維持不變,請將其替換模式設為 KEEP_EXISTING
A (基本項目)、B、C D (基本項目)、B、C
  • A->D 和 B->B、C->C 的替代項目取決於每個 ProductDetailsParamsSubscriptionProductReplacementParams replacementMode 提供的替代模式。
  • 如要保留項目 B 和 C 不變,請將其取代模式設為 KEEP_EXISTING

使用 SubscriptionUpdateParams 時

現有項目 已修改的項目 是否需要設定更換資訊? 行為
A (基礎項目)、B A (基礎項目)
  • 項目 B 已排定延後移除。
  • 項目 A 的行為取決於基本方案的「基本方案與優惠異動」設定。
  • 項目 A 的價格會更新為最新價格,使用者可能會失去註冊時根據優惠資格條件獲得的任何新用戶優惠。
A A (基礎項目)、B
  • 系統會立即新增項目 B,並按比例收取費用。
  • 項目 A 的行為取決於基本方案的「基本方案與優惠異動」設定。
  • 項目 A 的價格會更新為最新價格,使用者可能會失去註冊時根據優惠資格條件獲得的任何新用戶優惠。
A (基礎項目)、B A (基礎項目)、C
  • B 已排定延後移除。
  • 系統會立即新增 C,並按比例收取費用。
  • 項目 A 的行為取決於基本方案的「基本方案與優惠異動」設定。
A (基礎項目)、B B (基礎項目) A 已排定延後移除。
A (基礎項目)、B C (基本項目)
A (基礎項目)、B C (基本項目)、B A -> C 的替代項目取決於 setSubscriptionReplacementMode (已在 PBL 8.1 中淘汰)。
A (基礎項目)、B C (基礎項目)、D Yes
  • A -> C 的替代項目取決於 setSubscriptionReplacementMode (已在 PBL 8.1 中淘汰)。
  • B 已排定延後移除。
  • 系統會立即新增 D,並按比例收取費用。

即時開發人員通知

如果購買的訂閱項目包含加購內容,且含有多項商品授權,RTDN 就不會提供 subscriptionId 欄位。不過,您可以使用 Play Developer API 取得購買交易,並查看相關聯的項目授權。

現有訂閱者的價格異動

如要為已購買加購商品的現有訂閱者調整訂閱價格,做法與變更單一商品訂閱價格類似。不過,如本節所述,這兩項服務在功能上有些差異,也存在一些限制。

停用舊版價格同類群組

停用舊版同類群組也會影響含有加購項目的訂閱方案。規則如下:

  • 所有未結的選擇接受型漲價方案,都應與新價格的續訂時間相同。如果使用者尚未確認訂閱項目 (含加購內容) 的主動接受型漲價方案,除非其他項目的新主動接受型漲價方案與待處理狀態的現有漲價方案適用相同的續訂時間,否則系統會忽略這些方案。使用者確認價格調漲後,系統就會登記任何新的價格異動。使用者只能一次接受所有未確認的選擇接受型漲價方案。

    例子:

    • 假設訂閱方案包含加購項目 (A 和 B),且每月 7 號續訂。
    • 商品 A 的價格正從 $7 美元調漲為 $10 美元,預計於 7 月 7 日生效。
    • 6 月 2 日起,項目 B 的價格將從 $5 美元調漲至 $6 美元。由於「選擇接受」型漲價方案會在遷移後 37 天生效,因此商品 B 最早會在 8 月 7 日漲價。

    在這種情況下,使用者接受項目 A 的價格異動前 (項目 A 處於 CONFIRMED 狀態前),系統不會為這筆訂閱交易註冊項目 B 的價格異動,且 SubscriptionPurchaseV2 不會傳回項目 B 的價格異動詳細資料。使用者確認商品 A 的價格異動後,系統會開始處理商品 B 的價格異動。使用者必須先接受商品 A 的主動接受型漲價方案,才會收到商品 B 的主動接受型漲價方案。

  • Google Play 的電子郵件會列出所有價格調漲或調降的項目,這些變更都會在同一天生效。

取消含有加購內容的訂閱項目

使用者可以在 Play 訂閱中心取消含有加購內容的訂閱項目,您只能使用 Google Play Developer API 取消這類訂閱項目。

如果取消訂閱交易但未撤銷,交易中的所有項目都不會自動續訂,但使用者在相應帳單週期結束前,仍可存取有權使用的項目。

撤銷含有加購內容的訂閱項目並退款

以下是取消訂閱和退款的部分準則:

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

  • 撥打 orders.refund,即可針對使用者支付的特定訂閱費用全額退款,且不會撤銷訂閱存取權。

  • 呼叫 purchases.subscriptionsv2.revoke,立即撤銷所有訂閱項目的存取權。這項 API 可讓您:

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

    • 如果使用按比例退款的方式撤銷含加購內容的訂閱項目,系統會根據下次續訂前剩餘的時間,按比例計算各項目的最新訂單金額,並核發退款。

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

    • 撤銷個別項目的存取權,並獲得該項目的全額退款。

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

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

如果購買的商品包含一或多個自動續訂項目,即可設定 ItemBasedRefund 欄位。

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

注意事項

  • 使用 ItemBasedRefund 時,一次只能撤銷一個項目。 如需撤銷多個項目,可以多次呼叫要求。
  • 如果訂閱交易處於任何付款遭拒狀態,或 ItemBasedRefund 中指定的項目不屬於使用者或已過期,系統就會封鎖項目停用。
  • 預付型訂閱方案不支援調降項目。

付款遭拒時商品到期

如果購買的訂閱項目含有加購內容,部分續訂可能只需要延長部分項目授權,不會影響日後到期的項目。

無論續訂項目為何,如果續訂扣款遭拒,整體訂閱交易就會進入寬限期,帳戶也會如以下文件所述遭到暫停。

選取復原時間範圍

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

有效項目包括在嘗試續訂前,透過加購項目購買訂閱方案時有效的項目,但不包括任何新加入的項目 (必須在恢復後才能享有權益),以及因移除或停用而失效的項目。

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

寬限期

如果系統無法續訂訂閱項目,該訂閱交易就會進入寬限期。在寬限期內,使用者仍可存取上一個續訂週期內的所有有效項目。寬限期過後,如果付款方式仍未修正,整筆訂閱交易就會進入帳戶保留狀態。如果在寬限期內有其他項目到期,系統會在訂閱項目恢復後,再次嘗試收取這些項目的費用。

帳戶保留

訂閱項目處於帳戶保留狀態時,所有訂閱項目都會暫停,直到付款恢復為止。

如果帳戶保留的訂閱項目已復原,訂閱項目會繼續維持現狀。如果訂閱項目未復原,付款遭拒的項目將會過期,其他項目則會在剩餘的帳單週期內恢復存取權。

例子:

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

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

如果訂閱項目因付款遭拒而進入帳戶保留狀態,使用者就無法存取任何含加購內容的訂閱項目。如果訂閱項目退出帳戶保留狀態 (因為已恢復付款或取消訂閱),系統會將未續訂項目的剩餘時間還給使用者。

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

  • 如果使用者在 8 月 25 日 (9 月 1 日前) 恢復帳戶,當天就能重新存取「我的 Base Plan」和「加購方案」。下次帳單結算日改為 9 月 4 日。

  • 如果帳戶在 30 天後仍未復原,系統將於 9 月 21 日取消訂閱,使用者將無法存取加購方案,但可繼續使用基本方案,直到 9 月 30 日為止。

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

財務報表和對帳

使用收益報表,比對有效訂閱項目與 Play 交易。每筆交易明細都有訂單 ID。如果購買交易包含多個項目,收益和預估銷售量報表會為每個項目列出個別交易的明細,例如費用、稅金和退款。

Play 管理中心的資訊主頁:

  • 管理中心的「財務報表」部分會依項目列出收益統計資料。

  • 訂單管理會顯示訂閱項目和加購內容的購買交易,並列出所購項目。在訂單管理中,您可以撤銷、取消或全額退還使用者的購買交易。