当前位置: 首页 > 知识库问答 >
问题:

来自Firebase的通知不再出现在iOS

艾泰
2023-03-14

昨晚,我在我的iOS应用程序中测试了来自Firebase的推送通知,它按预期工作

我能够从at云功能向特定FCM令牌发送通知。使用相同方法时,今天早上的通知不会到达。

云函数

以下是我用来发送通知的函数:

function sendNotification(title: string, body: string, token: string): Promise<void> {
    const message: admin.messaging.Message = {
        apns: {
            headers: {
                'apns-priority': '10'
            },
            payload: {
                aps: {
                    alert: {
                        title: title,
                        body: body,
                    },
                    sound: "default"
                }
            }
        },
        token: token
    }
    return admin.messaging().send(message).then(response => { console.log(`Notification response ${response}`) }).then(justVoid)
}

这里的令牌是我在iOS应用程序中从InstanceId收到的令牌。当触发此功能时,我在Firebase web控制台的云功能日志中看到以下内容:

通知响应项目/项目名称/消息/0:1571998931167276  7d46fcf9fd7ecd

据我所知,这是一个成功的信息。所以我希望此时通知会显示在设备上,但什么都没有。

iOSApp

我按照本指南进行了故障排除,并确信设置正确:https://firebase.google.com/docs/cloud-messaging/ios/first-message?authuser=0

我确实尝试在Im测试的设备上重新安装应用程序:我已经验证了该应用程序在重新安装后是否完成了以下步骤:

>

调用UIApplication.shared.registerForRemoteNotifications()

通过实现:func messaging(_messaging:,didReceiveRegistrationToken fcmToken:)收听更新的FCM令牌

调用:InstanceID. instanceID(). instanceID(handler:)

再次检查iOS设置应用程序中是否允许我的应用程序使用通知。

来自控制台的测试通知

我尝试过使用测试设备最近的FCM令牌从通知编辑器发送测试通知,但此通知也没有显示,并且它不会在屏幕上给我任何反馈通知是否成功发送。

我做错了什么?

对如何调试此问题有任何建议吗?

共有1个答案

佴德曜
2023-03-14

当我们使用推送通知时,调试问题非常困难。

根据我的经验,您的typecriptiOS代码没有任何问题,因为之前它运行良好。以下是消息推送不起作用的可能原因。

通常,与APNS相关的问题是由证书引起的。

>

  • 确保您正在将正确的APNS配置文件上载到firebase控制台以用于开发和发布模式。

    确保您已在功能中启用通知。

    您的项目-

    确保您已将正确的GoogleService-Info.plist添加到
    项目中。

    APNS证书未过期。

    确保您使用的是最新版本的Firebase。

    您的设备时间应该是自动的,而不是功能时间。

    如果您仍然认为这是与代码相关的问题,并且上述解决方案不起作用,那么您可以使用下面的HSAPNSHelper类的包装器类,它是由我创建的,适用于iOS 10和更高版本。

    import Foundation
    import UserNotifications
    import Firebase
    
    class HSAPNSHelper: NSObject {
    
        static let shared = HSAPNSHelper()
        let local_fcm_token = "local_fcm_token"
    
        var notificationID = ""
    
        func registerForPushNotification(application:UIApplication){
    
            FirebaseApp.configure()
    
            self.getFCMToken()
            UNUserNotificationCenter.current().delegate = self
            UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in
                DispatchQueue.main.async {
                    self.getFCMToken()
                }
            }
            application.registerForRemoteNotifications()
        }
    }
    
    
    extension HSAPNSHelper:UNUserNotificationCenterDelegate {
    
        fileprivate func getFCMToken() {
            InstanceID.instanceID().instanceID(handler: { (result, error) in
                if error == nil, let fcmToken = result?.token{
                    print("FCM Token HS: \(fcmToken)")
                    UserDefaults.standard.set(fcmToken, forKey: self.local_fcm_token)
                }
            })
        }
    
        func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
            print("didFailToRegisterForRemoteNotificationsWithError : \(error)")
        }
    
        func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    
            var token = ""
            for i in 0..<deviceToken.count {
                token = token + String(format: "%02.2hhx", arguments: [deviceToken[i]])
            }
            Messaging.messaging().apnsToken = deviceToken
            getFCMToken()
        }
    
        @available(iOS 10.0, *)
        func userNotificationCenter(_ center: UNUserNotificationCenter,
                                    willPresent notification: UNNotification,
                                    withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
    
            let userInfo = notification.request.content.userInfo as! [String: Any]
            print(userInfo)
            completionHandler([.alert, .badge, .sound])
        }
    
        @available(iOS 10.0, *)
        func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
            let userInfo = response.notification.request.content.userInfo
            print(userInfo)
            self.notificationRedirection()
        }
    
        private func notificationRedirection(){
    
        }
    
        func fcmToken() -> String{
            return UserDefaults.standard.string(forKey:local_fcm_token) ?? ""
        }
    }
    
      func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
            //For Push notification implementation
            HSAPNSHelper.shared.registerForPushNotification(application: application)
            return true
        }
    

    使用fcmToken()获取当前FCM令牌。

  •  类似资料:
    • 问题内容: 我是Firebase的新手,我的Java应用程序尝试使用客户端的Firebase令牌发送通知/消息时,遇到了错误,例如发送者ID不匹配和HTTP状态为401的身份验证错误。请注意,使用Firebase控制台,我可以将消息发送到客户端。 对于客户端应用程序,我执行了以下操作: 从此处克隆了Firebase 快速入门应用程序-https : //github.com/firebase/qu

    • 我是Firebase新手,当我的Java应用程序尝试使用客户端的Firebase令牌发送通知/消息时,我遇到了一些错误,例如发送者id不匹配和HTTP状态401的身份验证错误。请注意,使用Firebase控制台,我能够将消息发送到客户端。 对于客户端应用程序,我执行了以下操作: 从这里克隆Firebase快速入门应用--https://github.com/firebase/quickstart-

    • 我试图在我正在开发的Cordova应用程序中获得推送通知。它们在Android应用程序中工作得很好,在iOS应用程序中,当应用程序处于前台时,它们也工作得很好,但当应用程序处于后台或终止时,我不会收到任何通知。 我启用了“推送通知”和“后台模式-远程通知”功能: 我100%肯定服务器有设备令牌(因为推送通知在前台工作,我可以在数据库中看到它)。 如果我在应用程序应该收到通知后启动它或将它带到前台,

    • 问题内容: 我正在尝试在收到C2DM消息时显示一个简单的通知。服务提供给UI,但仍在主线程上运行。我见过有人声称您可以通过服务创建和显示通知。 } 我不知道为什么会抛出该异常。 问题答案: 首先,引发异常是因为创建的通知没有引用该对象的视图对象(contentView属性设置为null)。您必须在显示通知之前调用setLatestEventInfo。 其次,不赞成使用您使用的构造函数。请使用Not

    • 我需要帮助。Firebase通知在后台不工作。这是我的代码:

    • 我正在尝试向Xamarin添加推送通知。使用本教程的iOS应用程序https://docs.microsoft.com/en-us/azure/notification-hubs/xamarin-notification-hubs-ios-push-notification-apns-get-started 我已经按原样完成了所有步骤,以下是我迄今为止尝试的步骤:- AppDelegate。反恐精