iOS FCM推送通知无法在后台快速运行? [英] iOS FCM Push notifications not working in background state in swift?

查看:69
本文介绍了iOS FCM推送通知无法在后台快速运行?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的应用程序中,我实现了FCM推送通知.当通过FCM控制台和pushtry.com网站检查通知时,它工作正常,然后我尝试使用实际的Server API进行前台通知,但是前台通知没有收到,有时却很少收到,并且也没有横幅和声音.请帮忙找出问题所在.

In my application I have implemented FCM push notification. It is working fine When checking notification with FCM console and pushtry.com website, Then I tried with actual Server API the foreground notification works well, But background notification not receiving and sometimes it receives very rarely and that too without banner and sound . Please help to find out the issue.

我在这里附上我要尝试的代码.

Here I attached the code what I am trying..

import UIKit
import UserNotifications
import Firebase

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(_ application: UIApplication,
             didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: 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: {_, _ in })
} else {
    let settings: UIUserNotificationSettings =
        UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
    application.registerUserNotificationSettings(settings)
}

application.registerForRemoteNotifications()
return true
}
func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {

print(userInfo)
}
func applicationDidBecomeActive(_ application: UIApplication)
{
    Messaging.messaging().shouldEstablishDirectChannel = true

    application.applicationIconBadgeNumber = 0;
}

func applicationDidEnterBackground(_ application: UIApplication)
{
    Messaging.messaging().shouldEstablishDirectChannel = false
    print("Disconnected from FCM.")
}
func application(_ application: UIApplication, 
didReceiveRemoteNotification userInfo: [AnyHashable: Any],
             fetchCompletionHandler completionHandler: @escaping 
(UIBackgroundFetchResult) -> Void) {

print(userInfo)

completionHandler(UIBackgroundFetchResult.newData)
}
func application(_ application: UIApplication, 
didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("Unable to register for remote notifications: \ . 
(error.localizedDescription)")
}
func application(_ application: UIApplication, 
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
print("APNs token retrieved: \(deviceToken)")

}
}

@available(iOS 10, *)
extension AppDelegate : UNUserNotificationCenterDelegate {

func userNotificationCenter(_ center: UNUserNotificationCenter,
                        willPresent notification: UNNotification,
                        withCompletionHandler completionHandler: 
@escaping (UNNotificationPresentationOptions) -> Void) {
let userInfo = notification.request.content.userInfo
  print(userInfo)

completionHandler([])
}

func userNotificationCenter(_ center: UNUserNotificationCenter,
                        didReceive response: UNNotificationResponse,
                        withCompletionHandler completionHandler: 
@escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
print(userInfo)

completionHandler()
}
}

extension AppDelegate : MessagingDelegate {
func messaging(_ messaging: Messaging, didRefreshRegistrationToken 
fcmToken: String) {
  print("Firebase registration token: \(fcmToken)")
}
func messaging(_ messaging: Messaging, didReceive remoteMessage: 
MessagingRemoteMessage) {
  print("Received data message: \(remoteMessage.appData)")
}
}

在这里,我共享服务器发送推送通知的请求格式:

Here I share the request format from server for push the notification:

{
"to":"cerGBjsmtzE:APA91bFk- 
 6ZI4ehaWbg0bGSGzAh10NeUh3AcyEFq7dASU7W4YY4WL8vWCA5wav- 
 LTYc0xTGWHev8Z99",
 "priority":"high",
"data":
  {
    "title":"New Inspection scheduled",
    "body":"You have a new Inspection Request scheduled,
    "sound":"default"
  }
}

推荐答案

要在后台模式下接收推送通知,必须有"mutable-content" 键,其值为"1" true 以您的有效载荷格式显示.

To receive the push notification in background mode there must be "mutable-content" key with value "1" or true is present in your payload format.

请告诉您,后端开发人员,添加该密钥.请检查以下有效载荷格式

Please tell you, backend developer, to add that key. Please check following valid payload format

{
   "to": "dWB537Nz1GA:APA91bHIjJ5....",
   "content_available": true,
   "mutable_content": true,

   "data":
   {
      "message": "Offer!",
      "mediaUrl": "https://upload.wikimedia.org/wikipedia/commons/thumb/2/2a/FloorGoban.JPG/1024px-FloorGoban.JPG"
   },

   "notification":
   {
      "body": "Enter your message",
      "sound": "default"
   }
}

您可以参考以下链接 https://firebase.google.com/docs/cloud-messaging/concept-选项

这篇关于iOS FCM推送通知无法在后台快速运行?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