У меня есть несколько php-файлов, отвечающих за операции GCM, которые хранятся на моем сервере, они, кажется, работают нормально, когда хотят, но часто возвращают ошибку, которая гласит:
Ошибка скручивания: время ожидания истекло через 0 миллисекунд с 0 из 0
байт получено
Это проблема с сервером или проблема с моим кодом GCM? Ниже мой php файл:
<?php
$message = urldecode($_POST['message']);
$order = urldecode($_POST['order']);
$registrationIDs = urldecode($_POST['registrationIDs']);
$apiKey = "API_KEY";
$tableID = urldecode($_POST['tableID']);
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => array($registrationIDs),
'data' => array(
'message' => $message,
'tableID' => $tableID,
'order' => $order
),
);
$headers = array(
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);
// Open connection
$ch = curl_init();
// Set the url, number of POST vars, POST data
curl_setopt($ch, CURLOPT_URL, $url);
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));
// Execute post
$result = curl_exec($ch);
if(curl_errno($ch)) {
echo 'Curl error: ' . curl_error($ch);
}
// Close connection
curl_close($ch);
echo $result;
?>
Я попытался отправить Push-уведомление, используя ваш код, и я добился этого.
Для тестов я рекомендую установить параметр «dry_run». Вы будете отправлять сообщения в GCM, и он будет возвращать их вам как «фальшивый» ответ.
Теперь ваша проблема, я искал, что может произойти, потому что кажется, что у вас есть ограничение скручивания или что-то, но я не эксперт в этой теме, поэтому вот несколько советов, которые вы можете попробовать:
Если вы запускаете скрипт через браузер, то установите set_time_limit на ноль в течение бесконечных секунд.
set_time_limit(0);
Увеличьте лимит времени работы локона, используя эту опцию ‘CURLOPT_TIMEOUT’
curl_setopt($ch, CURLOPT_TIMEOUT, 20);
// 20 секунд
Это также может произойти для бесконечного перенаправления с сервера. Чтобы остановить это, попробуйте запустить скрипт с отключенным отслеживанием местоположения.
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false);
Других решений пока нет …