Я намагаюся надіслати сповіщення всім користувачам додатків (на Android), по суті дублюючи те, що відбувається, коли сповіщення надсилається через консоль адміністратора Firebase. Ось команда CURL, з якої я починаю:
curl --insecure --header "Авторизація: key = AIzaSyBidmyauthkeyisfineL-6NcJxj-1JUvEM" --header "Тип вмісту: application / json" -d "{\" сповіщення \ ": {\" title \ ": \" примітка -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