Intereting Posts
преобразовать значение #RRGGBB в значение #AARRGGBB Как передать выражение XPath как параметр XSL с помощью PHP? преобразование http в https Избегайте, чтобы электронные письма считались спамом при отправке через контактную форму PHP Как проверить несколько слов в строке? (возвращает true, есть хотя бы одно из этих слов) Как проверить, какой пользовательский php работает как? Получение столбца базы данных с помощью JSON использование разрывов строк в метатегах laravel 4 Яркая нагрузка как список идентификаторов Неустранимая ошибка: нельзя использовать объект типа mysqli_result Если я уже использую PDO, то в чем преимущество дальнейшего абстрагирования запросов SELECT в Eloquent ORM Laravel? Неопределенный индекс при группировании и суммах в многомерном массиве Каков наилучший способ создания «многоязычного» скрипта в php? php – который лучше подходит к null == или == null Mailaparse на XAMPP 1.7.3

Уведомление Firebase, которое не получено на устройстве при отправке через cURL / PHP

У меня есть приложение iOS, которое работает в магазине приложений. Я могу отправлять push-уведомления на устройства iOS, у которых установлено приложение, но только тогда, когда я отправляю их с консоли Firebase.

Когда я пытаюсь отправить push-уведомления через запрос cURL, ответ с сервера указывает, что я был успешным, но сообщение не получено на устройстве. Я пробовал это как с многоадресными, так и с одиночными получателями.

Я должен упустить что-то более фундаментальное, но я не вижу этого.

Вот мой PHP-код:

<?php // API access key from Google API's Console define( 'API_ACCESS_KEY', 'AI*****4LPGkx8xtDG2tBl*****7KWJfmp1szcA' ); $registrationIds = array( $_GET['id'] ); // prep the bundle $msg = array ( 'message' => 'here is a message. message', 'title' => 'This is a title. title' ); $fields = array ( 'to' => "cUxd-iTVVWo:APA*****kQTuqJ5RREKhhlJjm27NCuVfUn5APg3lBFqh-YWjgx*****iOpAQeLB14CzM2YTwIJo_75jzCmbFLKj0_zpKSHvAEbmJz*****BBezGJIng-N4H-cAD6ahY7mQNYZtEJLAIE", 'data' => $msg ); $headers = array ( 'Authorization: key=' . API_ACCESS_KEY, 'Content-Type: application/json' ); $ch = curl_init(); curl_setopt( $ch,CURLOPT_URL, 'https://fcm.googleapis.com/fcm/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 ); curl_close( $ch ); echo $result; 

Вот ответ, который я получаю при запуске этого кода:

{ "Multicast_id": 5814921248239922706, "успех": 1, "провал": 0, "canonical_ids": 0, "Результаты": [{ "message_id": "0: 1476193002715692% a4ddee3cf9fd7ecd"}]}

Было два вопроса:

  1. Мне нужно было включить раздел notification в полезную нагрузку вместо data
  2. Как-то полезная нагрузка не была правильно отформатирована PHP.

В конце я использовал функцию PHP shell_exec() чтобы вместо этого выполнить запрос cURL поверх SSH. Это не идеально, но он выполнил свою работу.

Пример кода:

 shell_exec('curl -X POST --header "Authorization: key=<key here>" --header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "{\"to\":\"'.$to.'\",\"priority\":\"high\",\"notification\":{\"body\": \"'.stripslashes($message).'\"}}"'); 

Из документации Firebase у вас есть выбор использования данных или уведомлений в полезной нагрузке сообщения. Но когда вы используете данные , вы несете ответственность за обработку получения уведомления самостоятельно. Другими словами, он не будет отправлен сразу вашему клиенту приложения. Вы обрабатываете его в didReceiveRemoteNotification: для ios и onMessageReceived () в случае Android .

Если, однако, вы используете уведомление в полезной нагрузке, firebase отправит сообщение прямо вашему клиентскому приложению.

Вот почему вы не получите сообщение (если вы использовали данные ), даже если ваш запрос на завивание говорит вам, что ему удалось выполнить запрос.

Попробуйте добавить {priority: high}

 $fields = array ( 'to' => "cUxd-iTVVWo:APA*****kQTuqJ5RREKhhlJjm27NCuVfUn5APg3lBFqh-YWjgx*****iOpAQeLB14CzM2YTwIJo_75jzCmbFLKj0_zpKSHvAEbmJz*****BBezGJIng-N4H-cAD6ahY7mQNYZtEJLAIE", 'data' => $msg, 'priority' =>'high' );