Тихое push-уведомление Paylod для ios для обновления значка элемента панели вкладок с помощью облачной функции Firebase в JavaScript

У меня все push-уведомления работают нормально.

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

Ниже приведен код полезной нагрузки из моей развернутой облачной функции Firebase, написанный на JavaScript, но он не работает. Уведомление отображается, когда приложение находится в фоновом режиме, но для обновления значка элемента панели вкладок не вызываются методы делегата.

Я понимаю, что для включения этого мне нужно добавить флаг content-available в мои полезные данные.

Я включил фоновую выборку и удаленные уведомления для своего приложения и объявил методы делегирования userNotificationCenter willPresent и userNotificationCenter didReceive.

const payload = {
            notification: {
              title: "I'm " + senderName,
              body: notificationBody,
              'content-available' : 1
            },
            data: {
              SENDER_NAME: senderName,
              SENDER_ID: fromId,
              NOTIFICATION: 'invite'

            }//end data
        }//end payload

Прежде всего, вы вообще не отправляете push-уведомление тихий, потому что вам нужно установить content-available : true в качестве свойства полезной нагрузки. И вы должны использовать истинный, а не 1, потому что вы отправляете полезную нагрузку FCM, а не полезную нагрузку APN. Кроме того, вам нужно удалить узел уведомления. Если он молчит, вы не хотите показывать никаких уведомлений, не так ли? Затем вам нужно переопределить метод делегата application:didReceiveRemoteNotification:fetchCompletionHand‌​ler:

shadowsheep 17.12.2018 17:54

Внимательно прочтите док. Тем не менее, обратите внимание на разницу между «фоновым» приложением и «закрытым» приложением. В последнем случае вы не сможете получать тихое уведомление.

shadowsheep 17.12.2018 17:55

спасибо @shadowsheep за ваш отзыв. Мне удалось решить мою проблему с помощью решения, найденного здесь [stackoverflow.com/questions/46058774/…, так как это функция FCM, content_available должен быть указан в options вместо payload

Roggie 18.12.2018 04:19

Итак, я предполагаю, что объект json, который вы разместили в своем вопросе, полностью вводит в заблуждение, потому что он неправильный, и если вы создаете полезную нагрузку с помощью API функции FCM и его структур модели, это наверняка приведет к совершенно другому (под корнями). Если вы используете его, например, с почтальоном, с fcm Rest API, он никогда не будет работать. В любом случае, если вы выполнили свою работу, я предлагаю вам удалить вопрос, который вам больше не нужен. Или ответьте на него, предоставив точный рабочий код, который вы написали, чтобы заставить его работать.

shadowsheep 18.12.2018 05:27

если вы снова обратитесь к моему вопросу, в частности к строке Ниже приведен код полезной нагрузки из моей развернутой облачной функции Firebase, написанный на JavaScript, но он не работает., ясно, что вставленный код был частью функции FCF Javascript и, следовательно, не вводит в заблуждение.

Roggie 18.12.2018 05:31

^^, ладно. А теперь у вас есть рабочий пример. Какая у вас правильная полезная нагрузка JSON?

shadowsheep 18.12.2018 05:33
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
212
1

Ответы 1

Я нашел решение своего вопроса с помощью ссылки на вопрос в соответствии с комментариями выше. Поскольку это функция FCM, content_available следует указывать в options вместо payload.

            const payload = {
                notification: {
                  title: senderName + " sent you a message",
                  body: notificationBody
                },
                data: {
                  SENDER_NAME: senderName,
                  SENDER_ID: fromId,
                  NOTIFICATION: 'message'

                }//end data
            }//end payload

            const options = {
              content_available: true
            }

//send message
        return admin.messaging().sendToDevice(registrationTokens, payload, options).then( response => {

И вы видите, что вы использовали content_available: true, а не 'content-available' : 1, который никак не мог работать. Я знаю это точно, потому что тоже использую беззвучные уведомления. Что касается того, что вы используете FCF, я понял.

shadowsheep 18.12.2018 05:38

согласился, хотя другим ключевым моментом является то, что он должен быть частью options, а не notification.

Roggie 18.12.2018 05:40

Другие вопросы по теме