0

我目前正在研究 Windows 8.1 推送通知部分。我阅读了不同的链接,发现首先我们需要注册应用程序并获取 SID 和客户端密码等所有信息,然后发送给我们的服务器团队,以便他们发送推送通知。

然后在此之后,我在我身边实现了以下代码,以从 WNS 获取该 Uri 的 channelUri 和到期日期。

  PushNotificationChannel channel = null;
        try
        {
            channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
            if (channel != null)
            {
                var notificationUri = channel.Uri;
                var expiration_time = channel.ExpirationTime;
            }
            channel.PushNotificationReceived += channel_PushNotificationReceived;
        }
        catch (Exception ex)
        {
            if (ex != null)
            {
                System.Diagnostics.Debug.WriteLine(ex.HResult);
            }
        } 

我已经完美地收到了所有值,我的服务器团队添加了一个逻辑来向我发送推送通知。现在,我面临的问题是我不知道如何显示接收到的服务器发送给该用户的推送通知。此外,我们能否显示应用程序未运行或处于后台的通知?

4

1 回答 1

0

后台任务解决了我的问题。

首先,您需要创建一个WindowsRuntimeComponent项目并添加以下代码

public sealed class PushNotification:IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        RawNotification notification = (RawNotification)taskInstance.TriggerDetails as RawNotification;
        if (notification != null)
        {
            ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;
            XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
            var textElemets = toastXml.GetElementsByTagName("text");
            textElemets[0].AppendChild(toastXml.CreateTextNode(notification.Content));
            var imageElement = toastXml.GetElementsByTagName("image");
            imageElement[0].Attributes[1].NodeValue = "ms-appx:///Assets/50.png";
            ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml));
        }

    }
}

然后使用以下代码在任何页面中注册后台任务(我在主页中添加)

private async void RegisterBackgroundTask()
    {

        await BackgroundExecutionManager.RequestAccessAsync();

        try
        {

            foreach (var task in BackgroundTaskRegistration.AllTasks)
            {
                try
                {
                    task.Value.Unregister(false);
                }
                catch
                {
                    //
                }
            }
            BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
            builder.Name = "Push Notifcation Task";
            builder.TaskEntryPoint = typeof(PushNotification).FullName;
            builder.SetTrigger(new PushNotificationTrigger());
            builder.Register();
        }
        catch(Exception e)
        {
            if(e != null)
            {
                System.Diagnostics.Debug.WriteLine(e.HResult);
                System.Diagnostics.Debug.WriteLine(e.InnerException);
            }
        }
    }

请不要忘记在Package.appmanifest文件的声明部分中添加此后台任务,并且名称Entry Point应匹配,builder.TaskEntryPoint = typeof(PushNotification).FullName;否则您将获得异常。

希望它可以帮助某人。

于 2015-07-09T09:02:21.460 回答