【问题标题】:Windows Phone 8 notifications and background tasksWindows Phone 8 通知和后台任务
【发布时间】:2014-01-31 19:47:58
【问题描述】:

我已经搜索了官方论坛和文档以及所有其他地方,但未能找到具体答案。

问。在 Windows Phone 8 中,应用程序是否可以在后台响应推送通知并执行任务?

据我所知,对于 Toast 和 Tile Notifications,当应用程序不在前台时,根本没有任何钩子可以响应传入的消息。

我认为 “原始通知” 是正确的选择,因为我不需要更新应用程序磁贴,甚至不需要显示 Toast 通知。但是,如果我能做到这一点,我还没有找到一个例子,或者在文档中。

我找到了几个关于为 Windows 商店应用程序 执行此操作的链接,但我想了解是否可以为 Windows Phone 8 执行此操作。 p>

我已经检查了这个其他线程,

Windows Phone 8 Background Task with notifications

其中一个答案表明 Whatsapp 实际上对此有破解,在收到推送通知后下载消息。那么,我的问题的答案是NO吗?

【问题讨论】:

  • 我遇到了同样的问题。但是,我如何从 Bing News 接收 toast 通知,而我什至不使用他们的应用程序?如果我可以从 Bing News 应用程序的后台任务中获得通知,那么理论上它也应该适用于我的代码。

标签: c# windows-phone-8 push-notification mpns


【解决方案1】:

您的问题的答案并不完全是“否”, 你是对的,whatsapp 为此使用了 hack, whatsapp 有时使用 AudioAgent,因为它们可以在后台运行,

我不知道他们到底是怎么做的,我也在寻找相同的答案,让我们看看我是否会在这里发布一些东西

【讨论】:

  • 感谢您的回答。我会再等一段时间,看看我们是否能得到更具体的答案,否则暂时接受你的。
【解决方案2】:

这在 Windows Phone 8.1 中有所改变。来自Raw notification overview (Windows Runtime apps)

接收原始通知

您的应用可以通过两种途径获得原始数据 通知:

  • 通过应用程序运行时的通知传递事件。
  • 如果您的应用已启用运行后台任务,则通过原始通知触发的后台任务。

应用可以使用这两种机制来接收原始通知。如果一个应用程序 实现通知传递事件处理程序和后台 由原始通知触发的任务,通知 当应用程序运行时,交付事件将优先。

  • 如果应用程序正在运行,通知传递事件将优先于后台任务,应用程序将有机会首先处理通知。
  • 通知传递事件处理程序可以通过将事件的 PushNotificationReceivedEventArgs.Cancel 属性设置为 true 来指定在处理程序退出后不应将原始通知传递给其后台任务。如果 Cancel 属性设置为 false 或未设置(默认值为 false),则原始通知将在通知传递事件处理程序完成其工作后触发后台任务。

【讨论】:

  • 虽然我还没有尝试过,但文档清楚地表明现在这是可能的。因此,我正在更改已接受的答案,仅相信您所解释的内容,并且在参考了您所找到的链接之后。谢谢。 :)
【解决方案3】:

以下是关于在 Windows Phone 8.1 的后台接收推送通知的完整指南:

  1. 获取推送通知通道 URI:

    PushNotificationChannel _channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
    
    string ChannelUri = _channel.Uri;
    

确保您通过记录实际获取 URI。保存 URI 并在每次应用启动时运行它,因为 URI 会经常更新。

  1. 在您的解决方案中创建一个 Windows 运行时组件项目: 右键单击解决方案 -> 添加 -> 新建项目 -> 选择“Windows 运行时组件(Windows Phone)”。将此项目称为“任务”或您喜欢的任何名称。

  2. 在新创建的项目中创建一个扩展 IBackgroundTask 的新类。我叫我的“NotificationReceiver”:

    using Windows.ApplicationModel.Background;
    
    namespace Tasks {
        public sealed class NotificationReceiver : IBackgroundTask {
            public void Run(IBackgroundTaskInstance taskInstance) {
                // TODO: implement your task here
            }
        }
    }
    

您的任务将在“运行”函数中执行。

  1. 在您的主项目中引用您的运行时组件: 单击您的 Windows Phone 项目 -> 右键单击​​“引用”-> 添加引用 -> 勾选您的运行时组件,然后按 OK。

  2. 编辑您的应用清单: 双击您的包清单->声明->将“位置”和“推送通知”添加到支持的任务类型,将您的后台任务类名称添加到入口点:我的称为“Tasks.NotificationReceiver”。保存您的更改。

  3. 每次启动应用时取消注册并注册您的后台任务。我给出了完整的解决方案,只需调用“setupBackgroundTask()”:

    private void setupBackgroundTask() {
        requestAccess();
        UnregisterBackgroundTask();
        RegisterBackgroundTask();
    }
    
    private void RegisterBackgroundTask() {
        BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
        PushNotificationTrigger trigger = new PushNotificationTrigger();
        taskBuilder.SetTrigger(trigger);
    
        taskBuilder.TaskEntryPoint = "Tasks.NotificationReceiver";
        taskBuilder.Name = "pushTask";
    
        try {
            BackgroundTaskRegistration task = taskBuilder.Register();
            Logger.log("TASK REGISTERED");
        } catch (Exception ex) {
            Logger.log("FAILED TO REGISTER TASK");
            UnregisterBackgroundTask();
        }
    }
    
    private bool UnregisterBackgroundTask() {
        foreach (var iter in BackgroundTaskRegistration.AllTasks) {
            IBackgroundTaskRegistration task = iter.Value;
            if (task.Name == "pushTask") {
                task.Unregister(true);
                Logger.log("TASK UNREGISTERED");
                return true;
            }
        }
        return false;
    }
    
    private async void requestAccess() {
        BackgroundAccessStatus backgroundStatus = await BackgroundExecutionManager.RequestAccessAsync();
    }
    
  4. 在你的任务中获取 RawNotification 对象:

    RawNotification notification = (RawNotification) taskInstance.TriggerDetails;
    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    相关资源
    最近更新 更多