如何在 windows 8.1 中为用户显示推送通知?
How to display push notification for user in windows 8.1?
我目前正在研究 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);
}
}
我已经完美地收到了所有的值,我的服务器团队添加了一个逻辑来向我发送推送通知。现在,我面临的问题是我不知道如何显示服务器发送给该用户的推送通知。另外,如果应用程序不在 运行 或在后台,我们可以显示通知吗?
后台任务解决了我的问题。
首先你需要创建一个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;
否则你会得到异常。
希望对大家有所帮助。
我目前正在研究 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);
}
}
我已经完美地收到了所有的值,我的服务器团队添加了一个逻辑来向我发送推送通知。现在,我面临的问题是我不知道如何显示服务器发送给该用户的推送通知。另外,如果应用程序不在 运行 或在后台,我们可以显示通知吗?
后台任务解决了我的问题。
首先你需要创建一个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;
否则你会得到异常。
希望对大家有所帮助。