iOS端FreshChat与FCM集成问题:onMessageOpenedApp未触发
FreshChat与FCM集成iOS端踩坑:点击带深度链接的推送后onMessageOpenedApp不触发
问题场景
集成FreshChat和Firebase Messaging(FCM)后,发送带深度链接的推送通知时,仅iOS设备出现异常:点击通知后,FCM的onMessageOpenedApp回调完全没触发,Android端正常工作。
问题原因
排查后发现,FreshChat的iOS SDK会拦截推送通知的点击事件,当通知包含深度链接时,FreshChat会优先处理跳转逻辑,直接跳过了FCM的回调触发流程,导致onMessageOpenedApp无法执行。
解决方案
1. 修改iOS端AppDelegate的通知响应方法
在AppDelegate.m或AppDelegate.swift中,调整通知点击的处理逻辑,让FreshChat先处理,再手动触发FCM的消息处理:
Objective-C 示例:
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler { // 交给FreshChat处理通知点击 [[Freshchat sharedInstance] handleRemoteNotificationResponse:response]; // 手动调用FCM的消息处理,触发onMessageOpenedApp NSDictionary *userInfo = response.notification.request.content.userInfo; if (userInfo[@"gcm.message_id"]) { [[FIRMessaging messaging] appDidReceiveMessage:userInfo]; } completionHandler(); }
Swift 示例:
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) { // 处理FreshChat通知 Freshchat.sharedInstance().handleRemoteNotificationResponse(response) // 手动触发FCM回调 let userInfo = response.notification.request.content.userInfo if userInfo["gcm.message_id"] != nil { Messaging.messaging().appDidReceiveMessage(userInfo) } completionHandler() }
2. 确保FCM的回调监听正确注册
以Flutter为例,在main函数中同时监听两种状态下的通知点击:
void main() async { WidgetsFlutterBinding.ensureInitialized(); await Firebase.initializeApp(); // 处理App完全杀死时的通知点击 FirebaseMessaging.instance.getInitialMessage().then((message) { if (message != null) { _handleDeepLink(message.data['deep_link']); } }); // 处理App后台时的通知点击 FirebaseMessaging.onMessageOpenedApp.listen((message) { _handleDeepLink(message.data['deep_link']); }); runApp(const MyApp()); } void _handleDeepLink(String? link) { if (link != null) { // 这里写你的深度链接跳转逻辑 } }
3. 检查深度链接配置
确认iOS端的Universal Links或URL Schemes已正确配置,并且推送通知中传递的深度链接格式符合要求,避免因链接无效导致后续逻辑异常。
总结
这个问题的核心是FreshChat iOS SDK对通知点击事件的拦截优先级高于FCM,通过手动在通知响应方法中调用FCM的消息处理逻辑,就能让onMessageOpenedApp正常触发,同时不影响FreshChat的功能。
内容的提问来源于stack exchange,提问作者StoneyDev
相关产品推荐
相关产品推荐

