创建自定义应用促销活动
除了为将在 Windows 应用中运行的应用创建广告市场活动之外,你还可以使用其他渠道推广你的应用。 例如,可以使用第三方应用营销提供商推广应用,或者可以在社交媒体网站上发布指向应用的链接。 这些活动称为自定义的市场活动。
如果您为应用程序运行自定义活动,可以通过为每个活动创建不同的 URL 来跟踪其相对性能,每个 URL 都包含不同的 活动 ID。 当运行 Windows 10 的客户单击包含市场活动 ID 的 URL 时,Microsoft将该单击与相应的自定义市场活动相关联,并使此数据在 合作伙伴中心中可用。
重要
仅在 Windows 10 上对客户跟踪此数据。 使用其他操作系统的客户仍可以遵循应用列表的链接,但不会包含有关这些客户活动的数据。
有两种主要类型的数据与自定义的活动相关联:应用商店列表的页面浏览量和转换。 转化是指客户通过包含自定义市场活动 ID 的 URL 查看应用的“应用商店列表”页面而实现的应用购置。 有关转化的更多详细信息,请参阅本主题中的了解应用购置如何符合转化条件。
可以通过以下方式检索应用的自定义市场活动性能数据:
- 通过购置报表中的“按市场活动 ID 的应用页面查看和转换”和“市场活动总转换”图表,可以查看应用或加载项的页面查看和转换的相关数据。
- 如果你的应用是通用 Windows 平台(UWP)应用,则可以使用 Windows SDK 中的 API 以编程方式检索导致转换的自定义市场活动 ID。
自定义市场活动方案示例
考虑一位游戏开发人员,她已经完成了一个新游戏,并希望将它推广给现有游戏的玩家。 她在 Facebook 页面上发布了新游戏发布的公告,包括游戏应用商店一览的链接。 她的许多玩家也在Twitter上关注她,因此她还在推特上发布了一个公告,其中包含游戏商店一览的链接。
为了跟踪每个促销渠道的成功,开发人员会创建游戏应用商店一览的 URL 的两个变体:
她将发布到其 Facebook 页面的 URL 包含自定义市场活动 ID
my-facebook-campaign
她将发布到 Twitter 的 URL 包含自定义市场活动 ID
my-twitter-campaign
当她的 Facebook 和 Twitter 关注者单击 URL 时,Microsoft跟踪每个点击并将其与相应的自定义市场活动相关联。 随后符合条件的游戏购置和任何加载项购买均与自定义的市场活动相关联,并被报告为转化。
了解如何将购置认定为转化
自定义市场活动转化是指客户点击通过自定义市场活动推广的 URL 而实现的购置。 对于购置报表中“按市场活动 ID 的应用页面查看和转换”和“市场活动总转换”图表中的转换和以编程方式检索市场活动 ID 中的转换,其判定所依据的方案有所不同。
在购置报告中限定转换
对于购置报告中的按市场活动 ID 分类的应用页面浏览量和转化量和市场活动转化总量图表,以下情况可认定为转化:
无论客户是否拥有识别的 Microsoft 帐户,他们单击包含自定义市场活动 ID 的应用 URL 后,就会重定向到该应用的商店列表。 然后,同一客户在首次单击带有自定义活动 ID 的 Microsoft Store URL 后的 24 小时内下载该应用。
如果客户购置应用所在的设备与其单击具有自定义市场活动 ID 的 URL 所在的设备不同,则仅当客户登录所使用的 Microsoft 帐户与单击 URL 时所使用的帐户相同时才会计算转化。
注意
对于计为自定义市场活动转化的应用购置,该应用中的任何加载项购买也计为同一自定义市场活动的转化。
以编程方式检索市场活动 ID 时认定为转化
要在以编程方式检索与应用关联的市场活动 ID 时认定为转化,则必须满足以下条件:
在运行 Windows 10 版本 1607 或更高版本的设备上:客户(无论是否已登录到识别的 Microsoft 帐户)单击包含自定义市场活动 ID 的 URL 后,就会重定向到该应用的商店列表页面。 客户在查看商店列表时因单击此 URL 而购置应用。
在运行 Windows 10 版本 1511 或更早版本的设备上:客户(必须使用识别的 Microsoft 帐户登录)单击包含自定义市场活动 ID 的 URL 后,就会重定向到该应用的商店列表页面。 客户在查看商店列表时点击 URL 来获得应用。 在这些版本的 Windows 10 或 Windows 11 上,以编程方式检索活动 ID 时,用户必须使用识别的 Microsoft 帐户登录,购置才能认定为转化。
注意
在购置报告内的按市场活动 ID 分类的应用页面浏览量和市场活动转化总量图表中,如果客户离开商店列表页面,但在 24 小时内返回该页面(在同一设备上,或者在使用相同 Microsoft 帐户登录的其他设备上)并购买此应用,那么这将被认定为转化。 但是,如果以编程方式检索市场活动 ID,那么这将不会被认定为转化。
将自定义活动 ID 嵌入到应用的 Microsoft 应用商店页面的 URL 中
为了使用自定义活动 ID 为应用创建微软商店页面 URL,请执行以下操作:
- 为自定义活动创建 ID 字符串。 此字符串最多可以包含 100 个字符,不过我们建议你定义易于识别的简短市场活动 ID。
注意
当其他开发人员查看其应用的购置报告时,市场活动 ID 字符串可能会被其他开发人员看到。 这种情况可能会在客户通过单击你的自定义广告活动 ID 进入应用商店,并在同一会话中购买另一位开发者的应用时发生,从而将该转换量归因于你的广告活动 ID。 该开发人员可以看到由于最初单击你的推广活动 ID(包括推广活动 ID 的名称)而产生的其自身应用的转换次数,但在单击你的推广活动 ID 之后,他们不会看到有多少用户购买了你的应用(或任何其他开发者的应用)的数据。
获取 HTML 或协议格式的应用商店列表链接。
如果希望客户在任何操作系统的浏览器中导航到应用的基于 Web 的应用商店一览,请使用 HTML URL。 在 Windows 设备上,应用商店应用还将启动并显示你的应用一览。 此 URL 的格式
https://apps.microsoft.com/detail/*your app ID*
。 例如,Skype 的 HTML URLhttps://apps.microsoft.com/detail/9wzdncrfj364
。 你可以在应用标识页面上找到此 URL。如果你正在从安装了 UWP 应用的设备或计算机上运行的其他 Windows 应用内推广你的应用,或者当你知道你的客户位于支持 Microsoft 应用商店的设备上时,请使用协议格式。 此链接将直接转到应用的应用商店一览,而无需打开浏览器。 此 URL 的格式
ms-windows-store://pdp/?PRODUCTID=*your app id*
。 例如,Skype 的协议 URLms-windows-store://pdp/?PRODUCTID=9wzdncrfj364
。
将以下字符串追加到应用的 URL 末尾:
对于 HTML 格式 URL,请追加
?cid=*my custom campaign ID*
。 例如,如果 Skype 引入了值 custom_campaign的市场活动 ID,则包含市场活动 ID 的新 URL 将为:https://apps.microsoft.com/detail/9wzdncrfj364?cid=custom_campaign
。对于协议格式 URL,请追加
&cid=*my custom campaign ID*
。 例如,如果 Skype 引入了值 custom_campaign的市场活动 ID,则包含市场活动 ID 的新协议 URL 将为:ms-windows-store://pdp/?PRODUCTID=9wzdncrfj364&cid=custom_campaign
。
以编程方式检索应用的自定义市场活动 ID
如果你的应用是 UWP 应用,则可以使用 Windows SDK 中的 API 以编程方式检索与应用获取关联的自定义市场活动 ID。 这些 API 使许多分析和盈利方案成为可能。 例如,你可以了解当前用户是否在通过 Facebook 市场活动发现应用后获取了你的应用,然后相应地自定义应用体验。 或者,如果你使用的是第三方应用营销提供商,则可以将数据发送回提供商。
仅当客户单击带有嵌入市场活动 ID 的 URL,查看应用的Microsoft应用商店页面,然后获取应用而不离开应用商店一览页时,这些 API 才会返回市场活动 ID 字符串。 如果用户离开页面,然后返回并购置应用,则在使用这些 API 时,这将不会被认定为转化。
根据应用面向的 Windows 版本,可以使用不同的 API:
Windows 10 版本 1607 或更高版本:在 Windows.Services.Store 命名空间中使用 StoreContext 类。 使用此 API 时,无论用户是否已使用识别的 Microsoft 帐户登录,你都可以检索任何合格购置的自定义市场活动 ID。
Windows 10 版本 1511 或更高版本:在 Windows.ApplicationModel.Store 命名空间中使用 CurrentApp 类。 使用此 API 时,仅当用户使用识别的 Microsoft 帐户登录后,你才能检索合格购置的自定义市场活动 ID。
备注
尽管 Windows.ApplicationModel.Store 命名空间在所有版本的 Windows 10 或 Windows 11 中都可用,但如果应用面向 Windows 10 版本 1607 或更高版本,我们建议在 Windows.Services.Store 命名空间中使用 API。 有关这些命名空间之间的差异的详细信息,请参阅 应用内购买和试用。 下面的代码示例演示如何构建代码以在同一项目中使用这两个 API。
代码示例
下面的代码示例演示如何获取自定义活动 ID。 此示例通过使用版本自适应代码来使用 Windows.Services.Store 和 Windows.ApplicationModel.Store 命名空间中的两组 API。 按照此过程,代码可以在任何版本的 Windows 10 或 Windows 11 上运行。 若要使用此代码,项目的目标 OS 版本必须 Windows 10 周年版(10.0;内部版本 14394) 或更高版本,尽管最低 OS 版本可以是早期版本。
// This example assumes the code file has using statements for
// System.Linq, System.Threading.Tasks, Windows.Data.Json,
// and Windows.Services.Store.
public async Task<string> GetCampaignId()
{
// Use APIs in the Windows.Services.Store namespace if they are available
// (the app is running on a device with Windows 10, version 1607, or later).
if (Windows.Foundation.Metadata.ApiInformation.IsTypePresent(
"Windows.Services.Store.StoreContext"))
{
StoreContext context = StoreContext.GetDefault();
// Try to get the campaign ID for users with a recognized Microsoft account.
StoreProductResult result = await context.GetStoreProductForCurrentAppAsync();
if (result.Product != null)
{
StoreSku sku = result.Product.Skus.FirstOrDefault(s => s.IsInUserCollection);
if (sku != null)
{
return sku.CollectionData.CampaignId;
}
}
// Try to get the campaign ID from the license data for users without a
// recognized Microsoft account.
StoreAppLicense license = await context.GetAppLicenseAsync();
JsonObject json = JsonObject.Parse(license.ExtendedJsonData);
if (json.ContainsKey("customPolicyField1"))
{
return json["customPolicyField1"].GetString();
}
// No campaign ID was found.
return String.Empty;
}
// Fall back to using APIs in the Windows.ApplicationModel.Store namespace instead
// (the app is running on a device with Windows 10, version 1577, or earlier).
else
{
#if DEBUG
return await Windows.ApplicationModel.Store.CurrentAppSimulator.GetAppPurchaseCampaignIdAsync();
#else
return await Windows.ApplicationModel.Store.CurrentApp.GetAppPurchaseCampaignIdAsync() ;
#endif
}
}
此代码执行以下操作:
首先,它会检查 Windows.Services.Store 命名空间中的 StoreContext 类是否在当前设备上可用(这意味着设备正在运行 Windows 10 版本 1607 或更高版本)。 如果是这样,代码将继续使用此类。
接下来,它会针对当前用户拥有识别的 Microsoft 帐户的情况尝试获取自定义市场活动 ID。 为此,代码获取表示当前应用 SKU 的 StoreSku 对象,然后访问 CampaignId 属性以检索活动 ID(如果有)。
然后,该代码会尝试在当前用户不存在已识别的 Microsoft 帐户的情况下检索活动 ID。 在这种情况下,推广活动 ID 嵌入到应用许可证中。 该代码使用
方法检索许可证,然后分析许可证的 JSON 内容,以获取名为 customPolicyField1GetAppLicenseAsync 的密钥的值。 此值包含活动 ID。 如果 Windows.Services.Store 命名空间中的 StoreContext 类不可用,则代码会回退到使用 Windows.ApplicationModel.Store 命名空间中的 GetAppPurchaseCampaignIdAsync 方法检索自定义市场活动 ID(此命名空间在所有版本的 Windows 10 或 Windows 11 中均可用)。 请注意,使用此方法时,对于用户具有识别 Microsoft 帐户的合格购置,你只能检索自定义市场活动 ID。
在代理文件中为 Windows.ApplicationModel.Store 命名空间指定市场活动 ID
Windows.ApplicationModel.Store 命名空间包括 CurrentAppSimulator,这是一个特殊类,用于模拟应用商店操作,以便在将应用提交到应用商店之前测试代码。 此类从名为 Windows.StoreProxy.xml 文件的本地文件检索数据。 前面的代码示例演示如何在项目的调试和非调试代码中使用 CurrentApp 和 CurrentAppSimulator。 若要在调试环境中测试此代码,请将 AppPurchaseCampaignId 元素添加到开发计算机上的 WindowsStoreProxy.xml 文件中,如以下示例所示。 运行应用时,GetAppPurchaseCampaignIdAsync 方法将始终返回此值。
<CurrentApp>
...
<AppPurchaseCampaignId>your custom campaign ID</AppPurchaseCampaignId>
</CurrentApp>
Windows.Services.Store 命名空间不提供可用于在测试期间模拟许可证信息的类。 相反,必须将应用发布到应用商店,并将该应用下载到开发设备,以使用其许可证进行测试。 有关详细信息,请参阅应用内购买和试用。
测试您的自定义活动
在推广自定义市场活动 URL 之前,建议执行以下操作来测试自定义市场活动:
登录到用于测试的设备上的Microsoft帐户。
单击自定义的市场活动 URL。 请确保已转到应用页面,然后关闭 UWP 应用或浏览器页面。
多次单击该 URL,每次访问应用页面后关闭 UWP 应用或浏览器页面。 在一次访问应用页面的期间,购置应用以实现转化。 计算单击 URL 的总次数。
确认购置报表中的“按市场活动 ID 的应用页面查看和转换”与“市场活动总转换”图表中显示了预期的页面查看和转换,并测试应用的代码以确认其是否可以使用上述 API 成功检索市场活动 ID。