#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-уведомлениями, пока приложение активно.
Вы также можете 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