Как отправить уведомление Firebase на все устройства через CURL?Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Как отправить уведомление Firebase на все устройства через CURL?

Сообщение Anonymous »

Я пытаюсь отправить уведомление всем пользователям приложения (на Android), по сути дублируя то, что происходит, когда уведомление отправляется через консоль администратора Firebase. Вот команда CURL, с которой я начинаю:

curl --insecure --header "Авторизация: key=AIzaSyBidmauthkeyisfineL-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"
}
}
Ответ, который возвращается, состоит всего из двух символов:

to
Всё, слово "чтобы". (Заголовки сообщают о 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- ... tp-server- ссылка на код 200 с «InvalidRegistration» означает проблему с регистрационным токеном. Может быть? Потому что эта часть документации предназначена для сервера обмена сообщениями. Сервер уведомлений тот же? Не понятно. Я вижу в другом месте, что тема может занять несколько часов, прежде чем она станет активной. Кажется, что это сделает его бесполезным для создания новых чатов, так что это тоже кажется неправильным.

Я был очень взволнован, когда смог с нуля написать приложение, которое получил уведомления всего за несколько часов, хотя я никогда раньше не использовал Firebase. Похоже, ему предстоит пройти долгий путь, прежде чем он достигнет уровня, скажем, документации Stripe.com.

Итог: кто-нибудь знает, какой JSON предоставить, чтобы отправить сообщение на все устройства, на которых запущено приложение, для отражения функций консоли администратора?>

Подробнее здесь: https://stackoverflow.com/questions/382 ... s-via-curl
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»