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

Firebase消息传递。iOS应用在后台模式或关闭时不接收通知

史钊
2023-03-14

在后台或关机模式下,我无法让我的应用程序接收通知。我遵循了Firebase指南,了解了如何在我的应用程序中实现Firebase消息传递。以前我使用过GCM(谷歌云消息),它运行得很好,但自从升级到Firebase后,我无法让它工作。一旦启动我的应用程序,我在后台或关机时发送的所有通知(通过firebase控制台通知)都会被发送。

我有:

  • 已在Firebase控制台上创建项目

值得一提的是,我已经通过在我的Info.plist文件中将FirebasApp委托ProxyEnable设置为NO来禁用swizzling。

相关代码:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
  let types: UIUserNotificationType = [UIUserNotificationType.Badge, UIUserNotificationType.Alert, UIUserNotificationType.Sound]
    let settings: UIUserNotificationSettings = UIUserNotificationSettings( forTypes: types, categories: nil )
    application.registerUserNotificationSettings( settings )
    application.registerForRemoteNotifications()

    FIRApp.configure()
}

func connectToFcm() {
    FIRMessaging.messaging().connectWithCompletion { (error) in
        if (error != nil) {
            print("Unable to connect with FCM")
        } else {
            print("Connected to FCM.")
            self.refreshToken()
        }
    }
}

func refreshToken(){
    if let refreshedToken = FIRInstanceID.instanceID().token() {

        gcmToken = refreshedToken

        userDefaults.setValue(gcmToken, forKey: CONSTANTS.GCM_TOKEN)

        if(userDefaults.boolForKey("UserLoggedIn")){
            pushGcmToken() //push the token to server
        }
    }
}

func onTokenRefresh() {
    refreshToken()
    // Connect to FCM since connection may have failed when attempted before having a token.
    connectToFcm()
}

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
    NSLog("didReceiveRemoteNotification \(userInfo)")

    FIRMessaging.messaging().appDidReceiveMessage(userInfo)

    handleRemoteNotification(userInfo)

}

func handleRemoteNotification(userInfo: [NSObject : AnyObject]){
    if let notification = userInfo["notification"] as? [NSObject : AnyObject]{

        let bodyNot = notification["body"] as! String
        var titleNot = "Ändring"
        var category = "UNIFIED_OTHER_CATEGORY"
        if(notification["title"] != nil){
            titleNot = (notification["title"] as! String == "Call" ? "Inkomande samtal" : notification["title"]) as! String
            category = "UNIFIED_CALL_CATEGORY"
        }

        let notis = UILocalNotification()
        notis.alertTitle = titleNot

        notis.alertBody = bodyNot
        notis.soundName = UILocalNotificationDefaultSoundName // play default sound
        notis.userInfo = ["UUID": "122" ] // assign a unique identifier to the notification so that we can retrieve it later
        notis.category = category
        notis.fireDate = NSDate()
        UIApplication.sharedApplication().scheduleLocalNotification(notis)
    }
}

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
    NSLog("didRegisterForRemoteNotificationsWithDeviceToken \(deviceToken)")
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox)
}

我甚至尝试过调酒。同样的事情发生了。我将非常感谢任何帮助或提示到正确的方向。

共有1个答案

楚知
2023-03-14

我配置下面的东西和它的工作罚款为我的应用程序,

info.plist两把钥匙

<key>FIRMessagingAutoRegisterEnabledflag</key>
    <true/>
<key>FirebaseAppDelegateProxyEnabled</key>
    <false/>

测试通知开发模式的代码

[[FIRInstanceID instanceID] setAPNSToken:deviceToken type:FIRInstanceIDAPNSTokenTypeSandbox];

从Firebase控制台下载GoogleService-Info.plist并将其放在应用程序中

 类似资料:
  • 我正在尝试使用Firebase Notification Composer向我的设备发送测试通知。我正在接收FCM令牌并将其打印到我的控制台,然后尝试向该令牌发送通知。 以下是我检查过的内容: 1) 我使用的是iOS 12.4.1 2) 我正在分配消息传递代理 3)我从委托方法接收FCM令牌 4) 我已经验证了通知是通过打印到控制台启用的,当提示我允许通知时,我单击了允许 5) 我已经验证了在Fi

  • 和Firebase响应 {通知:{Title:测试标题,正文:测试通知文本},数据:{orderid:2,click_action:FLUTTER_NOTIFICATION_CLICK,订单名称:farhana}}

  • 我使用FCM向单个iOS设备发送推送通知,触发http请求到Firebase云功能。在遵循FCM和APNs文档之后,当应用程序在后台运行时,一切都正常工作。我在所有情况下都成功地收到了通知。 唯一的问题是:推送通知不会从睡眠中点亮我的锁屏。我仍然收到推送通知,当我按下home按钮手动唤醒设备时,可以看到它。但是通知本身不会唤醒我的设备。 null 我已经打开了“后台模式”功能>同时选择了“远程通知

  • 我可能已经阅读了所有其他与此相关的SO线程,但我找不到答案,而且在Android监视器中也没有日志跟踪。有人对此有提示吗?

  • 我在ios的应用程序中使用Firebase云消息通知,但当我测试真正的机器时,我发现我无法接收任何推送消息。 我使用ios的Firebase Unity包。我检查了所有的步骤,但我不知道问题出在哪里。 我使用P8APNS文件,即keychain中的开发者标识和推送通知。 在xcode中,我打开了选项(推送通知和后台模式),但它无法接收推送消息、后台或前台。 以如下方式登录xcode控制台:

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