【问题标题】:WP8 - Scheduled Task Agent for push notificationsWP8 - 推送通知的计划任务代理
【发布时间】:2014-09-09 09:08:52
【问题描述】:

我正在尝试将我的应用与推送通知交互,而后端开发人员选择 Pusher 作为通知提供者。

.NET SDK 很乱,不整洁,同步,在 WP8 上不工作,所以我重写了它,现在可以正常工作了。

问题是:获取推送通知和更新磁贴/吐司是否需要计划任务?或者有什么最好的方法?

很遗憾,我无法更改推送提供者。

【问题讨论】:

    标签: windows-phone-8 push-notification scheduled-tasks pusher


    【解决方案1】:

    您只需将 Tile 和 Toast 推送通知发送到手机,即使您的应用程序未运行,它们也能正常工作。你不需要后台任务。

    以下是我在桌面应用程序中用于向 Windows Phone 8.0 发送推送通知的示例代码:

    const String toastTemplate =
    "<?xml version=\"1.0\" encoding=\"utf-8\"?>" +
    "<wp:Notification xmlns:wp=\"WPNotification\">" +
    "<wp:Toast>" +
    "<wp:Text1>{0}</wp:Text1>" +
    "<wp:Text2>{1}</wp:Text2>" +
    "<wp:Param>{2}</wp:Param>" +
    "</wp:Toast>" +
    "</wp:Notification>";
    
    
    String message = String.Format(toastTemplate, "Test", "updated: " + DateTime.Now.ToString(), "/Pages/SyncPage.xaml");
    Status = await PushNotifiactionsManager.SendNotification(cfg.PushNotificationUri, message, 2);
    
    
    
    public static async Task<string> SendNotification(string pushNotificationUri, string message, short notificationClass)
    {
      String responseText;
      if (message.Length > 3072)
      {
        responseText = String.Format("The message must be <= 3072 bytes: {0}", message);
      }
      else
      {
        HttpClient request = new HttpClient();
        // Add message headers.
        request.DefaultRequestHeaders.Add("X-MessageID", Guid.NewGuid().ToString());
        request.DefaultRequestHeaders.Add("X-NotificationClass", notificationClass.ToString());
        if (notificationClass == 1)
        {
          request.DefaultRequestHeaders.Add("X-WindowsPhone-Target", "token");
        }
        else if (notificationClass == 2)
        {
          request.DefaultRequestHeaders.Add("X-WindowsPhone-Target", "toast");
        }
        try
        {
          // Send the message, and wait for the response.
          HttpResponseMessage response = await request.PostAsync(pushNotificationUri, new StringContent(message));
          IEnumerable<string> values;
          String connectionStatus = String.Empty;
          if (response.Headers.TryGetValues("X-DeviceConnectionStatus", out values))
          {
            connectionStatus = values.First();
          }
          String subscriptionStatus = String.Empty;
          if (response.Headers.TryGetValues("X-SubscriptionStatus", out values))
          {
            subscriptionStatus = values.First();
          }
          String notificationStatus = String.Empty;
          if (response.Headers.TryGetValues("X-NotificationStatus", out values))
          {
            notificationStatus = values.First();
          }
          responseText = String.Format("{0}: {1}, {2}, {3}, {4}",
            notificationClass == 1 ? "Tile" :
            notificationClass == 2 ? "Toast" : "Raw",
            response.StatusCode,
            connectionStatus, subscriptionStatus, notificationStatus);
        }
        catch (WebException ex)
        {
          responseText = ex.Message;
        }
      }
    
      return "Notification response: " + responseText;
    }
    

    【讨论】:

    • 我尝试了,但它不起作用,当我发送推送通知并且应用程序处于后台/关闭状态时,tile 和 toast 没有改变。
    • @DavideRossetto 我添加了用于将 toast 通知发送到我的手机应用程序的示例代码。检查您是否以类似的方式发送通知
    猜你喜欢
    • 2020-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    • 2011-10-09
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多