远程取消iOS推送通知

5
iOS上的Gmail应用程序能够在应用程序未运行时接收推送通知(与大多数电子邮件应用程序一样)。
但是,即使应用程序未运行,当用户收件箱的未读计数变为零时,它也能够清除设备中的所有Gmail推送通知。
以下是一个示例序列: 1. 在您的Gmail帐户中收到新电子邮件。 2. iOS设备显示新消息的通知。 3. 转到Gmail网站并打开该消息(将该消息标记为“已读”)。 4. iOS设备上的通知被解除。
注意:[[UIApplication sharedApplication] scheduledLocalNotifications]仅提供本地通知,即在iOS应用程序内创建的通知。
就苹果的APNS文档所述,没有办法远程启动应用程序到后台,也没有办法解除远程通知。

那么,Gmail iOS 应用程序是如何实现这一点的?

4个回答

5

我使用Parse推送这个有效负载,成功清除了所有的推送通知。只要提供content-availablebadge,你也应该能够做到同样的效果。我没有在AppDelegate中编写任何其他代码,但我必须在项目目标capabilities中打开推送通知。

curl -X POST \
-H "X-Parse-Application-Id: xxxxxxxxxxx" \
-H "X-Parse-REST-API-Key: xxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
       "data": {
         "content-available": "1",
         "badge":"0",
         "sound":""
       },
       "where": {"something":"something_else"}
     }' \
https://api.parse.com/1/push

你是正确的 - 重要的部分是将徽章设置为0,这将清除所有远程通知。 - ebi

1

0

如果徽章编号已设置,请尝试此操作:

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

或者如果未设置,尝试使用此方法

[[UIApplication sharedApplication] setApplicationIconBadgeNumber:1];
[[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

这将清除您的推送通知和本地通知。


注意 - 这将清除所有通知,包括远程和本地的。 - ebi

0

iOS中有一个“静默推送”功能,允许您的应用在收到无界面推送通知后在后台唤醒并更新自己。

WWDC 2014的Session 713详细描述了这一点:

静默通知只是从您的APNs服务器发送的推送有效负载,而不是像警报、声音或屏幕上的徽章那样呈现用户通知。当iOS接收到该推送时,它将在后台唤醒您的应用程序,以便您的应用程序可以进行一些后台图像处理或信息处理。

在这种情况下,您的应用正在从服务器获取内容。因此,下次用户碰巧点击您的应用程序图标并将其带到前台时,该信息已经准备好了,因此没有人需要等待加载旋转器完成和所有其他东西。


静默推送功能,即“content-available”标志,仅在应用程序已经在前台或后台运行时向其传递通知。但它不会响应通知启动应用程序。 - ebi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接