尽管设置正确,推送通知未在后台显示(iOS)

问题描述 投票:0回答:1

当我的 iOS 应用程序处于后台或睡眠模式时,我无法显示推送通知。通知在前台运行良好,但根本不会显示在后台。我已多次验证我的设置,包括通知权限、负载格式和后台模式,但问题仍然存在。

我尝试过的: APNs Payload:后端将以下有效负载发送到APNs:

{
  "mediaDomain": "your_domain",
  "sendTime": "1633024800",
  "chatData": "chat_data_here",
  "time": "1633024800",
  "uuid": "unique_id",
  "senderPublicKey": "public_key",
  "receiverPublicKeyIdentifier": "receiver_id",
  "senderPublicKeyIdentifier": "sender_id",
  "version": "1",
  "chatID": "12345",
  "senderID": "67890",
  "receiverID": "54321",
  "isRetain": "false",
  "type": "chat_message",
  "aps": {
    "alert": {
      "title": "palphone",
      "body": "You have one new message"
    },
    "sound": "default",
    "content-available": 1
  }
}

通知类型:chat_message。 我希望此有效负载显示带有警报和声音的通知,但当应用程序位于后台时它不起作用。 AppDelegate 设置: 我已经在 AppDelegate 中实现了处理推送通知所需的方法:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
    if let type = userInfo["type"] as? String, type == "chat_message" {
        // Process notification
        let content = UNMutableNotificationContent()
        content.title = "New Message"
        content.body = "Check your messages."
        content.sound = .default
        
        let request = UNNotificationRequest(identifier: UUID().uuidString, content: content, trigger: nil)
        UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
    }
    completionHandler(.newData)
}

背景模式: 在签名和功能中启用远程通知后台模式。 通知权限: 我在 didFinishLaunchingWithOptions 中正确请求通知权限:

UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
    if granted {
        DispatchQueue.main.async {
            UIApplication.shared.registerForRemoteNotifications()
        }
    } else {
        print("Notification permission denied.")
    }
}

真机测试: 我正在真实设备上进行测试,通知在后台不起作用,但当应用程序位于前台时它们会起作用。

我的期望: 当应用程序位于后台时,我希望收到带有警报和声音的可见通知,就像它位于前台时一样。

发生了什么: 当应用程序处于后台或睡眠状态时,不会显示任何通知。 didReceiveRemoteNotification 方法也没有被调用。

我的环境: Xcode 版本:16.0。 iOS版本:18.0 设备:iPhone 16 推送通知服务:Firebase/自定义 APN 实施

附加说明: 我检查了 APN 的日志,推送通知已成功发送到设备。它只是没有被显示。 content-available: 1 包含在负载中用于后台处理,但不会触发本地通知。

ios swift push-notification apple-push-notifications
1个回答
0
投票

您的 APNS 有效负载错误。使用以下有效负载。

{
  "mediaDomain": "your_domain",
  "sendTime": "1633024800",
  "chatData": "chat_data_here",
  "time": "1633024800",
  "uuid": "unique_id",
  "senderPublicKey": "public_key",
  "receiverPublicKeyIdentifier": "receiver_id",
  "senderPublicKeyIdentifier": "sender_id",
  "version": "1",
  "chatID": "12345",
  "senderID": "67890",
  "receiverID": "54321",
  "isRetain": "false",
  "type": "chat_message",
  "aps": {
    "alert": {
      "title": "palphone",
      "body": "You have one new message"
    },
    "sound": "default"
  }
}

问题是什么:

由于

"content-available": 1
,您的有效负载充当无声推送。

从有效负载中删除该密钥。

© www.soinside.com 2019 - 2024. All rights reserved.