针对定向推送通知配置应用

可以使用合作伙伴中心仪表板中的“推送通知”页面,通过向已安装通用 Windows 平台 (UWP) 应用的设备发送定向推送通知来直接与客户交流。 例如,可以使用定向推送通知鼓励客户采取行动(如为应用评分或试用新功能)。 可以发送多个不同类型的推送通知,包括 Toast 通知、磁贴通知和 XML 原始通知。 还可以跟踪由推送通知导致的应用启动的速度。 有关此功能的详细信息,请参阅将推送通知发送到应用客户

在可以从合作伙伴中心向客户发送定向推送通知之前,必须使用 Microsoft Store Services SDK 中的 StoreServicesEngagementManager 类的方法注册应用,才能接收通知。 可以使用此类的其他方法通知合作伙伴中心,应用为响应定向推送通知已启动(如果想要跟踪由推送通知导致的应用启动的速度),也可以使用此类的其他方法停止接收通知。

配置项目

在编写任何代码之前,请遵循以下步骤在你的项目中添加对 Microsoft Store Services SDK 的引用:

  1. 如果先前尚未这样做,请在开发计算机上安装 Microsoft Store Services SDK
  2. 在 Visual Studio 中打开项目。
  3. 在“解决方案资源管理器”中,右键单击你的项目的“引用”节点,然后单击“添加引用”。
  4. 在“引用管理器”中,展开“通用 Windows”并单击“扩展”。
  5. 在 SDK 列表中,单击“Microsoft 协议框架”旁边的复选框,然后单击“确定”。

注册推送通知

若要注册应用以从合作伙伴中心接收定向推送通知,请执行以下操作:

  1. 在项目中,找到启动过程中运行的代码部分,可以在其中注册用于接收通知的应用。

  2. 将以下语句添加到代码文件顶部。

    using Microsoft.Services.Store.Engagement;
    
  3. 在之前确定的启动代码中,获取 StoreServicesEngagementManager 对象,并调用其中一个 RegisterNotificationChannelAsync 重载。 每次启动应用时,都应该调用此方法。

注意

调用 RegisterNotificationChannelAsync 方法时,将会在本地应用数据存储器中为你的应用创建一个名为 MicrosoftStoreEngagementSDKId.txt 的文件(由 ApplicationData.LocalFolder 属性返回的文件夹)。 此文件包含供定向推送通知基础结构使用的 ID。 确保你的应用不会修改或删除此文件。 否则,用户可能会收到多个通知实例,或者通知可能不会以其他方式正常运行。

定向推送通知如何路由至客户

当你的应用调用 RegisterNotificationChannelAsync 时,此方法将会收集当前已登录到设备的客户的 Microsoft 帐户。 接着,当你将定向推送通知发送至包含此客户的类别时,合作伙伴中心会将此通知发送至与此客户的 Microsoft 帐户关联的设备。

请注意,如果客户已启动你的应用并在使用其 Microsoft 帐户登录到设备的状态下将设备交给其他人使用,请注意其他用户可能会看到面向最初客户的通知。 这可能会产生意外结果,尤其是对于那些提供客户可登录使用服务的应用。 若要在此情况下使其他用户无法看到定向通知,请在客户注销应用时调用 UnregisterNotificationChannelAsync 方法。 有关详细信息,请参阅本文后面的注销推送通知

应用在用户启动应用时如何响应

完成用于接收通知的应用注册并且从合作伙伴中心向应用客户发送推送通知之后,当用户为响应推送通知启动应用时,将调用应用中的以下入口点之一。 如果有一些代码想要在用户启动应用时运行,可以将该代码添加到应用中的这些入口点之一。

  • 如果推送通知中含有前台激活类型,请覆盖项目中 App 类的 OnActivated 方法,然后向该方法中添加你的代码。

  • 如果推送通知中含有后台激活类型,请将你的代码添加到后台任务Run 方法中。

例如,你可能想要通过以下方式对在你的应用中购买过任何付费加载项的用户进行奖励:给予这些用户免费的加载项。 在此情况下,可以将推送通知发送给面向这些用户的客户群。 然后,可以在上述所列的其中一个入口点中添加用于给予他们免费应用内购买的代码。

通知合作伙伴中心应用启动

如果在合作伙伴中心选择定向推送通知的“跟踪应用启动速率”选项,请从应用的相应入口点中调用 ParseArgumentsAndTrackAppLaunch 方法,以通知合作伙伴中心,应用为响应推送通知已启动。

该方法还会返回应用的原始启动参数。 当选择跟踪推送通知的应用启动速率后,会将不透明跟踪 ID 添加到启动参数,以帮助在合作伙伴中心跟踪应用启动。 必须将应用的启动参数传递到 ParseArgumentsAndTrackAppLaunch 方法,该方法将向合作伙伴中心发送跟踪 ID、从启动参数中删除跟踪 ID,然后将原始启动参数返回到你的代码。

调用此方法的方式取决于推送通知的激活类型:

  • 如果推送通知中含有前台激活类型,请从应用的 OnActivated 方法重写中调用此方法,然后传递在向此方法传递的 ToastNotificationActivatedEventArgs 对象中可用的参数。 以下代码示例假设你的代码文件中已有 Microsoft.Services.Store.EngagementWindows.ApplicationModel.Activation 命名空间的 using 语句。

    protected override void OnActivated(IActivatedEventArgs args)
    {
        base.OnActivated(args);
    
        if (args is ToastNotificationActivatedEventArgs)
        {
            var toastActivationArgs = args as ToastNotificationActivatedEventArgs;
    
            StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault();
            string originalArgs = engagementManager.ParseArgumentsAndTrackAppLaunch(
                toastActivationArgs.Argument);
    
            // Use the originalArgs variable to access the original arguments
            // that were passed to the app.
        }
    }
    
  • 如果推送通知中含有后台激活类型,请从后台任务Run 方法中调用此方法,然后传递在向此方法传递的 ToastNotificationActionTriggerDetail 对象中可用的参数。 以下代码示例假设你的代码文件中已有 Microsoft.Services.Store.EngagementWindows.ApplicationModel.BackgroundWindows.UI.Notifications 命名空间的 using 语句。

    public void Run(IBackgroundTaskInstance taskInstance)
    {
        var details = taskInstance.TriggerDetails as ToastNotificationActionTriggerDetail;
    
        if (details != null)
        {
            StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault();
            string originalArgs = engagementManager.ParseArgumentsAndTrackAppLaunch(details.Argument);
    
            // Use the originalArgs variable to access the original arguments
            // that were passed to the app.
        }
    }
    

注销推送通知

如果想要应用停止接收来自合作伙伴中心的定向推送通知,请调用 UnregisterNotificationChannelAsync 方法。

StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault();
await engagementManager.UnregisterNotificationChannelAsync();

请注意,此方法会使用于通知的通道失效,因此该应用不再从任何服务接收推送通知。 通道关闭后,该通道无法用于任何服务,其中包括来自合作伙伴中心的定向推送通知和使用 WNS 的其他通知。 若要恢复向此应用发送推送通知,该应用必须请求新的通道。