RawPushNotification when app not 运行 Windows Phone 8.1
RawPushNotification when app not running Windows Phone 8.1
我一直在尝试编写将原始推送通知显示为 toast 的后台任务。当应用程序为 运行.
时,我收到了推送通知
这是我的后台任务class:
public sealed class BackgroundNotificationsTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
string content = notification.Content;
Debug.WriteLine("Background raw notification obtained!");
//SendNotification(content);
}
private void SendNotification(string text)
{
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
XmlNodeList elements = toastXml.GetElementsByTagName("text");
foreach (IXmlNode node in elements)
{
node.InnerText = text;
}
ToastNotification notification = new ToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(notification);
}
}
然后我在MainPage.xaml.cs
注册
private void RegisterTasks()
{
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
var taskRegistered = false;
var exampleTaskName = "NotificationsBackground";
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == exampleTaskName)
{
taskRegistered = true;
break;
}
}
if(!taskRegistered)
{
var builder = new BackgroundTaskBuilder();
builder.Name = exampleTaskName;
builder.TaskEntryPoint = "BackgroundTasks.NotificationsBackground";
builder.SetTrigger(new Windows.ApplicationModel.Background.PushNotificationTrigger());
try
{
BackgroundTaskRegistration task = builder.Register();
Debug.WriteLine("Background Task registered.");
}
catch (Exception e)
{
Debug.WriteLine("Background Task register exception: " + e.ToString());
}
}
}
现在,在 appxmanifest 中,我已将 'Lock screen notifications' 设置为徽章,然后在声明中,我添加了后台任务,并选择了属性推送通知并将入口点设置为 BackgroundNotificationsTask.cs
![屏幕][2]
我是不是做错了什么或者我遗漏了什么?
编辑:
现在,当我收到推送通知时,应用程序关闭...有人知道为什么吗?
你有几处做错了。
1) 将您的 BackgroundTask 放在一个单独的项目中
BackgroundTask 项目应该是 Windows 运行时组件。还要确保您的后台任务驻留在可访问的命名空间下。不要忘记从您的应用程序项目中引用后台任务项目。
2) 注册正确的class
注册后台任务时,始终使用完全限定的 class 名称而不是文件名:
BackgroundTasks.BackgroundNotificationsTask
这是您必须在程序包清单文件和代码中使用的入口点(假定任务 class 在 1 下解释的项目中)并且命名空间称为 BackgroundTasks
).
3) 调用 RequestAccessAsync()
确保在注册任何任务之前调用它:
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
编辑:MSDN 上有一个很好的演练 https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx
我一直在尝试编写将原始推送通知显示为 toast 的后台任务。当应用程序为 运行.
时,我收到了推送通知这是我的后台任务class:
public sealed class BackgroundNotificationsTask : IBackgroundTask
{
public void Run(IBackgroundTaskInstance taskInstance)
{
RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
string content = notification.Content;
Debug.WriteLine("Background raw notification obtained!");
//SendNotification(content);
}
private void SendNotification(string text)
{
XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(ToastTemplateType.ToastText01);
XmlNodeList elements = toastXml.GetElementsByTagName("text");
foreach (IXmlNode node in elements)
{
node.InnerText = text;
}
ToastNotification notification = new ToastNotification(toastXml);
ToastNotificationManager.CreateToastNotifier().Show(notification);
}
}
然后我在MainPage.xaml.cs
注册 private void RegisterTasks()
{
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
var taskRegistered = false;
var exampleTaskName = "NotificationsBackground";
foreach (var task in BackgroundTaskRegistration.AllTasks)
{
if (task.Value.Name == exampleTaskName)
{
taskRegistered = true;
break;
}
}
if(!taskRegistered)
{
var builder = new BackgroundTaskBuilder();
builder.Name = exampleTaskName;
builder.TaskEntryPoint = "BackgroundTasks.NotificationsBackground";
builder.SetTrigger(new Windows.ApplicationModel.Background.PushNotificationTrigger());
try
{
BackgroundTaskRegistration task = builder.Register();
Debug.WriteLine("Background Task registered.");
}
catch (Exception e)
{
Debug.WriteLine("Background Task register exception: " + e.ToString());
}
}
}
现在,在 appxmanifest 中,我已将 'Lock screen notifications' 设置为徽章,然后在声明中,我添加了后台任务,并选择了属性推送通知并将入口点设置为 BackgroundNotificationsTask.cs
![屏幕][2]
我是不是做错了什么或者我遗漏了什么?
编辑:
现在,当我收到推送通知时,应用程序关闭...有人知道为什么吗?
你有几处做错了。
1) 将您的 BackgroundTask 放在一个单独的项目中
BackgroundTask 项目应该是 Windows 运行时组件。还要确保您的后台任务驻留在可访问的命名空间下。不要忘记从您的应用程序项目中引用后台任务项目。
2) 注册正确的class
注册后台任务时,始终使用完全限定的 class 名称而不是文件名:
BackgroundTasks.BackgroundNotificationsTask
这是您必须在程序包清单文件和代码中使用的入口点(假定任务 class 在 1 下解释的项目中)并且命名空间称为 BackgroundTasks
).
3) 调用 RequestAccessAsync()
确保在注册任何任务之前调用它:
BackgroundAccessStatus status = await BackgroundExecutionManager.RequestAccessAsync();
编辑:MSDN 上有一个很好的演练 https://msdn.microsoft.com/en-us/library/windows/apps/xaml/hh977055.aspx