Я пытаюсь отправить уведомление всем пользователям приложений (на Android), по существу дублируя то, что происходит, когда уведомление отправляется через консоль администратора Firebase. Вот команда CURL, с которой я начинаю:
curl --insecure --header "Авторизация: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" - header "Content-Type: application/json" -d "{\" уведомление \ ": {\" title\ ":\" note-Title \ ",\" body \ ":\" note-Body \ "}}" https://fcm.googleapis.com/fcm/send
Здесь JSON разбирался, чтобы быть проще на ваших глазах:
{
"notification":{
"title":"note-Title",
"body":"note-Body"
}
}
Ответ, который возвращается, состоит всего из двух символов:
к
Что это, слово "to". (Заголовки сообщают о 400) Я подозреваю, что это связано с тем, что у меня нет "на" в моем JSON. Что бы кто-то даже поставил для "к"? У меня нет определенных тем, и устройства не зарегистрировались ни за что. Тем не менее, они все еще могут получать уведомления с панели администратора Firebase.
Я хочу попробовать пакет JSON "только данные" из-за удивительного ограничения обработки уведомлений Firebase, в котором, если ваше приложение находится на переднем плане, уведомление обрабатывается вашим обработчиком, но если ваше приложение находится в фоновом режиме, он обрабатывается INTERNATIONAL службой 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. Ok... согласно https://firebase.google.com/docs/cloud-messaging/http-server-ref код 200 с "InvalidRegistration" означает проблему с регистрационным токеном. Может быть? Поскольку эта часть документации предназначена для сервера обмена сообщениями. Является ли сервер уведомлений одинаковым? Не понятно. Я вижу в другом месте, что эта тема может занять несколько часов до ее активного участия. Похоже, что это создало бы бесполезность для создания новых чатов, так что это тоже кажется.
Я был очень взволнован, когда смог записать приложение с нуля, которое получало уведомления всего за несколько часов, когда я раньше не использовал Firebase. Похоже, что ему предстоит пройти долгий путь, прежде чем он достигнет уровня, скажем, документации Stripe.com.
В нижней части: кто-нибудь знает, что JSON может отправить, чтобы отправить сообщение на все устройства, запускающие приложение, чтобы отразить функциональность консоли администратора?