Push-уведомление получено, но фоновая выборка не вызывается с тегом pn_apns при отправке полезной нагрузки сообщения в чате PubNub

#ios #swift #push-notification #apple-push-notifications #pubnub

#iOS #swift #push-уведомление #apple-push-уведомления #pubnub

Вопрос:

Я настроил модуль чата в своем приложении, используя службу PubNub, а не механизм чата PubNub. Все работает нормально, пока не появятся push-уведомления. У этого приложения также есть версия для Android (не созданная мной). Я смог получить полностью функциональное Push-уведомление Apple, используя payload1, упомянутый ниже. Но это работает только для устройств iOS с точки зрения уведомлений, никаких уведомлений для устройства Android, для которого добавлен GCM для уведомления.

Итак, я сделал некоторый RND и нашел эту ссылку и использовал Payload2, упомянутый ниже. Используя это, обе платформы получают уведомления. Но теперь в iOS уведомление появляется как на переднем плане, так и в фоновом режиме приложения. но все перечисленные ниже методы не вызываются, единственный метод, который сейчас вызывается, — это willPresent на переднем плане. Я хочу знать, почему это. Что-то не так с полезной нагрузкой или тегом или что? Пожалуйста, помогите мне неделю бороться за это. Заранее спасибо.

 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)```
  

Комментарии:

1. Пожалуйста, не мучайтесь неделю, а обратитесь в службу поддержки PubNub , если у вас возникла проблема. Мы работаем быстро и эффективно 😉 Можете ли вы включить ведение журнала как в приложении публикации, так и в приложении получения push-уведомлений, воспроизвести проблему и отправить журналы в службу поддержки PubNub? Пожалуйста, укажите эту ссылку SO в обращении в службу поддержки, чтобы мы могли ответить и здесь.

2. Спасибо за ваш ответ. Да, журналы включены. Я демонстративно связываюсь с PubNub сейчас. Большое спасибо.

3. Я ждал 2 дня, но не нашел ни одного технического специалиста. можете ли вы помочь мне с этим. @крейг Коновер

4. Я только что ответил на ваш запрос. Бесплатная поддержка в выходные? Извините за задержку, мы ответим как можно скорее.

5. Ну, я уже упоминал, что учетная запись, над которой я работаю, не является бесплатной, она платная. пожалуйста, просмотрите еще раз.

Ответ №1:

@Ahsan Я хочу убедиться, что понимаю поведение, которое вы описываете: уведомления, отправленные через PubNub с использованием указанных выше полезных нагрузок, работают на Android и iOS, когда приложение работает в фоновом режиме. Но когда приложение iOS находится на переднем плане, уведомления только вызываются func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler:
@escaping (UNNotificationPresentationOptions) -> Void)
?

Если это так, это ожидаемое поведение push-уведомлений Apple iOS, как описано в официальных документах Apple iOS. Исторически push-уведомления предназначались для действий вне активного использования приложений, поэтому этот документированный метод предоставляется как более новый механизм взаимодействия с push-уведомлениями, пока приложение активно.

У Apple здесь есть схема, объясняющая, как реагировать на этот метод делегирования и вызывать представление уведомления пользователю.

Вы также можете UNNotificationPresentationOptions ознакомиться с доступными вариантами здесь.

Комментарии:

1. Я думаю, вы здесь перепутали, уведомления, отправленные через PubNub с использованием указанных выше полезных нагрузок, работают на Android и на iOS, когда приложение работает в фоновом режиме. На самом деле уведомления, отправляемые через PubNub с использованием указанных выше полезных нагрузок, работают на Android и iOS, когда приложение находится как на переднем, так и на заднем плане, но никакие фоновые методы, о которых я упоминал выше, не вызываются. будет отображаться только то, что, как вы упомянули, вызывается на переднем плане.

2. Как указывает @gurooj, именно так работает iOS PushKit. Казалось бы, в iOS PushKit (AFAICT) все изменилось, и вам просто нужно реализовать соответствующий код в willPresent и didReceive , как требуется. При этом это не проблема PubNub, потому что это не API PubNub. Но если вы найдете что-либо в домене PubNub, что может помочь в реализации / настройке, мы все слушаем.

3. Кроме того, Push Kit специально предназначен для уведомлений VoIP, а не простых push-уведомлений. Для этого используйте UNNotificationPresentationOptions , как указано @gurooj