gmail 应用程序如何处理 iOS 中的推送通知?
How does the gmail app handle push notifications in iOS?
我正在尝试在 iOS 上复制 gmail 对推送通知的处理。我正在查看两种行为:
- 当一封新邮件发送到我的收件箱时,我会收到一条新通知,徽章编号也会相应增加。
- 当我 read/delete 在 gmail 网站上发送电子邮件时,徽章编号会相应减少 - 尽管通知并没有像在 Android 上那样被删除。
虽然第一个非常简单,但第二个真正让我感到困惑,特别是考虑到即使在我终止 gmail 应用程序 and/or 重新启动设备后也会发生这种情况。
根据我 read/experimented 的说法,当应用程序不是 运行 时,它只能接收必须包含显示通知的远程消息。这些可以通过实施 UNNotificationServiceExtension
来拦截和修改,但最终 必须 向用户显示通知,否则系统将负责执行此操作。
所以我的问题是,当 gmail 应用程序没有收到邮件时,它使用什么技巧来接收邮件 运行 以及它如何防止这些邮件最终出现在系统托盘中?
我终于找到了解决办法。我正在使用 FCM,所以诀窍是发送一个包含 notification
对象的消息负载。 notification
对象应该只包含 badge
值。这将导致更新徽章而不在通知托盘中显示任何内容。
但是请务必注意,此消息不能由应用 intercepted/modified(也不能由 UINotificationExtension
)发送,因此应牢记以下几点:
需要在服务器端跟踪正确的徽章编号。
向此消息传递数据可能是徒劳的,因为它会丢失。
不能将其用作在应用程序中执行任何操作的触发器。
只有当徽章编号达到 0 时,这才是真正有用的删除应用程序所有通知的方法。
我正在尝试在 iOS 上复制 gmail 对推送通知的处理。我正在查看两种行为:
- 当一封新邮件发送到我的收件箱时,我会收到一条新通知,徽章编号也会相应增加。
- 当我 read/delete 在 gmail 网站上发送电子邮件时,徽章编号会相应减少 - 尽管通知并没有像在 Android 上那样被删除。
虽然第一个非常简单,但第二个真正让我感到困惑,特别是考虑到即使在我终止 gmail 应用程序 and/or 重新启动设备后也会发生这种情况。
根据我 read/experimented 的说法,当应用程序不是 运行 时,它只能接收必须包含显示通知的远程消息。这些可以通过实施 UNNotificationServiceExtension
来拦截和修改,但最终 必须 向用户显示通知,否则系统将负责执行此操作。
所以我的问题是,当 gmail 应用程序没有收到邮件时,它使用什么技巧来接收邮件 运行 以及它如何防止这些邮件最终出现在系统托盘中?
我终于找到了解决办法。我正在使用 FCM,所以诀窍是发送一个包含 notification
对象的消息负载。 notification
对象应该只包含 badge
值。这将导致更新徽章而不在通知托盘中显示任何内容。
但是请务必注意,此消息不能由应用 intercepted/modified(也不能由 UINotificationExtension
)发送,因此应牢记以下几点:
需要在服务器端跟踪正确的徽章编号。
向此消息传递数据可能是徒劳的,因为它会丢失。
不能将其用作在应用程序中执行任何操作的触发器。
只有当徽章编号达到 0 时,这才是真正有用的删除应用程序所有通知的方法。