我正在使用聊天应用,我需要知道何时收到推送通知以使用新消息重新加载对话视图。如果用户允许应用程序向其设备发送推送通知(使用通知对话框),它可以正常运行。但是,如果他点击"否"在此对话框中,以下代码将用户设备令牌注册到我的数据库:
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()
}
})
}
然后,如果他点击" No"如何获取用户设备令牌?在通知对话框中,我仍然可以针对他发送无声推送通知吗?
谢谢!
答案 0 :(得分:1)
实际上可以这样做但不能用OneSignal。
Apple推送通知确实支持后台推送,这意味着即使用户没有授予访问通知权限,当他获得通知时也不会在屏幕上显示。 使用OneSignal时,问题是系统不会向已禁用推送通知的用户发送推送。这意味着您的通知将无法访问您的应用,因为它不会通过Apple Push Service发送。
我建议您使用其他供应商(顺便说一下,它适用于Parse-Server)。
如果你想在后台获取数据而不是使用push我建议你使用“后台获取”,这会不时唤醒你的应用程序并让你运行一些代码来检查是否有新的东西。
答案 1 :(得分:-1)
很抱歉,如果用户在设置中不允许推送通知,则无法向设备发送Apple推送通知,在这种情况下,您需要按照其他方法检测数据更改。
您可以实现套接字。即UDP连接,它监听服务器的任何传入消息。您需要在聊天ViewController中启动连接,如果收到指示有聊天消息的数据包,则可以重新加载数据。还有像xmpp这样的实时消息传递服务,它有点相同,但是通过更多的聊天支持得到了更多的改进。像Whatsapp这样的聊天服务使用它们。
另一种选择是使用NSTimer
对象每4或5秒重新加载一次数据。在后台调用api,因此如果有新数据,用户不会知道它会不断刷新和更新。一旦超出聊天范围,也会使计时器失效。我使用的那个,在聊天视图控制器和会话视图控制器中使用相同的技术调用api服务。