Я использую Firebase API с использованием php и отправляю данные постов в формате JSON. Ответ дает мне message_id
но сообщение не доставляется.
Когда я использовал Firebase Console вместо API с теми же полями, он был успешно доставлен.
Мой php код:
<?php
$json_data = '{ "data": {
"title": "Hey you got a message",
"text": "Hi from firebase api"},
"to": "/topics/all",
"priority": "high"}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://fcm.googleapis.com/fcm/send');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Authorization:key="Used my server key here"'
));
curl_setopt($ch, CURLOPT_POSTFIELDS, $json_data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
?>
Отклик:
{"message_id":64666973642901*****}
PS: использовали звездочки, чтобы скрыть информацию.
ОБНОВИТЬ:
Сообщение доставляется, когда я установил to
поле для конкретного токена. Но не работает, когда установлено topics/all
,
Есть ли другой способ отправить его всем тем, кто связан с приложением, как в консоли?
Я наконец узнал. Сначала наше приложение не будет содержать никаких тем, и мы должны создать их явно.
Используйте следующий метод в вашем приложении, чтобы подписаться на тему
FirebaseMessaging.getInstance().subscribeToTopic("NAME OF TOPIC");
Таким образом, чтобы отправить его всем пользователям приложения, используйте вышеуказанный метод, чтобы каждый из ваших пользователей подписался на определенную тему. Я создал его с именем «все».
Теперь установите ваш to
поле в запросе JSON HTTP POST для topics/NAME OF TOPIC
или же topics/all
в моем случае.
НОТА: При подписке на тему, новая тема будет создана автоматически, если темы с таким именем не существует.
Других решений пока нет …