У меня все 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
Внимательно прочтите док. Тем не менее, обратите внимание на разницу между «фоновым» приложением и «закрытым» приложением. В последнем случае вы не сможете получать тихое уведомление.
спасибо @shadowsheep за ваш отзыв. Мне удалось решить мою проблему с помощью решения, найденного здесь [stackoverflow.com/questions/46058774/…, так как это функция FCM, content_available
должен быть указан в options
вместо payload
Итак, я предполагаю, что объект json, который вы разместили в своем вопросе, полностью вводит в заблуждение, потому что он неправильный, и если вы создаете полезную нагрузку с помощью API функции FCM и его структур модели, это наверняка приведет к совершенно другому (под корнями). Если вы используете его, например, с почтальоном, с fcm Rest API, он никогда не будет работать. В любом случае, если вы выполнили свою работу, я предлагаю вам удалить вопрос, который вам больше не нужен. Или ответьте на него, предоставив точный рабочий код, который вы написали, чтобы заставить его работать.
если вы снова обратитесь к моему вопросу, в частности к строке Ниже приведен код полезной нагрузки из моей развернутой облачной функции Firebase, написанный на JavaScript, но он не работает., ясно, что вставленный код был частью функции FCF Javascript и, следовательно, не вводит в заблуждение.
^^, ладно. А теперь у вас есть рабочий пример. Какая у вас правильная полезная нагрузка JSON?
Я нашел решение своего вопроса с помощью ссылки на вопрос в соответствии с комментариями выше. Поскольку это функция 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, я понял.
согласился, хотя другим ключевым моментом является то, что он должен быть частью options
, а не notification
.
Прежде всего, вы вообще не отправляете push-уведомление тихий, потому что вам нужно установить
content-available : true
в качестве свойства полезной нагрузки. И вы должны использовать истинный, а не 1, потому что вы отправляете полезную нагрузку FCM, а не полезную нагрузку APN. Кроме того, вам нужно удалить узел уведомления. Если он молчит, вы не хотите показывать никаких уведомлений, не так ли? Затем вам нужно переопределить метод делегатаapplication:didReceiveRemoteNotification:fetchCompletionHandler: