啟用應用程式內產品購買

無論您的應用程式是否免費,都可以直接從應用程式內銷售內容、其他應用程式或新的應用程式功能 (例如解除鎖定遊戲的下一個關卡)。 在這裡,我們會示範如何在您的應用程式中啟用這些產品。

重要

本文示範如何使用 Windows.ApplicationModel.Store 命名空間的成員來啟用應用程式內產品購買。 此命名空間不再以新功能更新,建議您改用 Windows.Services.Store 命名空間。 Windows.Services.Store 命名空間支援最新的附加元件類型,例如市集管理的消耗性附加元件和訂用帳戶,其設計目的是與合作夥伴中心和市集支援的未來產品和功能類型相容。 Windows.Services.Store 命名空間是在 Windows 10 版本 1607 中引進的,而且在 Visual Studio 中只能用於以 Windows 10 年度版本 (10.0;組建 14393) 或更新版本為目標的專案。 如需使用 Windows.Services.Store 命名空間啟用應用程式內產品購買的詳細資訊,請參閱本文

注意

應用程式內產品無法從應用程式的試用版提供。 使用您應用程式試用版的客戶只能在購買應用程式的完整版本時,才能購買應用程式內產品。

必要條件

  • 要新增供客戶購買之功能的 Windows 應用程式。
  • 當您第一次撰寫並測試新的應用程式內產品時,您必須使用 CurrentAppSimulator 物件,而不是 CurrentApp 物件。 如此一來,您就可以對授權伺服器使用模擬呼叫來驗證授權邏輯,而不是呼叫即時伺服器。 若要這麼做,您必須在 %userprofile%\AppData\local\packages\<套件名稱>\LocalState\Microsoft\Windows Store\ApiData 中自訂名為 WindowsStoreProxy.xml 的檔案。 當您第一次執行應用程式時,Microsoft Visual Studio 模擬器會建立此檔案,您也可以在執行時間載入自訂檔案。 如需詳細資訊,請參閱 搭配 CurrentAppSimulator 使用 WindowsStoreProxy.xml 檔案
  • 本主題也會參考市集範例中提供的程式碼範例。 此範例是獲得實際操作體驗的絕佳方式,其中包含針對通用 Windows 平台 (UWP) 應用程式提供的不同獲利選項。

步驟 1:初始化應用程式的授權資訊

當您的應用程式正在初始化時,藉由初始化 CurrentAppCurrentAppSimulator 來啟用應用程式內產品的購買,以取得應用程式的 LicenseInformation 物件。

void InitializeApp()
{
    // Some app initialization code...

    // Initialize the license info for use in the app that is uploaded to the Store.
    // Uncomment the following line in the release version of your app.
    //   licenseInformation = CurrentApp.LicenseInformation;

    // Initialize the license info for testing.
    // Comment the following line in the release version of your app.
    licenseInformation = CurrentAppSimulator.LicenseInformation;

    // Other app initialization code...
}

步驟 2:將應用程式內供應項目新增至您的應用程式

針對您想要透過應用程式內產品提供的每個功能,請建立供應項目,並將其新增至您的應用程式。

重要

您必須先將想要向客戶呈現的所有應用程式內產品新增至您的應用程式後,再將其提交至市集。 如果您想要稍後新增應用程式內產品,您必須更新應用程式並重新提交新版本。

  1. 建立應用程式內供應項目權杖

    您可以依權杖識別應用程式中的每個應用程式內產品。 此權杖是一個您可以在應用程式和市集中定義及使用的字串,以識別特定的應用程式內產品。 為它提供唯一且有意義的名稱,讓您能夠在撰寫程式碼時快速識別它所代表的正確功能。 以下是一些名稱範例:

    • “SpaceMissionLevel4”
    • “ContosoCloudSave”
    • “RainbowThemePack”

注意

您在程式碼中使用的應用程式內供應項目權杖必須符合您在合作夥伴中心為應用程式定義相對應附加元件時所指定的產品識別碼值。

  1. 在條件式區塊中為功能編碼

    您必須將與應用程式內產品相關聯的每項功能的程式碼放在測試的條件式區塊中,以查看客戶是否具有使用該功能的授權。

    以下範例示範如何在授權特定條件區塊中為名為 featureName 的產品功能編碼。 字串 featureName是可唯一識別應用程式內此產品的權杖,而且也會用在市集中識別它。

    if (licenseInformation.ProductLicenses["featureName"].IsActive)
    {
        // the customer can access this feature
    }
    else
    {
        // the customer can' t access this feature
    }
    
  2. 新增此功能的購買 UI

    您的應用程式也必須提供一種方式,讓客戶購買應用程式內產品所提供的產品或功能。 他們無法像購買完整應用程式一樣透過市集購買。

    以下說明如何測試以查看您的客戶是否已經擁有應用程式內產品,如果沒有,則會顯示購買對話方塊,讓他們可以購買。 將註解 "show the purchase dialog' 取代為購買對話方塊的自訂程式碼 (例如具有易記的 [購買此應用程式!] 按鈕的頁面)。

    async void BuyFeature()
    {
        if (!licenseInformation.ProductLicenses["featureName"].IsActive)
        {
            try
            {
                // The customer doesn't own this feature, so
                // show the purchase dialog.
                await CurrentAppSimulator.RequestProductPurchaseAsync("featureName", false);
    
                //Check the license state to determine if the in-app purchase was successful.
            }
            catch (Exception)
            {
                // The in-app purchase was not completed because
                // an error occurred.
            }
        }
        else
        {
            // The customer already owns this feature.
        }
    }
    

步驟 3:將測試程式碼變更為最終呼叫

這是一個簡單的步驟:在應用程式的程序碼中,將 CurrentAppSimulator 的每個參考變更為 CurrentApp。 您不需要再提供 WindowsStoreProxy.xml 檔案,因此請從應用程式的路徑中移除它 (不過建議您儲存起來,在下一個步驟中設定應用程式內供應項目時供作參考)。

步驟 4:在市集中設定應用程式內產品供應項目

在合作夥伴中心,瀏覽至您的應用程式,並建立符合應用程式內產品供應項目的附加元件。 定義附加元件的產品識別碼、類型、價格和其他屬性。 請務必將它設定為與您測試時在 WindowsStoreProxy.xml 中所設定的相同組態。

注意

您在程式碼中使用的應用程式內供應項目權杖必須符合您在合作夥伴中心為對應附加元件指定的產品識別碼 值。

備註

如果您有興趣為客戶提供消耗性應用程式內產品選項 (可購買、用完,然後視需要再次購買的項目),請移至啟用消耗性應用程式內產品購買 主題。

如果您需要使用收據來確認使用者已進行應用程式內購買,請務必檢閱使用收據來驗證產品購買