У меня есть приложение для iOS (Xcode 9 / Swift 4)
, которое использует Firebase Cloud Messaging
для получения silent push notifications
Приложение уже опубликовано, но пользователи iPhone X НЕ получают уведомления
У меня естьТройной проверил все, все обновлено, включая Google Pods FirebaseMessaging (3.0.2)
Приложение моего сервера (c #), которое генерирует автоматические push-уведомления, также использует последнюю версию Google APIs (1.34)
Таким образом, используя приложение, которое генерирует уведомления, чтобы проверить, получают ли iPhone уведомления, я получил следующие результаты:
- iPhone 6S, подключенный к Xcode, получает уведомление
- iPhone 6S, запущенный testflightверсия получает уведомление
- iPhone 6S, работающий в магазине приложений, версия получает уведомление
- iPhone X, подключенный к Xcode, получает уведомление
- iPhone X с запущенной версией testflight НЕ получает
- Версия магазина приложений для iPhone X НЕ получает
И вот худшая часть ... еслиЯ беру токен iPhone X из приложения c # и отправляю сообщение через консоль Firebase, оно будет получено версией testflight (думаю, это доказывает, что токен, на который я отправляю, правильный)
Я знаю, что не предоставляю код, но на самом деле нечего проверять ... все отлично работает на iPhone 6S и даже на iPhone X, когда он привязан к Xcode.
Я думал, что каким-то образом мой серверIP-адрес не доступен с iPhone X, но это не тот случай, так как во время запуска приложения я подключаюсь к серверу и загружаю данные без проблем ... Как будто у iPhone X был какой-то брандмауэр для предотвращения входящих сообщений с моего IP?Даже если я знаю, что у меня есть разрешение на уведомление приложения на iPhone X (я могу отправить сообщение с консоли Firebase), я создал экран журнала внутри приложения и точно знаю, что разрешение включено.
Я что-то пропустил???Есть ли дополнительное разрешение, которое необходимо включить для iPhone X, о котором я не знаю?
РЕДАКТИРОВАТЬ: Версия iPhoneX для iOS = 11.4
EDIT2: Похоже, что по какой-то причине iPhone X требует, чтобы полезная нагрузка содержала "notification: {"title":"xxx", "body":"xxx"}"
, что не имеет смысла, поскольку iPhone 6S может получать тихое push-уведомление без этой добавленной полезной нагрузки ... Проблема теперь заключается в том, что добавление "уведомление "для полезной нагрузки заставит iOS показывать уведомление в трее сразу же после его получения, которое превосходит цель" тихого "уведомления, которое я хочу доставить.
Вот предыдущая полезная нагрузка, которая не работает на iPhoneX, но работает на iPhone 6S (FCM позаботится о добавлении тега content-available
):
{"message": {"token" : "eANw_OLOKXc:APA.....XsMg", "data" : {"content" : "2546|N|495....arg|BATTERY|||||"}}}
А вот тот, который работает с iPhone X, но выдает системное уведомление, ведь я не хочу:
{"message": {"token" : "eANw_OLOKXc:APA.....XsMg", "notification":{"title":"xxx","body":"xxx"},"data" : {"content" : "2546|N|495....arg|BATTERY|||||"}}}
Почему iPhone 6S работает без полезной нагрузки notification
?И как я могу доставить молчаливое уведомление на iPhone X
РЕДАКТИРОВАТЬ 3: Я думаю, что единственным вариантом будет начать новый проект и повторить проблему, так как я застрял ...Я не могу понять, почему при запуске проекта, привязанного к XCode, заставить его работать в iPhone X, но при работе без подключенного USB-кабеля он не получит уведомление.Я забыл упомянуть, что iPhone 6S также установлен на iOS 11.4
РЕДАКТИРОВАТЬ 4: Мне удается получить некоторые журналы непосредственно с iPhone X в момент поступления тихого уведомления:
Jun 26 01:08:46 MP apsd[9726] <Notice>: APSMessageStore - APSIncomingMessageRecordDeleteMessageForGUID <private>
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: Received incoming message on topic com.mydomain.myapp2 at priority 1
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Received remote notification request C752-66DA [ hasAlertContent: 0, hasSound: 0 hasBadge: 0 hasContentAvailable: 1 hasMutableContent: 0 ]
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Deliver push notification request C752-66DA
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Passing content-available push to Duet
Jun 26 01:08:46 MP SpringBoard(DuetActivityScheduler)[9680] <Notice>: SUBMITTING: <private>
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Error>: Ignoring notification with no alert, sound or badge (com.mydomain.myapp2): C752-66DA
Jun 26 01:08:46 MP SpringBoard(UserNotificationsServer)[9680] <Notice>: [com.mydomain.myapp2] Not saving push notification C752-66DA to store [ error=Error Domain=UNErrorDomain Code=1401 "Notification has no user-facing content" UserInfo={NSLocalizedDescription=Notification has no user-facing content} ]
Jun 26 01:08:46 MP dasd(DuetActivitySchedulerDaemon)[9752] <Notice>: Submitted Activity: com.apple.pushLaunch.com.mydomain.myapp2:2AD94B <private>
Jun 26 01:08:46 MP dasd(DuetActivitySchedulerDaemon)[9752] <Notice>: Daemon Canceling Activities: {(
com.apple.pushLaunch.com.mydomain.myapp2:2AD94B
)}
Jun 26 01:08:46 MP dasd(DuetActivitySchedulerDaemon)[9752] <Notice>: CANCELED: com.apple.pushLaunch.com.mydomain.myapp2:2AD94B <private>!
Похоже, что iOS получает уведомление вместе с данными (hasContentAvailable: 1
), но не отправляет его в мое приложение ...
Кроме того, почему эта ошибка: <Error>: Ignoring notification with no alert, sound or badge
... в тихом уведомлении нет оповещения / звука / значка!