Отправить push-уведомление на устройство Android с помощью PHP

Я пытаюсь понять, как отправлять 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": невозможно найти поле." } ] } ] } }

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
58
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

API FCM v1 не ожидает поля registration_ids. Вместо этого вам захочется поле tokens.

Для этого и многого другого держите документацию по отправке сообщений под рукой.

Хорошо, судя по предоставленной вами ссылке, я сделал: $fields = [ 'message' => [ 'token' => 'xxxxxx', 'notification' => [ 'title' => $notifTitle, 'body' => $notifDesc ] ] ]; и это сработало, спасибо. Но это не работает, когда я передаю массив токенов, который работал со старым способом отправки push-уведомлений. Вы показываете, как отправить массив токенов?

TheGreatCornholio 04.09.2024 02:26

Из того же документа: «Методы пакетной отправки, описанные в этом разделе, устарели 21 июня 2023 г. и будут удалены в июне 2024 г. Для протокола вместо этого используйте стандартный метод отправки API HTTP v1, реализуя свой собственный пакет. отправьте, перебирая список получателей и отправляя токен каждого получателя. Для методов Admin SDK обязательно обновите его до следующей основной версии. Дополнительную информацию см. в FAQ по Firebase. Если у вас есть дополнительные вопросы по этому поводу, задайте новый вопрос.

puf - Frank van Puffelen 04.09.2024 05:23

Хорошо, спасибо!

TheGreatCornholio 04.09.2024 15:18

Другие вопросы по теме