可以使用合作伙伴中心中的 推送通知 页面,通过将定向推送通知发送到安装了通用 Windows 平台(UWP)应用的设备,直接与客户互动。 例如,可以使用定向推送通知来鼓励客户采取措施,例如对应用评分或尝试新功能。 可以发送多种不同类型的推送通知,包括 Toast 通知、磁贴通知和原始 XML 通知。 还可以跟踪推送通知导致的应用启动速率。 有关此功能的详细信息,请参阅 向应用的客户发送推送通知。
必须先使用 Microsoft Store Services SDK 中的 StoreServicesEngagementManager 类方法来注册应用以接收通知,然后才能从合作伙伴中心向客户发送定向推送通知。 可以使用此类的其他方法来通知合作伙伴中心,你的应用是为了响应定向推送通知而启动的(如果想跟踪因通知导致的应用启动率),以及停止接收通知。
配置你的项目
在编写任何代码之前,请按照以下步骤在项目中添加对 Microsoft Store Services SDK 的引用:
- 如果您尚未这样做,在开发计算机上安装 Microsoft Store Services SDK。
- 在 Visual Studio 中打开项目。
- 在解决方案资源管理器中,右键单击项目的 引用 节点,然后单击 添加引用。
- 在 引用管理器中,展开 通用 Windows 并单击 扩展。
- 在 SDK 列表中,单击 Microsoft Engagement Framework 旁边的复选框,然后单击 确定。
注册推送通知
若要注册应用以从合作伙伴中心接收定向推送通知,请执行以下操作:
在项目中,找到在启动期间运行的代码部分,可在其中注册应用以接收通知。
将以下语句添加到代码文件的顶部。
using Microsoft.Services.Store.Engagement;
获取 StoreServicesEngagementManager 对象,并在之前识别的启动代码中调用 RegisterNotificationChannelAsync 的其中一个重载方法。 每次启动应用时,都应调用此方法。
如果希望合作伙伴中心为通知创建自己的通道 URI,请调用 RegisterNotificationChannelAsync() 重载。
StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault(); await engagementManager.RegisterNotificationChannelAsync();
重要
如果应用还调用 CreatePushNotificationChannelForApplicationAsync 为 WNS 创建通知通道,请确保代码不会同时调用 CreatePushNotificationChannelForApplicationAsync 和 RegisterNotificationChannelAsync() 重载。 如果需要调用这两个方法,请确保按顺序调用它们,并在调用另一个方法之前等待一个方法的返回结果。
如果要指定要用于合作伙伴中心的定向推送通知的通道 URI,请调用 RegisterNotificationChannelAsync(StoreServicesNotificationChannelParameters) 重载。 例如,如果你的应用已使用 Windows 推送通知服务(WNS),并且想要使用相同的通道 URI,则可能需要执行此操作。 必须先创建 StoreServicesNotificationChannelParameters 对象,并将 CustomNotificationChannelUri 属性设置为通道 URI。
StoreServicesNotificationChannelParameters parameters = new StoreServicesNotificationChannelParameters(); parameters.CustomNotificationChannelUri = "Assign your channel URI here"; StoreServicesEngagementManager engagementManager = StoreServicesEngagementManager.GetDefault(); await engagementManager.RegisterNotificationChannelAsync(parameters);
注释
调用 RegisterNotificationChannelAsync 方法时,应用在本地应用数据存储中创建名为 MicrosoftStoreEngagementSDKId.txt 的文件(ApplicationData.LocalFolder 属性返回的文件夹)。 此文件包含目标推送通知基础结构使用的 ID。 确保应用不会修改或删除此文件。 否则,用户可能会收到多个通知实例,或者通知在其他方面可能无法正常运行。
如何将定向推送通知路由到客户
当应用调用 RegisterNotificationChannelAsync时,此方法将收集当前登录到设备的客户的Microsoft帐户。 稍后,向包含此客户的细分市场发送定向推送通知时,合作伙伴中心会将通知发送到与此客户的Microsoft帐户关联的设备。
如果启动你的应用的客户将设备提供给其他人使用,而他们仍然使用其Microsoft帐户登录到设备,请注意,其他人可能会看到针对原始客户的通知。 这可能导致意外后果,尤其是对于提供客户可登录使用的服务的应用。 若要防止其他用户在这种情况下看到定向通知,请在客户注销应用时调用 UnregisterNotificationChannelAsync 方法。 有关详细信息,请参阅本文后面的 取消订阅推送通知。
应用在用户启动应用时如何响应
注册应用以接收通知后,从合作伙伴中心向应用的客户发送推送通知,当用户启动应用以响应推送通知时,将调用应用中的以下入口点之一。 如果用户启动应用时想要运行某些代码,可以将代码添加到应用中的其中一个入口点。
例如,你可能希望通过授予那些在你的应用中购买了付费加载项的用户一个免费加载项,以此来奖励他们。 在这种情况下,可以将推送通知发送到面向这些用户的 客户细分市场。 然后,可以添加代码,以在上面列出的入口点之一中向其授予免费 应用内购买。
通知合作伙伴中心应用的发布
如果在合作伙伴中心为目标推送通知选择了 跟踪应用启动率 选项,请从应用的相应入口点调用 ParseArgumentsAndTrackAppLaunch 方法,通知合作伙伴中心应用已因该推送通知启动。
此方法还会返回应用的原始启动参数。 选择跟踪推送通知的应用启动速率时,会将不透明的跟踪 ID 添加到启动参数,以帮助跟踪合作伙伴中心中的应用启动。 必须将应用的启动参数传递给 ParseArgumentsAndTrackAppLaunch 方法,并且此方法会将跟踪 ID 发送到合作伙伴中心,从启动参数中删除跟踪 ID,并将原始启动参数返回到代码。
调用此方法的方式取决于推送通知的激活类型:
如果推送通知具有前台激活类型,请从应用中的 OnActivated 方法重写中调用此方法,并传递传递给此方法的 ToastNotificationActivatedEventArgs 对象中可用的参数。 下面的代码示例假定代码文件 语句用于 Microsoft.Services.Store.Engagement 和 Windows.ApplicationModel.Activation 命名空间。
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.Engagement 、Windows.ApplicationModel.Background 和Windows.UI.Notifications 命名空间使用 语句。 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 的其他通知。 若要继续向此应用发送推送通知,应用必须请求新的通道。