使用更新的Firebase cloud messaging和swizzling方法,当我的应用程序前景化时,我能够成功地在我的应用程序委托中的didReceiveMemotentification
方法中接收有效负载。但是,我没有收到任何类型的有效负载,并且当我的应用程序处于后台时,didReceiveMemoteNotification
不会被调用,尽管api响应消息已成功发送(见下文)
以下是我发送给FCM api的请求,以触发推送通知https://fcm.googleapis.com/fcm/send
{
"to": "{valid-registration-token}",
"priority":"high", //others suggested setting priority to high would fix, but did not
"notification":{
"body":"Body3",
"title":"test"
}
}
有FCM的回复
{
"multicast_id": 6616533575211076304,
"success": 1,
"failure": 0,
"canonical_ids": 0,
"results": [
{
"message_id": "0:1468906545447775%a4aa0efda4aa0efd"
}
]
}
这是我的appDelegate代码
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
Fabric.with([Crashlytics.self])
FIRApp.configure()
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification),
name: kFIRInstanceIDTokenRefreshNotification, object: nil)
return true
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// Let FCM know about the message for analytics etc.
FIRMessaging.messaging().appDidReceiveMessage(userInfo)
// Print full message.
print("%@", userInfo)
// handle your message
// let localNotification = UILocalNotification()
// localNotification.fireDate = NSDate()
// let notification = userInfo["notification"]!
// localNotification.alertBody = notification["body"] as? String
// localNotification.alertTitle = notification["title"] as? String
// localNotification.timeZone = NSTimeZone()
// application.scheduleLocalNotification(localNotification)
}
func tokenRefreshNotification(notification: NSNotification) {
let refreshedToken = FIRInstanceID.instanceID().token()!
print("InstanceID token: \(refreshedToken)")
LoginVC.registerForPushNotifications()
connectToFcm()
}
//foreground messages
func applicationDidBecomeActive(application: UIApplication) {
connectToFcm()
}
// [START disconnect_from_fcm]
func applicationDidEnterBackground(application: UIApplication) {
FIRMessaging.messaging().disconnect()
print("Disconnected from FCM.")
}
func connectToFcm() {
FIRMessaging.messaging().connectWithCompletion { (error) in
if (error != nil) {
print("Unable to connect with FCM. \(error)")
} else {
print("Connected to FCM.")
}
}
}
}
我在我的应用程序中稍后的流程中调用此代码以请求权限
static func registerForPushNotifications() {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.sharedApplication().registerForRemoteNotifications()
}
由于我能够接收通知,而应用程序是前台,我想这将减轻所有的担忧,我的apns证书没有上传或注册令牌是不正确的。如果不是这样,请评论,我会再去那个兔子洞。可能有一些简单的东西,我忽略了,但我如何让通知出现,而应用程序是背景?谢啦
显然,(尽管使用了应该自动执行的方法swizzling)您仍然必须在Firebase实例上设置APNS令牌。因此,这意味着您还必须使用以下方法实现didCORsterForRemteNOtificationsAnd DeviceToken
方法
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
// set firebase apns token
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Unknown)
}
作为补充说明。使用“优先级”:“高”
对于测试非常有用,因为它会立即发送通知。
我正在使用FCM为我的iOS应用程序创建和发送推送通知。 开发环境: > Xcode 11.3 null 问题: 在遇到问题之前,我设置了我的应用程序,使其能够在应用程序处于后台和前台时接收通知。我对自己非常高兴,我promise了代码。在此之后,我无法在前台或后台接收通知。无论使用的通知是从云消息仪表板还是邮递员发送的,我都收到一个成功的响应但通知从未出现。 起初,我认为我可能已经达到通知配额,
我已经试着调试Firebase推送通知相当长时间了,但没有得到任何运气。我相信我已经正确地设置了临时配置文件和APNs证书。当我不包含方法时 当应用程序从Firebase通知控制台发送时,它会在前台接收通知,因为它会被打印出来,但它不会在后台接收通知。
如果一个主题订阅者在向该主题/订阅者发送推送通知时没有在线,那么他/她的消息会丢失还是当他们在线时才收到消息?
我正在尝试开发一个应用程序,其中服务器必须每5秒向运行该应用程序的所有android设备发送通知。我决定使用(谷歌)Firebse云消息发送通知,所以我首先尝试了指南的示例项目 https://firebase.google.com/docs/notifications/android/console-audience 但我不能让它工作。我遵守了所有的指示。我已经发布了我使用的代码。我也做了档案-
我正在尝试使用Firebase Notification Composer向我的设备发送测试通知。我正在接收FCM令牌并将其打印到我的控制台,然后尝试向该令牌发送通知。 以下是我检查过的内容: 1) 我使用的是iOS 12.4.1 2) 我正在分配消息传递代理 3)我从委托方法接收FCM令牌 4) 我已经验证了通知是通过打印到控制台启用的,当提示我允许通知时,我单击了允许 5) 我已经验证了在Fi
我在ios的应用程序中使用Firebase云消息通知,但当我测试真正的机器时,我发现我无法接收任何推送消息。 我使用ios的Firebase Unity包。我检查了所有的步骤,但我不知道问题出在哪里。 我使用P8APNS文件,即keychain中的开发者标识和推送通知。 在xcode中,我打开了选项(推送通知和后台模式),但它无法接收推送消息、后台或前台。 以如下方式登录xcode控制台: