如果用户禁用它们,如何发送静默推送通知?
Posted
技术标签:
【中文标题】如果用户禁用它们,如何发送静默推送通知?【英文标题】:How to send a silent push notification if the user disables them? 【发布时间】:2016-03-27 18:22:01 【问题描述】:我正在开发一个聊天应用程序,我需要知道何时收到推送通知以使用新消息重新加载对话视图。如果用户允许应用程序将推送通知发送到他的设备(使用通知对话框),则效果很好。但是,如果他在此对话框中点击“否”,则不会执行以下将用户设备令牌注册到我的数据库的代码:
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData)
// Update the OneSignal id for this current installation
oneSignal!.IdsAvailable( (userId, pushToken) in
if (userId != nil)
let installation = PFInstallation.currentInstallation()
installation.setDeviceTokenFromData(deviceToken)
installation.setValue(userId, forKey: "oneSignalId")
installation.saveInBackground()
)
那么,如何获取用户设备令牌,如果他在通知对话框中点击“否”,那么我仍然可以针对他发送静默推送通知?
谢谢!
【问题讨论】:
如果用户不允许来自对话框的推送通知,那么您将无法在他的设备上发送推送通知,除非用户从设置中再次允许 正如@pyro 所说,如果用户禁用了通知,您将无法收到通知。您需要查看 pusher.com 或 Pubsub 之类的内容,以便在不进行轮询的情况下订阅通知。 @max_ 但是如果应用程序不在后台,它将不起作用。不知道whatsapp是怎么做的。 @fraxool 不,因为这一切都是通过套接字而不是 apns 完成的。 @fraxool 查看 sinch.com。它适用于套接字,您可以使用它实现一对一和群聊。易于集成且价格便宜。 【参考方案1】:实际上可以做到,但 OneSignal 不行。
Apple 推送通知确实支持在后台推送,这意味着即使用户不授予对通知的访问权限,它也不会在他收到通知时显示在他的屏幕上。 OneSignal 的问题是系统不会向禁用推送通知的用户发送推送。这意味着您的通知永远不会到达您的应用,因为它永远不会通过 Apple Push Service 发送。
我建议您为此使用其他供应商(顺便说一下,它可以与 Parse-Server 一起使用)。
如果您想在后台获取数据而不是使用推送,我建议您使用“后台获取”,这会不时唤醒您的应用程序并让您运行一些代码来检查是否有任何新内容。
【讨论】:
感谢@Idan 的详细说明!有没有推荐的 OneSignal 供应商? @hyouuu 我确定有一个可以做到,但我还没有检查过这个【参考方案2】:对不起朋友,如果用户在设置中不允许推送通知,则您无法向设备发送苹果推送通知,在这种情况下,您需要按照其他方法来检测数据的变化。
您可以实现套接字。即 UDP 连接,它侦听服务器以获取任何传入消息。您需要在聊天 ViewController 中启动连接,并且如果您收到一个表明有聊天消息的数据包,您可以重新加载数据。还有实时消息服务,例如 xmpp,它有点相同,但通过更多的聊天支持得到了更多改进。 Whatsapp 等聊天服务使用它们。
另一个选项是使用NSTimer
对象每 4 或 5 秒重新加载一次数据。后台调用api,这样用户就不会知道它是否在不断的刷新和更新,如果有新的数据。一旦超出聊天范围,也会使计时器失效。我使用的那个,在聊天视图控制器和对话视图控制器中都使用了相同的技术来调用 api 服务。
【讨论】:
以上是关于如果用户禁用它们,如何发送静默推送通知?的主要内容,如果未能解决你的问题,请参考以下文章
如果应用程序被杀死,则使用 firebase 发送静默推送通知以唤醒应用程序
使用firebase发送静默推送通知,以便在应用程序被杀死时唤醒它