Я сделал некоторый php-код, и я смог отправлять уведомления на устройства с помощью regId.
Мне также удалось создать группу regId, успешно получив уведомление_и_и_у_и_и_и_и_и_и_и_и_и_и_и_и_и_и_и_и_и_и_и_и_оооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооооо
Но я не могу отправлять уведомления группе. Я попытался использовать тот же метод для отправки уведомления, но вместо использования regId я использую message_key, который я получил от GCM при создании группы, но этот подход не сработал, он дает мне ошибку NotRegistered. Если я попытаюсь зарегистрироваться с тем же уведомлением_key_name, то GCM скажет, что он уже зарегистрирован.
Я не уверен, должен ли я отправить его другим методом или если я что-то делаю неправильно.
Когда я отправляю уведомления с помощью regId, я получаю это сообщение от GCM:
{ "Multicast_id": 517 … 442, "успех": 2, "провал": 0, "canonical_ids": 0, "Результаты": [{ "message_id": "0: 140 … ECD"}, { "message_id": "0: 140 … ECD"}]}
Когда я создаю группу, я получаю это сообщение от GCM:
{ "Notification_key": "APA91 …. nz9Q"}
Когда я пытаюсь отправить сообщение в группу, используя сообщение notification_key, которое я получил в сообщении выше, я получаю это сообщение от GCM:
{ "Multicast_id": 80 … 63, "успех": 0, "неудача": 1, "canonical_ids": 0, "результаты": [{ "ошибка": "NotRegistered"}]}
Когда я пытаюсь создать группу снова с тем же именем_из_и_и_у_и_у, я получаю это сообщение от GCM:
{"error": "notification_key уже существует"}
Ниже приведен код, который я использую.
<?php class GCM { const GOOGLE_API_KEY= " *** MY API KEY ***"; // Place your Google API Key const PROJECT_KEY= " *** MY PROJECT KEY ***"; function __construct() { } /** * Sending Push Notification */ public function send_notification($registatoin_ids, $message) { $url = 'https://android.googleapis.com/gcm/send'; $fields = array( 'registration_ids' => $registatoin_ids, 'data' => $message ); $headers = array( 'Authorization: key=' . self::GOOGLE_API_KEY, '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); // Disabling SSL Certificate support temporarly curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields)); $result = curl_exec($ch); if ($result === FALSE) { die('Curl failed: ' . curl_error($ch)); } // Close connection curl_close($ch); echo $result; } public function requestNotificationKeyFromGCM($registatoin_ids, $username) { //Google cloud messaging GCM-API url $url = 'https://android.googleapis.com/gcm/notification'; $request = array( 'operation' => 'create', 'notification_key_name' => $username, 'registration_ids' => $registatoin_ids, ); $headers = array( 'Authorization: key=' . self::GOOGLE_API_KEY, 'project_id: ' . self::PROJECT_KEY, '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, false); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($request)); $result = curl_exec($ch); if ($result === FALSE) { die('Curl failed: ' . curl_error($ch)); } curl_close($ch); echo $result; } } ?>
У меня были подобные проблемы при попытке отправить gcm с помощью ключа уведомления. В документации есть проблема. Вместо того, чтобы использовать:
curl -vvv -X POST --header "Content-Type: application/json" --header "project_id: <YOUR-PROJECT-ID>" --header "Authorization: key=<YOUR-PROJECT-SECRET-KEY>" --data @- "https://android.googleapis.com/gcm/send" << EOF { "registration_ids": ["<REGISTRATION-ID-FROM-DEVICE>"], "data": {}, } EOF
Вы должны использовать:
curl -vvv -X POST --header "Content-Type: application/json" --header "project_id: <YOUR-PROJECT-ID>" --header "Authorization: key=<YOUR-PROJECT-SECRET-KEY>" --data @- "https://android.googleapis.com/gcm/send" << EOF { "to": "<NOTIFICATION-ID>", "data": {}, } EOF
Вы можете увидеть больше в своем блоге: https://medium.com/appunite-edu-collection/d7df385b0ff4
Я следил за документацией из Документации Google (я нажимаю как на iOS, так и на Android).
{ "to": "your_token_ID", "data": { "hello": "This is a Firebase Cloud Messaging Device Group Message!", } }
Но он не работает, поэтому я попытался:
{ "to": "your_token_ID", "notification": { "sound": "default", "gcmSandbox": "true", "badge": 1, "title" : "Push Title", "body": "Push Body" } }
Этот метод работает для меня, надеюсь, что он помогает кому-то другому.