我通过didReceiveRegistrationToken
委托函数接收到有效令牌,然后将该令牌发送到Firebase实时数据库中(如果已更改):
extension AppDelegate: MessagingDelegate
{
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String)
{
Database.database().reference().child("users").child(currentIdentifierForVendor).setValue(["token": token, "timestamp": NSDate().timeIntervalSince1970])
}
}
本质上,我只是在中间进行了两次检查,以确保在未更改的情况下不会再次发送邮件。
这很好,我收到的令牌是
dTzNSffBPk4:APA91bFtxSA-32-NsSIgoY9U9Vt115dhKipVV4dXH8pfWXYgyAvKNzDvfeSZNA-meLBLImoTQd4XICiYrymotzFo9vsTZUZgX8WdYEtT88WWKYKTK8T
我通过firebase函数发送通知,该函数返回消息传递服务认为无效的令牌列表。
这可以在短时间内完美运行,但是在短短几个小时(<12)之后,消息反馈服务开始说此令牌无效。
我已经建立了一种强制将令牌上载到实时数据库并通过Messaging.messaging().fcmToken
检索令牌,返回并再次上载相同令牌的方式。
如果我从令牌的开头删除了dTzNSffBPk4:
,则消息传递服务不再认为它无效,但是仍然没有收到推送通知。
什么可能导致这种行为?
注意:
didFinishLaunchingWithOptions
中配置和设置Firebase委托UNUserNotificationCenter
中设置了applicationDidBecomeActive
代表applicationDidBecomeActive
中请求通知权限