Intereting Posts
Строка с комой для плавания с точкой Как я могу разобрать JSON в html-таблицу с помощью PHP? PHP curl сбрасывает длину контента, если CURLOPT_POST задано с curl_setopt_array? Aptana 3.0.4 и отладка PHP Это код .htaccess в WordPress. Может кто-нибудь объяснить, как это работает? php аутентификации пользователей / фреймворков … какие варианты? 500 – внутренняя ошибка сервера? Как получить true или false из функции PHP с помощью AJAX? Как сохранить текстовую строку с разрывами строк в текстовое поле базы данных MySQL с помощью PHP? Заполнение результатов SQL в PHP – Не получение полного массива Автоматический перезапуск PHP-скрипта на выходе Показывать данные на основе выбранного идентификатора в модальном всплывающем окне после нажатия кнопки php mysql Как удалить 'index.php' из URL-адреса в CodeIgniter? Laravel schedular: выполнять команду каждую секунду Предварительно упакованный Redbean извлекает только одну (последнюю) строку

Сервер Google GCM возвращает ошибку 404

Я хочу отправить сообщение с моего сервера на телефон, через PHP. Вот мой код:

$apiKey = "AIxxxxxxxxxxxxxxxxxxxx"; $registrationIDs = array( $c2dmId ); $url = "https://android.googleapis.com/gcm/send"; $headers = array( 'Authorization: key='.$apiKey, 'Content-Type: application/json' ); $fields = array( 'collapse_key' => $collapseKey, 'data' => array( "type" => $msgType, "extra" => $msgExtra, "uuid" => $uuid, "user_id" => $userId), 'registration_ids' => $registrationIDs, ); print (json_encode($fields)); echo "<br/>"; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) ); $result = curl_exec($ch); $resultInfo = curl_getinfo($ch); echo "resultinfo: $resultInfo <br>"; foreach ($resultInfo as $key => $value) { echo "$key => $value <br>"; } curl_close($ch); die ("Result: $result"); 

Где $ c2dmId – это только регистрация, которую я отправляю на сервер с телефона. В результате я получаю (в переменной $ result):

 <HTML> <HEAD> <TITLE>Not Found</TITLE> </HEAD> <BODY BGCOLOR="#FFFFFF" TEXT="#000000"> <H1>Not Found</H1> <H2>Error 404</H2> </BODY> </HTML> 

И я не знаю, почему. Может ли кто-нибудь помочь? Документация ничего не говорит о коде 404, поэтому я действительно не знаю, что происходит.

О, я совсем забыл об этом вопросе, извините за это. Я уже выяснил, в чем проблема. Раньше я использовал этот код, который я разместил ранее, чтобы отправлять сообщения через C2DM. Я сделал несколько улучшений, чтобы настроить его на GCM. И одна из переменных ($ msgExtra) в некотором случае может равняться нулю. Это было намеренное поведение, и с C2DM он работал просто отлично. К сожалению, когда вы пытаетесь передать null в JSON через GCM, вы получаете ошибку 404, хотя в документации GCM ничего не говорится об этом … Так что код, который я опубликовал, хорош, если вы не пытаетесь отправить null. Решение моей проблемы – заменить нулевое значение чем-то вроде «». И еще раз – жаль, что я публикую его сейчас, я совсем забыл об этом вопросе.

Создайте ключ API браузера из консоли API Google и используйте его вместо ключа сервера в заголовке «Авторизация». Как только вы это сделаете, эта ошибка исчезнет.

Это вызвано серьезной ошибкой в ​​документации GCM, в которой говорится, что вы должны использовать ключ сервера в заголовке авторизации (как написано здесь ).

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

 <?php $apiKey = "AI....."; $registrationIDs = array( "You registration key" ); $url = "https://android.googleapis.com/gcm/send"; $headers = array( 'Authorization: key='.$apiKey, 'Content-Type: application/json' ); $msgType = "hello"; $msgExtra = "rock"; $uuid = '1234'; $userId = '5678'; /* data you need to define message you want to send in APP.For ex: here myssg in what i am fetching at client side, so in notification it will show hello. You can change accordingly. */ $fields = array( 'collapse_key' => $collapseKey, 'data' => array( "mymsg" => $msgType, "extra" => $msgExtra, "uuid" => $uuid, "user_id" => $userId), 'registration_ids' => $registrationIDs, ); print (json_encode($fields)); echo "<br/>"; $ch = curl_init(); curl_setopt( $ch, CURLOPT_URL, $url ); curl_setopt( $ch, CURLOPT_FOLLOWLOCATION, true); curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers); curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt( $ch, CURLOPT_POST, true ); curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode( $fields ) ); $result = curl_exec($ch); $resultInfo = curl_getinfo($ch); echo "resultinfo: $resultInfo <br>"; foreach ($resultInfo as $key => $value) { echo "$key => $value <br>"; } curl_close($ch); die ("Result: $result"); ?> 

Это не даст вам ошибку 404. Надеюсь, это поможет вам или некоторым разработчикам на стороне сервера в PHP.