Push notification 了解Windows Phone 8.1的推送通知

Push notification 了解Windows Phone 8.1的推送通知,push-notification,windows-phone-8.1,mpns,Push Notification,Windows Phone 8.1,Mpns,我正试图了解我需要在服务器上构建什么才能使推送通知成功工作 我的想法是: 手机会将通知URL发送到我的服务器 服务器将信息存储在数据库中 一个单独的进程或PHP脚本将查询数据库,并为每个设备打开连续循环进程。(每个套接字将查询第三方API) 当在该设备的API中检测到更改时,将向该设备的通知url发送推送通知 在需要做的事情上,这是正确的方法吗。这不是要消耗服务器资源,还是推送通知服务器的预期结果 我制作了一个关于所有这些的简单图表,如下所示: 您的PHP脚本不断ping数据库以进行更改……这将

我正试图了解我需要在服务器上构建什么才能使推送通知成功工作

我的想法是:

  • 手机会将通知URL发送到我的服务器
  • 服务器将信息存储在数据库中
  • 一个单独的进程或PHP脚本将查询数据库,并为每个设备打开连续循环进程。(每个套接字将查询第三方API)
  • 当在该设备的API中检测到更改时,将向该设备的通知url发送推送通知
  • 在需要做的事情上,这是正确的方法吗。这不是要消耗服务器资源,还是推送通知服务器的预期结果

    我制作了一个关于所有这些的简单图表,如下所示:


    您的PHP脚本不断ping数据库以进行更改……这将消耗您的系统资源。推送通知与事件驱动编程齐头并进。这意味着理想情况下,您的代码不应该持续ping数据库。相反,当某件事发生时(例如,一个“事件”),你的代码会做一些事情…比如通过推送通知联系你的手机


    推送通知的步骤大致正确,但不完整。第4步:服务器通过notifyurl(您拥有的)与客户机联系。第5步是,客户机然后与服务器联系,以实际提取所需的信息。也就是说:新信息不会通过通知url提供给客户端。一旦客户端有了新信息,程序就会正常运行(填充列表、下载skynet等)

    如果您的应用程序安装在多个设备上,那么第三步是非常浪费的,不实用

    相反,每个设备都应该订阅它关心的服务器更新类型。服务器的DB将具有从您支持的每种更新类型到关心此更新类型的设备的通知通道URL列表的映射


    当您的服务器检测到X类型的更新时,它将向订阅该类型更新的所有设备发送通知。

    首先,让我们将推送所需的主要阶段中的流程分开

  • 设备订阅
  • 在设备上处理通知
  • 订阅

    对于订阅,您的设备(更具体地说,您的应用程序)必须调用推送api才能启用推送通知。对push API的调用将为您提供一个URL,用于唯一标识安装和运行应用程序的设备。您应该将此URL存储在数据库中,就像存储用户的电子邮件或电话号码一样。这里没有特别的黑魔法。您仅在需要向用户发送通信时使用它

    发送推送信息

    对于推送内容,与电子邮件或SMS消息的方法相同:“如果检测到任何更改,您不会简单地进行无限循环并发送消息”。您需要做的是,在应用程序需要时发送推送消息。因此,您有了要向其发送消息的用户,而不是打开SMTP连接来发送电子邮件,只需构建推送XML消息并调用与该用户关联的URL即可。这里需要考虑的是:

    • 网络可靠性(如果无法连接到服务器,则需要重试)
    • 响应错误代码处理(例如,如果服务器告诉您手机已卸载应用程序,则无需重试)
    • 可伸缩性。您不想从PHP代码发送推送消息,因为您不知道完成任务需要多长时间。你必须异步地做这个。因此,只要将所有推送消息排队,就可以创建一个单独的进程(windows服务、nodeJS服务、cron作业、守护进程等)来发送推送、处理重试和错误以及清理队列
    在设备上处理通知

    现在你已经到了这一步,你需要处理电话通知。这取决于您发送的推送通知的类型:

    • 瓷砖。如果用户已将应用程序置于开始屏幕,您将更新应用程序磁贴的图像、文本和计数器。在客户端,您不需要这样做,因为所有这些参数都是推送请求的一部分
    • 敬酒。这需要标题、文本(最多35个字符)和应用程序内部的相对URL。您的应用程序将使用您在有效负载中指定的URI启动(例如,当您单击来自Twitter的Toast通知时)。所以这里已经注入了一些数据。您可以/也可以不向服务器请求新数据。这取决于你
    • 生的。这一个相当安静。如果您的应用未运行,用户将看不到。正如您可能猜到的,这种推送对于实时更新您正在运行的应用程序非常有用,而不是不断轮询您的服务器,浪费用户电池和带宽,浪费服务器资源。您可以发送任何内容(原始字节或字符串),最大为my Microsoft允许的负载大小
    如果你还有什么问题,尽管问吧


    底线:分离推送,使其异步,不要忘记

    如果我不是连续轮询DB,而是通过某个特定设备的程序创建一个专用进程,该怎么办。它将连接到第三方API,当套接字有更新时,将通知进程并将有效负载发送到设备?我想收集的是这一切的整个架构是如何完成的。如果我理解正确,我想这会满足你的要求。例如,客户端A发送一个推送URL。稍后,客户机B向服务器发送一些与客户机A相关的信息。