Отправить 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 имеет множество фреймворков, упрощающих разработку веб-приложений, таких как Laravel и Symfony.


1
58
1

Ответ:

Решено

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

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


Интересные вопросы для изучения

Html и php или js выбираются с помощью запроса с относительным полемРазделите заголовки знаком «-» в WordpressПеренаправление на другой URL-адрес после получения заказа или/перенаправление на пользовательскую страницу благодарности после оплаты заказов WooCommerce«Метод isEnabled в классе App\Entity\Brand требует 0 аргументов, но должен принимать только 1»Можно заставить смайлы отображаться на PHP с MySQL 5.x, но не с 8.xGradle не загружает определенную зависимостьУстановите разные константы для производства и разработкиСериализатор для класса xxx не найден. Убедитесь, что класс помечен как «@Serializable» и что установлен плагин компилятора сериализацииAndroid: разрешения во время выполнения не работают — в настройках приложения не отображаются запрошенные разрешения, даже когда их запрашивают (WRITE_EXTERNAL_STORAGE)Как повторно включить клавиатуру для элементов управления вводом после их отключения?