我正在使用 firebase 进行推送通知。并且我的“didReceiveRemoteNotification”函数没有被调用

Posted

技术标签:

【中文标题】我正在使用 firebase 进行推送通知。并且我的“didReceiveRemoteNotification”函数没有被调用【英文标题】:I am working on push notification with firebase. and my "didReceiveRemoteNotification" function is not called 【发布时间】:2018-05-11 09:35:04 【问题描述】:

。我不知道为什么我的函数没有被调用,并且在控制台中也没有收到有效负载数据。请解决我的问题。提前致谢。

**Here is my code:**
    FirebaseApp.configure()
        Messaging.messaging().shouldEstablishDirectChannel = true

        // [START register_for_notifications]
    if #available(ios 10.0, *) 
        // For iOS 10 display notification (sent via APNS)
        UNUserNotificationCenter.current().delegate = self

        let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
        UNUserNotificationCenter.current().requestAuthorization(
            options: authOptions,
            completionHandler: _, _ in )
     else 
        let settings: UIUserNotificationSettings =
            UIUserNotificationSettings(types: [.alert, .badge, .sound], 
categories: nil)
        application.registerUserNotificationSettings(settings)
    

    application.registerForRemoteNotifications()

    // [END register_for_notifications]
    // Add observer for InstanceID token refresh callback.
    NotificationCenter.default
        .addObserver(self, selector: 
#selector(AppDelegate.tokenRefreshNotification),
                     name: NSNotification.Name.InstanceIDTokenRefresh, 
object: nil)

 @objc func tokenRefreshNotification(_ notification: UIViewController)
    
        Messaging.messaging().subscribe(toTopic: "Testing")
    

func application(_ application: UIApplication, didReceiveRemoteNotification 
userInfo: [AnyHashable : Any])

    print("userInfo\(userInfo)")

【问题讨论】:

你看到这个链接了吗? ***.com/questions/40280986/… 这不起作用。请提供有关控制台中未接收有效负载数据的原因的其他信息。 #Manish Mahajan @SanpreetSingh 你在模拟器上测试吗? 没有在真机上测试。 #Khushbhu 【参考方案1】:

导入用户通知

在 didFinishLaunchingWithOptions 中

 if #available(iOS 10, *) 
        UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]) (granted, error) in 
        application.registerForRemoteNotifications()
     else 
        application.registerForRemoteNotifications(matching: [.badge, .sound, .alert])
    
    let center = UNUserNotificationCenter.current()
    center.delegate = self
    center.requestAuthorization(options:[.badge, .alert, .sound])  (granted, error) in
        // Enable or disable features based on authorization.
    
    application.registerForRemoteNotifications()
    registerForPushNotifications(application: application)

//MARK: pushNotifications 方法:

func registerForPushNotifications(application: UIApplication) 
    if #available(iOS 10.0, *)
        UNUserNotificationCenter.current().delegate = self
        UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .sound, .alert], completionHandler: (granted, error) in
            if (granted) 
                UIApplication.shared.registerForRemoteNotifications()
             else
                //Do stuff if unsuccessful...
            
        )
     else  //If user is not on iOS 10 use the old methods we've been using


    

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) 
    print(response.notification.request.content.userInfo)
    let dic = response.notification.request.content.userInfo as NSDictionary
    if let aps = dic["aps"] as? [String: Any] 
        print(aps)
    

func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) 
    completionHandler([.alert, .badge, .sound])
    print(notification.request.content.userInfo)
    let dic = notification.request.content.userInfo as NSDictionary
    if let aps = dic["aps"] as? [String: Any] 
        print(aps)

    

func application(_ application: UIApplication, didReceiveRemoteNotification data: [AnyHashable : Any]) 
    // Print notification payload data
    print("Push notification received: \(data)")

【讨论】:

【参考方案2】:

尝试使用didreceiveremotenotification completionhandler 方法。不要忘记在项目设置部分的功能选项卡中启用推送通知功能。

【讨论】:

以上是关于我正在使用 firebase 进行推送通知。并且我的“didReceiveRemoteNotification”函数没有被调用的主要内容,如果未能解决你的问题,请参考以下文章

部署 Firebase 推送通知功能时出错

使用 Firebase Analytics 事件记录 OneSignal 推送通知

TestFlight 后无法从 Firebase 获得推送通知

Ionic Firebase 推送通知问题

Firebase 推送通知的打开率显示没有数据

使用 API 时 Firebase API 不发送推送通知