应用程序在后台时不显示推送通知

Posted

技术标签:

【中文标题】应用程序在后台时不显示推送通知【英文标题】:Push notification not displaying when app is in background 【发布时间】:2016-12-09 15:09:13 【问题描述】:

我正在尝试在我的 ios 应用中实现 Firebase 推送通知,但无法弄清楚当应用处于后台时如何接收通知。

我使用 print 来显示通知,但它只在应用程序打开时打印通知。如果我在应用程序处于后台时发送通知,则不会发生任何事情,但会在我重新打开应用程序后立即打印消息。

下面是我的 AppDelegate 代码

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool 

    registerForPushNotifications(application)
    FIRApp.configure()

    // Add observer for InstanceID token refresh callback.
    NSNotificationCenter
        .defaultCenter()
        .addObserver(self, selector: #selector(AppDelegate.tokenRefreshNotificaiton),
                     name: kFIRInstanceIDTokenRefreshNotification, object: nil)

    // Override point for customization after application launch.
    return true


func registerForPushNotifications(application: UIApplication) 
    let settings: UIUserNotificationSettings =
        UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
    application.registerUserNotificationSettings(settings)
    application.registerForRemoteNotifications()



func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) 
    sendNotification();

    print("===== didReceiveRemoteNotification ===== %@", userInfo)





func tokenRefreshNotificaiton(notification: NSNotification) 
    let refreshedToken = FIRInstanceID.instanceID().token()!
    print("InstanceID token: \(refreshedToken)")
    connectToFcm()


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

func sendNotification() 
    let notification = UILocalNotification()
    let dict:NSDictionary = ["ID" : "your ID goes here"]
    notification.userInfo = dict as! [String : String]
    notification.alertBody = "title"
    notification.alertAction = "Open"
    notification.fireDate = NSDate()
    UIApplication.sharedApplication().scheduleLocalNotification(notification)






我也添加到了我的 info.plist

<key>FirebaseAppDelegateProxyEnabled</key>
<false/>
<key>UIBackgroundModes</key>
<array>
    <string>remote-notification</string>
</array>

这是我发送消息的格式


  "to" : "",
  "notification" : 
  "body" : "",
  "title" : "",
,
  "content_available": true,
  "priority": "high"

【问题讨论】:

我不知道这是否是一个 firebase 有效载荷(它被 firebase 转换为一个苹果有效载荷)。但是 app payload 中的 apple 关键字是 content-available,而不是 content_available。 【参考方案1】:

当您的应用关闭时,您无法收到推送通知数据。您应该将消息存储到服务器,而不是用户从那里访问消息

【讨论】:

应用在后台时可以显示通知吗? 是的,您可以在应用处于后台时显示推送通知 你能解释一下我必须对应用程序和上面的代码做什么,因为它似乎不起作用。谢谢【参考方案2】:

验证项目设置和“功能”是否正确配置

【讨论】:

是的,它配置正确但仍然无法正常工作。谢谢。 开启后台抓取功能

以上是关于应用程序在后台时不显示推送通知的主要内容,如果未能解决你的问题,请参考以下文章

Flutter IOS 通知的 FCM 在应用程序处于后台或终止时不显示

打开 PWA 时收到推送事件时不显示通知

应用程序完全关闭时不出现 Android 推送通知(使用 node-gcm)

推送通知在应用程序运行时不起作用(活动)[重复]

[Firebase 消息传递]:应用程序在后台时不调用后台消息处理程序方法?

Xamarin.Android FCM 通知在应用程序关闭/后台时不显示在 HUD 中