Я пытаюсь понять, как отправлять push-уведомления на устройства Android с помощью PHP.
Я просмотрел это на нескольких сайтах, и это последнее, что я пробовал:
function sendFCM($registrationIds, $notifTitle, $notifDesc, $notifChannel, $data) {
$client = new Google_Client();
$client->setAuthConfig('bla.json');
$client->addScope('https://www.googleapis.com/auth/firebase.messaging');
$client->refreshTokenWithAssertion();
$token = $client->getAccessToken();
$accessToken = $token['access_token'];
$headers = array (
'Authorization: Bearer ' . $accessToken,
'Content-Type:application/json'
);
$notification = array
(
"title" => $notifTitle,
"body" => $notifDesc,
"icon" => "ic_logo_circle",
"android_channel_id" => $notifChannel
);
$fields = array
(
'notification' => $notification,
'data' => $data,
'registration_ids' => $registrationIds
);
$ch = curl_init();
curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/v1/projects/projectname/messages:send' );
curl_setopt( $ch,CURLOPT_POST, true );
curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
$result = curl_exec($ch);
print($result);
curl_close($ch);
}
$notifData = array(
"title" => "this is the title",
"msg" => "the desc",
"image" => "whatever.jpg"
);
sendFCM($registrationIds, "Antwort auf Kommentar", "Cornholio hat dir geantwortet", "channel_reply_comment", $notifData);
$registrationIds
содержит массив из нескольких токенов устройств Android
{ "error": { "code": 400, "message": "Получены недопустимые полезные данные JSON. Неизвестное имя "уведомление": невозможно найти поле.\nПолучены недопустимые полезные данные JSON. Неизвестное имя "данные": невозможно найти поле.\nНедействительно Получены полезные данные JSON. Неизвестное имя "registration_ids": невозможно найти поле.", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.BadRequest", " fieldViolations": [ { "description": "Получена неверная полезная нагрузка JSON "уведомление" с неизвестным именем: невозможно найти поле." }, { "description": "Получена неверная полезная нагрузка JSON. Неизвестное имя "данные": невозможно найти поле." }, { "description": "Получена неверная полезная нагрузка JSON. Неизвестное имя "registration_ids": невозможно найти поле." } ] } ] } }
API FCM v1 не ожидает поля registration_ids
. Вместо этого вам захочется поле tokens
.
Для этого и многого другого держите документацию по отправке сообщений под рукой.
Из того же документа: «Методы пакетной отправки, описанные в этом разделе, устарели 21 июня 2023 г. и будут удалены в июне 2024 г. Для протокола вместо этого используйте стандартный метод отправки API HTTP v1, реализуя свой собственный пакет. отправьте, перебирая список получателей и отправляя токен каждого получателя. Для методов Admin SDK обязательно обновите его до следующей основной версии. Дополнительную информацию см. в FAQ по Firebase. Если у вас есть дополнительные вопросы по этому поводу, задайте новый вопрос.
Хорошо, спасибо!
Хорошо, судя по предоставленной вами ссылке, я сделал: $fields = [ 'message' => [ 'token' => 'xxxxxx', 'notification' => [ 'title' => $notifTitle, 'body' => $notifDesc ] ] ]; и это сработало, спасибо. Но это не работает, когда я передаю массив токенов, который работал со старым способом отправки push-уведомлений. Вы показываете, как отправить массив токенов?