周末不想在家 2024-05-23 10:56 采纳率: 5.7%
浏览 95

ios 集成Firebase推送 收不到消息

ios 集成Firebase推送后刚开始收不到消息,等一段时间才能收到推送,是为什么?

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-05-23 10:56
    关注

    引自免费微信小程序:皆我百晓生

    在集成 Firebase 云消息推送(FCM)到 iOS 应用程序时,遇到开始时接收不到通知,但过了一段时间后能接收到的情况,可能是由于以下几个原因导致的:

    1. 证书配置不正确:确保您已经正确地配置了 APNs 证书、Provisioning Profile 和 Firebase 的相关设置。
    2. 应用未注册到 FCM:检查您的应用程序是否在启动时成功注册到了 FCM。
    3. 后台模式限制:iOS 在后台模式下对推送通知有严格的限制,可能会影响即时接收。
    4. 设备连接状态:有时候设备与 FCM 服务器之间的连接可能不稳定。

    为了解决这个问题,您可以按照以下步骤进行排查:

    1. 检查证书配置

    • 确保已创建并安装了有效的 Apple Push Notification Service (APNs) 证书。
    • 更新 Xcode 中的 Provisioning Profile,并确保包含了 APNs 设置。
    • 在 Firebase 控制台中,确认已正确设置了 APNs 证书。

    2. 确保应用注册到 FCM

    AppDelegate.swift 文件中的 didFinishLaunchingWithOptions 方法内添加以下代码,确保应用在启动时注册到 FCM:

    import Firebase
    
    // ...
    
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // ...
        
        FirebaseApp.configure()
        
        Messaging.messaging().delegate = self
        
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().delegate = self
            let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
            UNUserNotificationCenter.current().requestAuthorization(options: authOptions, completionHandler: { granted, error in
                DispatchQueue.main.async {
                    if let error = error {
                        print("UNUserNotificationCenter requestAuthorization error: \(error.localizedDescription)")
                    } else {
                        UIApplication.shared.registerForRemoteNotifications()
                    }
                }
            })
        } else {
            let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
            UIApplication.shared.registerUserNotificationSettings(settings)
            UIApplication.shared.registerForRemoteNotifications()
        }
    
        return true
    }
    

    3. 处理应用生命周期事件

    确保实现 MessagingDelegateUNUserNotificationCenterDelegate 协议的方法,以便正确处理应用的生命周期事件:

    extension AppDelegate: MessagingDelegate, UNUserNotificationCenterDelegate {
    
        func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
            guard let token = fcmToken else { return }
            print("FCM registration token: \(token)")
    
            // 将令牌发送到您的服务器或存储起来用于后续操作
        }
    
        // iOS 10+ support
        func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
            completionHandler([.alert, .sound])
        }
    
        func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
            // Handle the received notification here
            completionHandler()
        }
    }
    

    4. 检查网络连接和设备设置

    确保您的设备可以正常上网,且已允许应用接收通知。进入设备的“设置”->“[您的应用名称]”->“通知”,确保通知权限被开启。

    5. 清除并重新安装应用

    这一步不是必需的,但如果以上方法都无效,可以尝试清除应用数据或完全卸载并重新安装应用,确保所有配置都是最新的。

    如果问题仍然存在,请查看 Firebase 控制台的日志,它们可能会提供有关错误的更多信息。此外,也可以考虑在应用中添加调试日志,以跟踪 FCM 注册过程和通知接收情况。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月23日