首页 > 解决方案 > 推送通知正在接收,但在 PubNub 聊天消息中发送时后台获取未使用 pn_apns 标签调用有效负载

问题描述

我使用 PubNub 服务而不是 PubNub 聊天引擎在我的应用程序中设置了一个聊天模块。一切正常,直到推送通知出现。这个应用程序也有安卓版本(不是我建造的)。我能够使用下面提到的payload1接收功能齐全的 Apple 推送通知。但它仅适用于通知方面的 iOS 设备,不适用于为通知添加 GCM 的 Android 设备的通知。

所以我做了一些 RND 并找到了这个链接并使用了下面提到的 Payload2。使用这两个平台都会收到通知。但现在在 iOS 中,通知同时出现在前台和后台应用程序状态。但是下面提到的所有方法都没有调用,现在唯一调用的方法是前台的willPresent。我想知道为什么会这样。Payload或Tag有什么问题吗?请帮助我为此奋斗一周。提前致谢。

payload1 = [
            "aps" : [
                "alert" : [
                    "title" : self.loginUserProfile.firstName,
                    "body" : message],
                "pn_exceptions" : [
                    tokenString
                ],
                "content-available": 1,
                "sound" : "marco_alert.aiff",
                "publisher" : self.loginUserProfile.userId,
                "date" : Date().dateString()]
            ] as [String : Any]
payload2 = [
            "pn_apns":
                [
                    "date": Date().dateString(),
                    "aps":
                        [
                            "sound": "marco_alert.aiff",
                            "alert":
                                [
                                    "title": self.loginUserProfile.firstName,
                                    "body": message
                            ],
                    ],
                    "pn_exceptions": [tokenString],
                    "publisher": self.loginUserProfile.userId,
                    "content-available": 0
            ],
            "pn_gcm": [
                "data": messageString
            ]] as [String : Any]

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) 

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void)```

标签: iosswiftpush-notificationapple-push-notificationspubnub

解决方案


@Ahsan 我想确保我理解您描述的行为:当应用程序在后台时,使用上述有效负载通过 PubNub 发送的通知在 Android 和 iOS 上有效。但是当 iOS 应用程序在前台时,通知只是调用func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)

如果是这样,那是 Apple iOS 官方文档中描述的 Apple iOS 推送通知行为。从历史上看,推送通知旨在用于应用程序活动使用之外的操作,因此此记录的方法是作为一种更新的机制提供的,用于在应用程序处于活动状态时与推送通知进行交互。

Apple 在这里有一个图表,解释了如何响应这个委托方法并导致通知呈现给用户。

您可能还想在UNNotificationPresentationOptions这里查看可用的选择。


推荐阅读