Ответ 1
Был ли белый список IP-адресов вашего сервера? Это необязательно по умолчанию для ключа браузера, но это для ключа сервера.
Вы можете проверить это здесь:
https://code.google.com/apis/console/#project: [ВАШ НОМЕР ПРОЕКТА]: доступ
Я использую службы GCM для передачи информации с сервера. Если я использую ключ браузера, он показывает suase mesaage как: { "multicast_id": 4849013215736515938, "success": 1, "failure": 0, "canonical_ids": 0, "results": [{ "message_id": "0: 1348742583011905% 2adac3a0f9fd7ecd" }]} но я не получал никаких уведомлений на устройстве. И если я использую ключ сервера, он показывает Неавторизованная ошибка 401. Мой код показан ниже:
$apiKey = "xxxxx";
$registrationIDs = array("xxxxxxxx");
$message = "testing Process";
$url = 'https://android.googleapis.com/gcm/send';
$fields = array(
'registration_ids' => $registrationIDs,
'data' => array("message"=>$message),
);
$headers = array(
'Authorization: key=' . $apiKey,
'Content-Type: application/json'
);
$ch = curl_init();
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_VERIFYHOST, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt( $ch, CURLOPT_POSTFIELDS, json_encode($fields) );
$result = curl_exec($ch);
if(curl_errno($ch)){ echo 'Curl error: ' . curl_error($ch); }
curl_close($ch);
echo $result;
Пожалуйста, помогите мне в этом вопросе. Спасибо заранее.
Был ли белый список IP-адресов вашего сервера? Это необязательно по умолчанию для ключа браузера, но это для ключа сервера.
Вы можете проверить это здесь:
https://code.google.com/apis/console/#project: [ВАШ НОМЕР ПРОЕКТА]: доступ
Еще один ответ уже предложил белый список IP-адресов, что кажется очевидным. Для меня это был белый список IPv6. Это был ключ! Надеюсь, это поможет кому-то другому.
Я пробовал все в этой теме, и мне все равно не повезло.
Итак, я проверил активированные API (API и Auth → API, Enabled API) и понял, что я включил Google Cloud Messaging for Chrome
not Google Cloud Messaging for Android
. Как только я включил последний, он сразу сработал.
Дважды проверьте, что у вас есть правильный API!
Как писало много людей, вам нужно перечислить белый список серверов IPV4 и IPV6. Если вы хотите только IPV4, добавьте это в свой curl php init:
curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
используйте ключ браузера, используя опцию, создайте новый ключ браузера и используйте этот ключ в своем коде. https://code.google.com/apis/console/?pli=1#project:42053154xxxx:access
Я использовал для
$apiKey = "xxxxx"
как номер проекта (id проекта), который я установил в приложение Android Client, но я ошибся на сервере, должен быть appkey из облачной консоли Google (где вы активируете Google Cloud Messaging для Android)
ProjectXXX -> APIs & auth -> Registered Apps -> Web App -> Server Key
-> Api key
В моем случае у меня был проект по умолчанию "Сервис-проект-проект" на платформе: "Веб", но было только Hosted Application section
и никаких доказательств относительно какого-либо ключа api.
но когда я создаю новый Web Apps
, называемый "My app", который содержит 4 раздела OAuth 2.0 Client ID
, Certificate
, Ключ сервера, Browser Key
я окончательно найти ключ api; -)
может только я, кто этого не знает, но я верю, что этот ответ также может помочь кому-то.
для меня проблема заключалась в том, что вам нужно включить api. Недостаточно настроить API. Убедитесь, что в API-интерфейсах API с API-интерфейсом включены API-интерфейсы Google Cloud для Android.
Если он не щелкнет вкладку библиотеки API в APIS и включите ее. \
Если я не ошибаюсь, ваш APIKEY должен быть закодирован в base64.
Также попробуйте var_dump ($ results), чтобы узнать, получаете ли вы информацию.
Посмотрев на код, я узнаю, что это из образца php-gcm, размещенного где-то в Интернете. Это довольно приятно, и я могу заверить вас, что работают как ключи браузера, так и белый список (не IPV6 или bas64 apikey).
Причина, по которой сообщение не отображается, заключается в том, что функция отправки уведомлений, которую вы используете 'data' => array("message"=>$message)
задает ключ "сообщения", это то, что вы должны передать своему ожидающему намерению i.e
notification.setLatestEventInfo(context, title, message, intent);
Это даст возможность читать сообщение, содержащееся под этим ключом. Само сообщение получается из метода GCMIntentService, вставленного ниже:
@Override
protected void onMessage(Context context, Intent intent) {
Log.i(TAG, "Received message");
String message = intent.getExtras().getString("message");
Log.d(TAG, "The intent contains: " + intent.getExtras());
displayMessage(context, message);
// notifies user
generateNotification(context, message);
}
Вот проблема: я использовал 2 сервера, 1 этап, а другой - сервер производства. Для моего промежуточного сервера, который был размещен с использованием цифрового океана, я ввел адрес inet в допустимые IP-адреса для серверных приложений, и он работал нормально.
Однако он не удался, когда я перешел на мой адрес inet с моего производственного сервера. Вместо этого мне пришлось использовать inet6 addr:/64 Сфера применения: глобально для этого. Чтобы получить значение, если вы столкнулись с той же проблемой, просто введите ifconfig и найдите вышеприведенную запись. Введите это значение в разрешенных IP-адресах, и оно будет работать нормально.
У вас должен быть другой проект, чем стандартный. Создайте проект, а затем создайте ключ. Не используйте проект по умолчанию.
Мы ищем решения в течение нескольких дней. В частности, добавьте этот параметр завивки: curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );