アプリのサブスクリプション アドオンの有効化Enable subscription add-ons for your app

ユニバーサル Windows プラットフォーム (UWP) アプリでは、ユーザーにサブスクリプション アドオンのアプリ内購入を提供できます。Your Universal Windows Platform (UWP) app can offer in-app purchases of subscription add-ons to your customers. サブスクリプションを使用すると、自動の定期的な課金期間を設定してアプリ内でデジタル製品 (アプリの機能やデジタル コンテンツなど) を販売できます。You can use subscriptions to sell digital products in your app (such as app features or digital content) with automated recurring billing periods.

注意

アプリ内でサブスクリプション アドオンの購入を有効にするには、Visual Studio でプロジェクトが Windows 10 Anniversary Edition (10.0、ビルド 14393) またはそれ以降のリリース (これは、Windows 10 バージョン 1607 に対応) をターゲットにしている必要があります。また、Windows.ApplicationModel.Store 名前空間の代わりに、Windows.Services.Store 名前空間の API を使用して、アプリ内購入エクスペリエンスを実装している必要があります。To enable the purchase of subscription add-ons in your app, your project must target Windows 10 Anniversary Edition (10.0; Build 14393) or a later release in Visual Studio (this corresponds to Windows 10, version 1607), and it must use the APIs in the Windows.Services.Store namespace to implement the in-app purchase experience instead of the Windows.ApplicationModel.Store namespace. これらの名前空間の違いについて詳しくは、「アプリ内購入と試用版」をご覧ください。For more information about the differences between these namespaces, see In-app purchases and trials.

機能の概要Feature highlights

UWP アプリのサブスクリプション アドオンでは、次の機能をサポートします。Subscription add-ons for UWP apps support the following features:

  • サブスクリプション期間を 1 か月、3 か月、6 か月、1 年、または 2 年から選択できます。You can choose from subscription periods of 1 month, 3 months, 6 months, 1 year, or 2 years.
  • サブスクリプションに 1 週間または 1 か月の無料試用期間を追加できます。You can add free trial periods of 1 week or 1 month to your subscription.
  • Windows SDK では、アプリで利用可能なサブスクリプション アドオンに関する情報を入手したり、サブスクリプション アドオンを購入できるようにしたりするためにアプリで利用できる API を提供しています。The Windows SDK provides APIs you can use in your app to get info about available subscription add-ons for the app and enable the purchase of a subscription add-on. また、サービスから呼び出してユーザーのサブスクリプションを管理できる REST API も提供しています。We also provide REST APIs you can call from your services to manage subscriptions for a user.
  • サブスクリプションの取得数、アクティブなサブスクリプション会員数、および特定の期間中に取り消されたサブスクリプション数を表示する分析レポートを確認できます。You can view analytic reports that provide the number of subscription acquisitions, active subscribers, and canceled subscriptions in a given time period.
  • ユーザーは、自分の Microsoft アカウントの http://account.microsoft.com/services ページでサブスクリプションを管理できます。Customers can manage their subscription on the http://account.microsoft.com/services page for their Microsoft account. ユーザーはこのページを使用して、取得したサブスクリプションすべての表示、サブスクリプションの取り消し、およびサブスクリプションに関連付けられた支払方法の変更ができます。Customers can use this page to view all of the subscriptions they have acquired, cancel a subscription, and change the form of payment that is associated with their subscription.

アプリのサブスクリプション アドオンを有効化する手順Steps to enable a subscription add-on for your app

アプリでサブスクリプション アドオンを購入できるようにするには、次の手順に従います。To enable the purchase of subscription add-ons in your app, follow these steps.

  1. デベロッパー センター ダッシュボードでサブスクリプションのアドオンの申請を作成し、申請を公開します。Create an add-on submission for your subscription in the Dev Center dashboard and publish the submission. アドオンの申請プロセスに従い、次のプロパティをよく確認します。As you follow the add-on submission process, pay close attention to the following properties:

    • 製品の種類: [サブスクリプション] を選択していることを確認します。Product type: Make sure you select Subscription.

    • サブスクリプション期間: サブスクリプションの定期的な課金期間を選択します。Subscription period: Choose the recurring billing period for your subscription. アドオンの公開後にサブスクリプション期間を変更することはできません。You cannot change the subscription period after you publish your add-on.

      各サブスクリプション アドオンがサポートするのは、単一のサブスクリプション期間と試用期間だけです。Each subscription add-on supports a single subscription period and trial period. アプリで提供するサブスクリプションの種類ごとに異なるサブスクリプション アドオンを作成する必要があります。You must create a different subscription add-on for each type of subscription you want to offer in your app. たとえば、試用期間のない月間サブスクリプション、1 か月の試用期間のある月間サブスクリプション、試用期間のない年間サブスクリプション、1 か月の試用期間のある年間サブスクリプションを提供する場合、サブスクリプション アドオンを 4 つ作成する必要があります。For example, if you wanted to offer a monthly subscription with no trial, a monthly subscription with a one-month trial, an annual subscription with no trial, and an annual subscription with a one-month trial, you would need to create four subscription add-ons.

    • 試用期間: ユーザーがサブスクリプション コンテンツを購入する前に試すことのできる期間を 1 週間にするか、1 か月にするかを選択することを検討します。Trial period: Consider choosing a 1 week or 1 month trial period for your subscription to enable users to try your subscription content before they buy it. サブスクリプション アドオンの公開後に試用期間を変更または削除することはできません。You cannot change or remove the trial period after you publish your subscription add-on.

      サブスクリプションの無料試用版を取得するには、ユーザーは有効な支払方法の設定も含めて標準のアプリ内購入プロセスに従って、サブスクリプションを購入する必要があります。To acquire a free trial of your subscription, a user must purchase your subscription through the standard in-app purchase process, including a valid form of payment. 試用期間中に料金を請求されることはありません。They are not charged any money during the trial period. 試用期間の終わりに、サブスクリプションは自動的に完全なサブスクリプションに変わり、有料サブスクリプションの最初の期間の料金がユーザーの支払方法に請求されます。At the end of the trial period, the subscription automatically converts to the full subscription and the user's payment instrument will be charged for the first period of the paid subscription. ユーザーが試用期間中にサブスクリプションを取り消した場合、試用期間が終わるまでサブスクリプションは有効のままです。If the user chooses to cancel their subscription during the trial period, the subscription remains active until the end of the trial period. 一部の試用期間は、すべてのサブスクリプション期間では利用できません。Some trial periods are not available for all subscription periods.

      注意

      各ユーザーは、サブスクリプション アドオンの無料試用版を 1 回だけ取得できます。Each customer can acquire a free trial for a subscription add-on only one time. ユーザーがサブスクリプションの無料試用版を取得したら、Microsoft Store では、同じユーザーが今後同じ無料試用版のサブスクリプションを取得しないようにします。After a customer acquires a free trial for a subscription, the Store prevents the same customer from ever acquiring the same free trial subscription again.

    • 可視性: サブスクリプションのアプリ内購入エクスペリエンスのテストだけに使用するテスト用アドオンを作成している場合は、[ストアに表示しない] オプションのいずれかを選択することをお勧めします。Visibility: If you are creating a test add-on that you will only use to test the in-app purchase experience for your subscription, we recommend that you select one of the Hidden in the Store options. それ以外の場合は、シナリオに最適な可視化オプションを選択します。Otherwise, you can select the best visibility option for your scenario.

    • 価格: このセクションでサブスクリプションの価格を選択します。Pricing: Choose the price of your subscription in this section. アドオンの公開後にサブスクリプションの価格を上げることはできません。You cannot raise the price of the subscription after you publish the add-on. ただし、後で価格を下げることはできます。However, you can lower the price later.

      重要

      アドオンの作成時、既定では、最初の価格は [無料] に設定されています。By default, when you create any add-on the price is initially set to Free. サブスクリプション アドオンの申請の完了後にアドオンの価格を上げることはできないため、ここで必ずサブスクリプションの価格を選択してください。Because you cannot raise the price of a subscription add-on after you complete the add-on submission, be sure to choose the price of your subscription here.

  2. アプリで Windows.Services.Store 名前空間の API を使用して、現在のユーザーが既にサブスクリプション アドオンを取得しているかどうかを確認し、そのユーザーにアドオンをアプリ内購入として販売するかどうかを決定します。In your app, use APIs in the Windows.Services.Store namespace to determine whether the current user has already acquired your subscription add-on and then offer it for sale to the user as an in-app purchase. 詳細については、この記事のコード サンプルを参照してください。See the code examples in this article for more details.

  3. アプリで、サブスクリプションのアプリ内購入の実装をテストします。Test the in-app purchase implementation of your subscription in your app. ストアからアプリを開発用デバイスに 1 回ダウンロードして、そのライセンスをテストに使用する必要があります。You'll need to download your app once from the Store to your development device to use its license for testing. 詳細については、アプリ内購入のテスト ガイダンスをご覧ください。For more information, see our testing guidance for in-app purchases.

  4. テストしたコードを含む更新したアプリ パッケージを含めたアプリの申請を作成して公開します。Create and publish an app submission that includes your updated app package, including your tested code. 詳しくは、「アプリの申請」をご覧ください。For more information, see App submissions.

コード例Code examples

このセクションのコード例では、Windows.Services.Store 名前空間の API を使用して現在のアプリのサブスクリプション アドオンに関する情報を取得する方法および現在のユーザーの代わりにサブスクリプション アドオンの購入を要求する方法を説明します。The code examples in this section demonstrate how to use the APIs in the Windows.Services.Store namespace to get info about subscription add-ons for the current app and request the purchase a subscription add-on on behalf of the current user.

これらの例には、次の前提条件があります。These examples have the following prerequisites:

  • Windows 10 Anniversary Edition (10.0、ビルド 14393) 以降のリリースをターゲットとするユニバーサル Windows プラットフォーム (UWP) アプリの Visual Studio プロジェクト。A Visual Studio project for a Universal Windows Platform (UWP) app that targets Windows 10 Anniversary Edition (10.0; Build 14393) or a later release.
  • Windows デベロッパー センター ダッシュボードでアプリの申請を作成し、このアプリが Microsoft Store で公開されている。You have created an app submission in the Windows Dev Center dashboard and this app is published in the Store. 必要に応じで、テスト中にストアでアプリを検索できないようにアプリを構成することも可能です。You can optionally configure the app so it is not discoverable in the Store while you test it. 詳しくは、テスト ガイダンスをご覧ください。For more information, see the testing guidance.
  • デベロッパー センター ダッシュボードでアプリのサブスクリプション アドオンを作成した。You have created a subscription add-on for the app in the Dev Center dashboard.

これらの例のコードは、次の点を前提としています。The code in these examples assumes:

  • コード ファイルに Windows.Services.Store 名前空間と System.Threading.Tasks 名前空間を使うための using ステートメントがある。The code file has using statements for the Windows.Services.Store and System.Threading.Tasks namespaces.
  • アプリは、アプリを起動したユーザーのコンテキストでのみ動作するシングル ユーザー アプリである。The app is a single-user app that runs only in the context of the user that launched the app. 詳しくは、「アプリ内購入と試用版」をご覧ください。For more information, see In-app purchases and trials.

注意

デスクトップ ブリッジを使用するデスクトップ アプリケーションがある場合、これらの例には示されていないコードを追加して StoreContext オブジェクトを構成することが必要になることがあります。If you have a desktop application that uses the Desktop Bridge, you may need to add additional code not shown in these examples to configure the StoreContext object. 詳しくは、「デスクトップ ブリッジを使用するデスクトップ アプリケーションでの StoreContext クラスの使用」をご覧ください。For more information, see Using the StoreContext class in a desktop application that uses the Desktop Bridge.

サブスクリプション アドオンの購入Purchase a subscription add-on

この例では、現在のユーザーに代わって、アプリの既知のサブスクリプション アドオンの購入を要求する方法を示します。This example demonstrates how to request the purchase of a known subscription add-on for your app on behalf of the current customer. この例は、サブスクリプションに試用期間がある場合の処理方法も示しています。This example also shows how to handle the case where the subscription has a trial period.

  1. コードではまず、ユーザーがサブスクリプションのアクティブなライセンスを既に持っているかどうかを確認します。The code first determines whether the customer already has an active license for the subscription. ユーザーがアクティブなラインセンスを既に持っている場合は、必要に応じてコードでサブスクリプション機能のロックを解除する必要があります (これはアプリに固有の処理なので、例ではコメントで示されています)。If the customer already has an active license, your code should unlock the subscription features as necessary (because this is proprietary to your app, this is identified with a comment in the example).
  2. 次に、ユーザーに代わって購入するサブスクリプションを表す StoreProduct オブジェクトを取得します。Next, the code gets the StoreProduct object that represents the subscription you want to purchase on behalf of the customer. コードでは、購入するサブスクリプション アドオンの Store ID が既にわかっていて、その値が subscriptionStoreId 変数に割り当てられていると想定しています。The code assumes that you already know the Store ID of the subscription add-on you want to purchase, and that you have assigned this value to the subscriptionStoreId variable.
  3. コードは次に、サブスクリプションに試用期間があるかどうかを確認します。The code then determines whether a trial is available for the subscription. アプリでは、必要に応じてこの情報を使って、利用可能な試用版サブスクリプションまたは製品版サブスクリプションの詳細をユーザーに表示することができます。Optionally, your app can use this information to display details about the available trial or full subscription to the customer.
  4. 最後に、コードで RequestPurchaseAsync メソッドを呼び出して、サブスクリプションの購入を要求します。Finally, the code calls RequestPurchaseAsync method to request the purchase of the subscription. サブスクリプションに試用版がある場合は、試用版がユーザーに提供されます。If a trial is available for the subscription, the trial will be offered to the customer for purchase. それ以外の場合は、製品版のサブスクリプションが購入用に提供されます。Otherwise, the full subscription will be offered for purchase.
private StoreContext context = null;
StoreProduct subscriptionStoreProduct;

// Assign this variable to the Store ID of your subscription add-on.
private string subscriptionStoreId = "";  

// This is the entry point method for the example.
public async Task SetupSubscriptionInfoAsync()
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    bool userOwnsSubscription = await CheckIfUserHasSubscriptionAsync();
    if (userOwnsSubscription)
    {
        // Unlock all the subscription add-on features here.
        return;
    }

    // Get the StoreProduct that represents the subscription add-on.
    subscriptionStoreProduct = await GetSubscriptionProductAsync();
    if (subscriptionStoreProduct == null)
    {
        return;
    }

    // Check if the first SKU is a trial and notify the customer that a trial is available.
    // If a trial is available, the Skus array will always have 2 purchasable SKUs and the
    // first one is the trial. Otherwise, this array will only have one SKU.
    StoreSku sku = subscriptionStoreProduct.Skus[0];
    if (sku.SubscriptionInfo.HasTrialPeriod)
    {
        // You can display the subscription trial info to the customer here. You can use 
        // sku.SubscriptionInfo.TrialPeriod and sku.SubscriptionInfo.TrialPeriodUnit 
        // to get the trial details.
    }
    else
    {
        // You can display the subscription purchase info to the customer here. You can use 
        // sku.SubscriptionInfo.BillingPeriod and sku.SubscriptionInfo.BillingPeriodUnit
        // to provide the renewal details.
    }

    // Prompt the customer to purchase the subscription.
    await PromptUserToPurchaseAsync();
}

private async Task<bool> CheckIfUserHasSubscriptionAsync()
{
    StoreAppLicense appLicense = await context.GetAppLicenseAsync();

    // Check if the customer has the rights to the subscription.
    foreach (var addOnLicense in appLicense.AddOnLicenses)
    {
        StoreLicense license = addOnLicense.Value;
        if (license.SkuStoreId.StartsWith(subscriptionStoreId))
        {
            if (license.IsActive)
            {
                // The expiration date is available in the license.ExpirationDate property.
                return true;
            }
        }
    }

    // The customer does not have a license to the subscription.
    return false;
}

private async Task<StoreProduct> GetSubscriptionProductAsync()
{
    // Load the sellable add-ons for this app and check if the trial is still 
    // available for this customer. If they previously acquired a trial they won't 
    // be able to get a trial again, and the StoreProduct.Skus property will 
    // only contain one SKU.
    StoreProductQueryResult result =
        await context.GetAssociatedStoreProductsAsync(new string[] { "Durable" });

    if (result.ExtendedError != null)
    {
        System.Diagnostics.Debug.WriteLine("Something went wrong while getting the add-ons. " +
            "ExtendedError:" + result.ExtendedError);
        return null;
    }

    // Look for the product that represents the subscription.
    foreach (var item in result.Products)
    {
        StoreProduct product = item.Value;
        if (product.StoreId == subscriptionStoreId)
        {
            return product;
        }
    }

    System.Diagnostics.Debug.WriteLine("The subscription was not found.");
    return null;
}

private async Task PromptUserToPurchaseAsync()
{
    // Request a purchase of the subscription product. If a trial is available it will be offered 
    // to the customer. Otherwise, the non-trial SKU will be offered.
    StorePurchaseResult result = await subscriptionStoreProduct.RequestPurchaseAsync();

    // Capture the error message for the operation, if any.
    string extendedError = string.Empty;
    if (result.ExtendedError != null)
    {
        extendedError = result.ExtendedError.Message;
    }

    switch (result.Status)
    {
        case StorePurchaseStatus.Succeeded:
            // Show a UI to acknowledge that the customer has purchased your subscription 
            // and unlock the features of the subscription. 
            break;

        case StorePurchaseStatus.NotPurchased:
            System.Diagnostics.Debug.WriteLine("The purchase did not complete. " +
                "The customer may have cancelled the purchase. ExtendedError: " + extendedError);
            break;

        case StorePurchaseStatus.ServerError:
        case StorePurchaseStatus.NetworkError:
            System.Diagnostics.Debug.WriteLine("The purchase was unsuccessful due to a server or network error. " +
                "ExtendedError: " + extendedError);
            break;

        case StorePurchaseStatus.AlreadyPurchased:
            System.Diagnostics.Debug.WriteLine("The customer already owns this subscription." +
                    "ExtendedError: " + extendedError);
            break;
    }
}

現在のアプリのサブスクリプション アドオンの情報の取得Get info about subscription add-ons for the current app

このコード例では、アプリで利用可能なすべてのサブスクリプション アドオンの情報を取得する方法を示しています。This code example demonstrates how to get info for all the subscription add-ons that are available in your app. この情報を取得するには、まず GetAssociatedStoreProductsAsync メソッドを使用して、アプリで利用可能なアドオンそれぞれを表す StoreProduct オブジェクトのコレクションを取得します。To get this info, first use the GetAssociatedStoreProductsAsync method to get the collection of StoreProduct objects that represent each of the available add-ons for the app. 次に、各製品の StoreSku を取得し、IsSubscription プロパティと SubscriptionInfo プロパティを使ってサブスクリプション情報にアクセスします。Then, get the StoreSku for each product and use the IsSubscription and SubscriptionInfo properties to access the subscription info.

private StoreContext context = null;

public async Task GetSubscriptionsInfo()
{
    if (context == null)
    {
        context = StoreContext.GetDefault();
        // If your app is a desktop app that uses the Desktop Bridge, you
        // may need additional code to configure the StoreContext object.
        // For more info, see https://aka.ms/storecontext-for-desktop.
    }

    // Subscription add-ons are Durable products.
    string[] productKinds = { "Durable" };
    List<String> filterList = new List<string>(productKinds);

    StoreProductQueryResult queryResult =
        await context.GetAssociatedStoreProductsAsync(productKinds);

    if (queryResult.ExtendedError != null)
    {
        // The user may be offline or there might be some other server failure.
        System.Diagnostics.Debug.WriteLine($"ExtendedError: {queryResult.ExtendedError.Message}");
        return;
    }

    foreach (KeyValuePair<string, StoreProduct> item in queryResult.Products)
    {
        // Access the Store product info for the add-on.
        StoreProduct product = item.Value;

        // For each add-on, the subscription info is available in the SKU objects in the add-on. 
        foreach (StoreSku sku in product.Skus)
        {
            if (sku.IsSubscription)
            {
                // Use the sku.SubscriptionInfo property to get info about the subscription. 
                // For example, the following code gets the units and duration of the 
                // subscription billing period.
                StoreDurationUnit billingPeriodUnit = sku.SubscriptionInfo.BillingPeriodUnit;
                uint billingPeriod = sku.SubscriptionInfo.BillingPeriod;
            }
        }
    }
}

サービスからのサブスクリプションの管理Manage subscriptions from your services

