当 Firebase 与 Push 框架一起使用时,没有调用 didReceiveRemoteNotification
Posted
技术标签:
【中文标题】当 Firebase 与 Push 框架一起使用时,没有调用 didReceiveRemoteNotification【英文标题】:didReceiveRemoteNotification not called when Firebase is used along with Push framework 【发布时间】:2018-10-29 19:19:46 【问题描述】:我正在使用 Firebase
进行分析,并使用库进行推送通知。当我使用其中任何一个时,都会调用 didReceiveRemoteNotification。但是当我同时使用它们时,didReceiveRemoteNotification 不会被调用。
代码:
didFinishLaunchingWithOptions:
NSString *google_app_id = @"----";
NSString *gcm_sender_id = @"----";
FIROptions *o = [[FIROptions alloc] initWithGoogleAppID:google_app_id GCMSenderID:gcm_sender_id];
o.APIKey = @"----";
o.bundleID = @"----";
o.clientID = @"----";
[FIRApp configureWithOptions:o];
// Initilization of push framework
didReceiveRemoteNotification:
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
// This method is not called when Firebase and push framework are enabled at the same time
// It works fine when only Firebase or only push framework is enabled
NSLog(@"Push: %@", userInfo);
【问题讨论】:
您如何注册接收推送通知? @dudeman :推送框架就是这样做的。他们有他们的后端。当框架初始化时,推送,应用注册推送通知。 在您注册推送通知后,有回调方法让您知道注册是否成功,并为您提供用于发送通知的推送令牌。您是否尝试过注册是否成功?另外,你用他们给你的令牌做什么? @dudeman : 注册肯定成功。我总是收到推送通知。只是push框架和Firebase都没有调用didReceiveRemoteNotification。 你查看过UNUserNotificationCenter developer.apple.com/documentation/usernotifications/… 【参考方案1】:这是因为 Firebase 使用 swizzling 来拦截 AppDelegate 的方法。
您应该在应用的 info.plist 中禁用它:
<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
其实GitHub上有很多关于Push Notification in ios with Firebase的信息。您可能会在那里找到更多问题的答案。
【讨论】:
但这也阻止了 Firebase Analytics。有什么方法可以禁用 Firebase 推送通知? 它是禁用整个分析,还是仅禁用某些事件?也许您可以尝试手动调用它们。 我要求所有分析都由 Firebase 处理,而不是手动处理。 @Nitish,先生,您需要我吗? :D 对不起,我想我无能为力。如果我是你,我会联系 Firebase 支持或手动处理这些事件。 我不是这个意思。但我明白你的意思。谢谢。【参考方案2】:在 Firebase Cloud Messaging 中此方法的文档中说:
如果您在应用运行时收到通知消息 背景,在用户点击之前不会触发此回调 在启动应用程序的通知上。
mb 这个方法只有在你点击启动应用的通知时才会调用?
根据我的经验,我使用以下方法处理推送:
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
withCompletionHandler:(void (^)())completionHandler
如果应用程序处于活动状态,方法获取有关即将到来的推送通知的信息。 在块中,您必须放置常量以显示您的通知:
completionHandler(UNNotificationPresentationOptionAlert);
还有一个:
(void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler
此方法适用于点击推送通知。 Mb 在这里你正在处理移动到一些特殊的屏幕。
希望我的经验有所帮助!
【讨论】:
以上是关于当 Firebase 与 Push 框架一起使用时,没有调用 didReceiveRemoteNotification的主要内容,如果未能解决你的问题,请参考以下文章
当我尝试将 Analytics 与通知一起使用时,Firebase 中没有静态方法 zzUr()
将 Firebase Analytics 与命名的 FirebaseApp 一起使用
与 Firebase 函数一起使用时,Nodemailer 无法正常工作