【问题标题】:Dismissing iOS push notifications remotely远程关闭 iOS 推送通知
【发布时间】:2015-04-17 12:50:59
【问题描述】:

iOS 版 Gmail 应用能够在应用未运行时接收推送通知(与大多数电子邮件应用一样)。

但是,当用户收件箱的未读计数变为零时,它也能够清除设备中的所有 Gmail 推送通知,即使应用程序没有运行

这是一个示例序列: 1. 在您的 Gmail 帐户中接收新电子邮件。 2. iOS 设备显示新消息通知。 3. 转到 Gmail 网站并打开邮件(将邮件标记为“已读”)。 4. iOS 设备上的通知被关闭。

注意:[[UIApplication sharedApplication] scheduledLocalNotifications] 仅提供本地通知,即在 iOS 应用程序本身中创建的通知。

就 Apple 的documentation for APNS 所描述的,没有办法remotely launch an app into the background,也没有办法关闭远程通知。

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

【问题讨论】:

    标签: objective-c iphone push-notification apple-push-notifications


    【解决方案1】:

    我还可以通过使用 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,这会清除所有远程通知。
    【解决方案2】:

    iOS 中有一个“静默推送”功能,可让您的应用在收到无 UI 推送通知后在后台唤醒并更新自身。

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

    静默通知,它们只是从 您的 APNs 服务器,而不是像 屏幕上的警报或声音或徽章,iOS,当它收到 该推送将改为在后台唤醒您的应用程序,以便 你的应用可以做一些背景图像处理或信息 处理。

    在这种情况下,您的应用正在从服务器获取内容。在这种情况下, 您的应用正在从服务器获取内容,以便下次 用户碰巧点击了您的应用程序图标并将其置于前台, 该信息已准备就绪,因此无需等待 加载微调器以完成所有其他内容。

    【讨论】:

    • 静默推送功能,即“content-available”标志,仅在应用程序已在前台或后台运行时才向应用程序发送通知。但它不会启动应用程序以响应通知。
    【解决方案3】:

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

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];
    

    如果没有设置就试试这个

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

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

    【讨论】:

    • 注意 - 这将清除所有远程和本地通知。
    【解决方案4】:

    @styler1972 的解决方案适用于批量推送通知删除。如果要删除特定的,请按照此操作。

    要远程删除特定的推送通知 (PN),您需要将该 PN 的通用 apns-collapse-id 存储在数据库中。当您想删除它时,只需send another silent push notification with the same apns-collapse-id

    To know how to send silent push notification in iOS.

    【讨论】:

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