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

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日

悬赏问题

  • ¥30 arduino vector defined in discarded section `.text' of wiring.c.o (symbol from plugin)
  • ¥20 关于#c++#的问题:(2)运算二叉树·表达式一般由一个运算符和两个操作数组成:(相关搜索:二叉树遍历)
  • ¥20 如何训练大模型在复杂因素组成的系统中求得最优解
  • ¥15 关于#r语言#的问题:在进行倾向性评分匹配时,使用“match it"包提示”错误于eval(family$initialize): y值必需满足0 <= y <= 1“请问在进行PSM时
  • ¥45 求17位带符号原码乘法器verilog代码
  • ¥20 PySide6扩展QLable实现Word一样的图片裁剪框
  • ¥15 matlab数据降噪处理,提高数据的可信度,确保峰值信号的不损失?
  • ¥15 怎么看我在bios每次修改的日志
  • ¥15 python+mysql图书管理系统
  • ¥15 Questasim Error: (vcom-13)