Я пытаюсь отправить уведомление всем пользователям приложения (на Android), по сути дублируя то, что происходит, когда уведомление отправляется через консоль администратора Firebase. Вот команда CURL, с которой я начинаю:
curl --insecure --header "Авторизация: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Content-Type: application / json" -d "{\" notification \ ": {\" title \ ": \" note -Title \ ", \" body \ ": \" note-Body \ "}}" https://fcm.googleapis.com/fcm/send
Вот этот JSON, разобранный, чтобы вам было удобнее:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
Ответ, который возвращается, состоит всего из двух символов:
к
Вот оно, слово «к». (Заголовки сообщают о 400). Я подозреваю, что это связано с тем, что в моем JSON не указано «кому». Что вообще поставить на «до»? У меня темы не определены, и устройства ни на что не прописались. Тем не менее, они по-прежнему могут получать уведомления из панели администратора Firebase.
Я хочу попробовать пакет JSON «только данные» из-за удивительного ограничения обработки уведомлений Firebase, при котором, если ваше приложение находится на переднем плане, уведомление обрабатывается ВАШИМ обработчиком, но если ваше приложение находится в фоновом режиме, оно получает обрабатывается ВНУТРЕННЕЕ службой Firebase и никогда не передается обработчику уведомлений. По-видимому, это можно обойти, если вы отправите запрос на уведомление через API, но ТОЛЬКО если вы сделаете это только с данными. (Что затем нарушает возможность обработки одного и того же сообщения iOS и Android.) Замена «уведомления» на «данные» в любом из моих JSON не имеет никакого эффекта.
Хорошо, тогда я попытался найти решение здесь: сервер Firebase Java Server для отправки push-уведомления на все устройства, который, как мне кажется, говорит: «Хорошо, хотя уведомления для всех возможны через консоль администратора ... на самом деле это невозможно через API. " Обходной путь состоит в том, чтобы каждый клиент подписался на тему, а затем отправил уведомление в эту тему. Итак, сначала код в onCreate:
FirebaseMessaging.getInstance().subscribeToTopic("allDevices");
затем отправляю новый JSON:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
},
"to":"allDevices"
}
По крайней мере, теперь я получаю реальный ответ от сервера. Ответ JSON:
{
"multicast_id":463numbersnumbers42000,
"success":0,
"failure":1,
"canonical_ids":0,
"results":
[
{
"error":"InvalidRegistration"
}
]
}
И это идет с кодом HTTP 200. Хорошо ... согласно https://firebase.google.com/docs/cloud-messaging/http-server-ref код 200 с "InvalidRegistration" означает проблему с токеном регистрации. . Может быть? Потому что эта часть документации предназначена для сервера обмена сообщениями. Сервер уведомлений такой же? Не понятно. Я вижу в другом месте, что тема может занять несколько часов, прежде чем она станет активной. Похоже, что это сделало бы его бесполезным для создания новых чатов, так что это тоже кажется неправильным.
Я был очень взволнован, когда смог создать приложение с нуля, которое получало бы уведомления всего за несколько часов, хотя раньше я никогда не использовал Firebase. Похоже, ему предстоит пройти долгий путь, прежде чем он достигнет уровня, скажем, документации Stripe.com.
Итог: кто-нибудь знает, какой JSON предоставить для отправки сообщения на все устройства, на которых запущено приложение, для отражения функций консоли администратора?
FirebaseInstanceIdService