更新したアプリがストアで公開され、ユーザーがサブスクリプション アドオンを購入できるようになったら、ユーザーのサブスクリプションの管理が必要になる可能性があります。After your updated app is in the Store and customers can buy your subscription add-on, you may have scenarios where you need to manage the subscription for a customer. サービスから呼び出して次のサブスクリプション管理タスクを実行できる REST API が用意されています。We provide REST APIs you can call from your services to perform the following subscription management tasks:

取り消しCancellations

ユーザーは、Microsoft アカウントの http://account.microsoft.com/services ページを使って、取得したすべてのサブスクリプションの表示、サブスクリプションの取り消し、サブスクリプションに関連付けられている支払い方法の変更ができます。Customers can use the http://account.microsoft.com/services page for their Microsoft account to view all of the subscriptions they have acquired, cancel a subscription, and change the form of payment that is associated with their subscription. ユーザーがこのページを使ってサブスクリプションを取り消した場合でも、現在の請求期間中はサブスクリプションを引き続き利用できます。When a customer cancels a subscription using this page, they continue to have access to the subscription for the duration of the current billing period. 現在の請求期間に対する払い戻しは一切行われません。They do not get a refund for any part of the current billing period. 現在の請求期間の終了時に、サブスクリプションが無効になります。At the end of the current billing period, their subscription is deactivated.

REST API を使用して、ユーザーの代わりにサブスクリプションを取り消して、特定のユーザーのサブスクリプションに関する請求の状態を変更することもできます。You can also cancel a subscription on behalf of a user by using our REST API to change the billing state of a subscription for a given user.

サブスクリプションの更新と猶予期間Subscription renewals and grace periods

請求期間中のある時点で、ユーザーのクレジット カードに対して次の請求期間分の請求が試みられます。At some point during each billing period, we will attempt to charge the customer's credit card for the next billing period. この請求に失敗すると、ユーザーのサブスクリプションは催促中の状態になります。If the charge fails, the customer's subscription enters the dunning state. つまり、現在の請求期間が終わるまでの間、サブスクリプションはアクティブですが、サブスクリプションを自動更新するためにクレジット カードへの請求が定期的に試みられます。This means that their subscription is still active for the remainder of the current billing period, but we will periodically try to charge their credit card to automatically renew the subscription. この状態は、現在の請求期間が終了して次の請求期間が更新される日まで、最大で 2 週間続く可能性があります。This state can last up to two weeks, until the end of the current billing period and the renew date for the next billing period.

サブスクリプションの請求に対する猶予期間は用意されていません。We do not offer grace periods for subscription billing. 現在の請求期間が終了するまでにユーザーのクレジット カードに請求できなかった場合、サブスクリプションは取り消され、現在の請求期間後にユーザーがサブスクリプションにアクセスすることはできなくなります。If we are unable to successfully charge the customer's credit card by the end of the current billing period, the subscription will be canceled and the customer will no longer have access to the subscription after the current billing period.

サポートされていないシナリオUnsupported scenarios

次のシナリオは、サブスクリプション アドオンで現在サポートされていません。The following scenarios are not currently supported for subscription add-ons.

  • 現時点では、ストアを通じたユーザーへのサブスクリプションの直接販売はサポートされていません。Selling subscriptions to customers directly via the Store is not supported at this time. サブスクリプションはデジタル製品のアプリ内購入でのみ利用可能です。Subscriptions are available for in-app purchases of digital products only.
  • ユーザーが Microsoft アカウントの http://account.microsoft.com/services ページを使ってサブスクリプション期間を切り替えることはできません。Customers cannot switch subscription periods using the http://account.microsoft.com/services page for their Microsoft account. 異なるサブスクリプション期間に切り替えるには、ユーザーは現在のサブスクリプションを取り消して、アプリで別のサブスクリプション期間のサブスクリプションを購入する必要があります。To switch to a different subscription period, customers much cancel their current subscription and then purchase a subscription with a different subscription period from your app.
  • サブスクリプション アドオンでは現在、サブスクリプション レベルの切り替えはサポートされていません (たとえば、ユーザーをベーシック サブスクリプションから機能の多いプレミアム サブスクリプションに切り替えるなど)。Tier switching is currently not supported for subscription add-ons (for example, switching a customer from a basic subscription to a premium subscription with more features).
  • サブスクリプション アドオンでは現在、セールプロモーション コードはサポートされていません。Sales and promotional codes are currently not supported for subscription add-ons.