我应该在收到有效负载后更新我的应用吗或者我应该通过允许它自己下载来更新它?

时间:2017-06-08 17:32:03

标签: ios swift apple-push-notifications remote-notifications silent-notification

当您的iPhone收到WhatsApp / Telegram推送通知时,例如

wife:
"buy pizza"

问题1:应用程序是否必须下载/接收本身。这是手机上弹出的横幅必须为自己下载+我的Whatsapp / Telegram必须再为自己下载?

我的朋友回答说:

  

推送通知可以将消息作为有效负载。你的应用可以   提取并动态插入到对话中   提出额外要求 - 我以前做过。让人感觉到   非常快乐。缺点是你无法保证推动   将以正确的顺序(或根本没有)到达。

但我不相信,从语义的角度来看,推送通知本身不应该更新你的应用程序。如果他们这样做会是一种滥用......他们应该通知您的应用更新,然后允许您通过下载任何已提供的新内容自行进行更新。

所以要查看顶级公司及其应用是否正在应用我的朋友建议我使用3个应用(Gmail,WhatsApp,Telegram)进行了一些实验:

我关闭了Wifi,但保留了蜂窝数据,然后我禁用应用程序访问使用移动数据。

enter image description here

然后我有人给我发了一条消息/电子邮件: 以下是我的结果:

电报::我收到提醒(发件人+第一行)。但是一旦我打开应用程序(或点击通知),它就没有我的新消息或任何东西。

但是,如果允许Telegram访问互联网...它会在后台下载消息...即如果我按照序列:我是wifi或没有互联网限制的蜂窝数据 - >收到通知 - >完全关闭互联网,但然后转到应用程序:我会在那里看到完整的消息/正文。

Gmail:我收到提醒(主题/发件人/正文的预览)但是一旦我打开应用程序,它就没有我的新消息或任何内容。

如果允许Gmail应用访问互联网...那么与Telegram相反:只有在打开应用程序本身之前,它才会下载/更新Gmail中的电子邮件。我猜Gmail没有将content-available设置为1,但Telegram将其设置为1

WhatsApp:我什么都没得到。

收到通知后没有互动......只有当应用程序正在下载本身时才会发生。

我的结论是:

收到通知后没有发生任何互动......仅当应用程序正在下载本身时才会发生这种情况。

Gmail和Telegram正在进行冗余下载,基本上不够智能,我的朋友建议或者没有收到电子邮件/消息的风险太大,最好安全一点:thinking_face:< / p>

问题2:这个结论是否正确?

1 个答案:

答案 0 :(得分:4)

首先,下载有效载荷通常不是问题。我想象有效载荷通常非常小(短文本消息可能小于1Kb)。实际上,常规远程有效负载的最大大小为4KB(VoIP通知为5KB)。请参阅Creating the Remote Notification Payload

其次,很难让您的应用访问任何远程通知数据。唯一可行的方法是通过静默通知,不建议用于简单的文本通知。静音通知会唤醒您的应用,并在再次关闭之前在后台执行操作30秒。您可能会发送远程静默通知,导致您的应用程序根据该远程通知手动触发常规本地通知(或同时发送静默和常规远程通知),但同样不推荐使用静默通知:< / p>

  

无声通知并不意味着让您的应用在后台保持清醒,也不是用于高优先级更新。 APN将无声通知视为低优先级,如果总数过多,可能会完全限制其传递。实际限制是动态的,可以根据条件进行更改,但尝试不要每小时发送多个通知。

有关详细信息,请参阅Configuring a Silent Notification

应用可以&#34;下载&#34;的另一种可行方式收到的远程通知在Modifying the Payload of a Remote Notification中有所描述。您只需保存通知并选择不修改它们即可。

对于您的任何一个问题,没有适用于所有应用的通用是/否答案。相反,应用程序可以通过多种不同的方式接收远程通知并处理其数据。

编辑:您还应该实施application(_:didReceiveRemoteNotification:fetchCompletionHandler:)并从通知的用户信息中检索/保存数据,以便在您的应用中更快地获取数据。但是,不保证调用该方法。所以你可以/应该实现它,但更重要的是,让你的应用程序检查你自己的服务器上的新数据,这样就不会遗漏任何内容。