После всех проходов для получения уведомления с облачным почтовым сообщением google в IOS, но у меня есть эта проблема: я отправляю сообщение в php для уведомления с ключом сервера и токеном устройства, в первый раз ответ «успех», но не получает ничего на устройстве , во второй раз и в последующие моменты времени ответ «notRegistered». Я повторяю все проходы: создайте новый ключ в цепочке ключей, загрузите профиль подготовки, загрузите .cer, установите в цепочку ключей, экспортируйте .p12 и вставьте сертификаты на платформу Google для «GoogleService-Info.plist» и перезагрузите regId устройства на php , но ответ всегда таков. Помоги мне, пожалуйста.
Это мой php:
$apiKey = "server key"; $regId = 'registration token'; $url = 'https://gcm-http.googleapis.com/gcm/send'; $post = '{"to" : "' . $regId . '", "content_available" : true, "priority" : "high", "notification": {"title" : "test", "body" : "test"}}'; $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_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); if ( curl_errno( $ch ) ) { echo 'GCM error: ' . curl_error( $ch ); } curl_close( $ch ); echo $result;
Собственный ответ Op, снятый с отредактированного вопроса:
Проблема была в старой учетной записи без нового профиля подготовки, перейдите по адресу: XCode Accounts -> Apple IDs и просмотрите детали -> Загрузить все. Для этого перейдите по адресу: Цели -> название проекта -> Настройки сборки -> Поиск «Профиль профайла» -> измените автоматическое и выберите профиль профилей, используемый для сертификатов. Тайна – причина xcode, которая не предупреждает меня, не находит правильный профиль Provisioning Profile (другой идентификатор пакета).
Мои пять центов Если у вас есть ошибка «notRegistered», только когда приложение находится в производстве, это была моя ошибка: я пропустил это в параметрах регистрации, представленных в GCM:
[[GGLInstanceID sharedInstance] tokenWithAuthorizedEntity:_gcmSenderID scope:kGGLInstanceIDScopeGCM options:_registrationOptions handler:self.registrationHandler];
Существует опция kGGLInstanceIDAPNSServerTypeSandboxOption, которая должна быть установлена на NO в случае производства
Надеюсь, поможет!
Некоторое время назад мы также получили ошибку NotRegistered при попытке отправить второй запрос. Но для моего опыта проблема не на стороне ios. Проблема заключается в параметрах отправленных сообщений.
Попробуйте отправить все необходимые и необязательные параметры. Возможно, вы хотите попробовать PHP-скрипт на этом Q & A
Совет. Отправка параметра «content_available как true, приоритет как высокий и уведомление как данные» может помочь.
Ниже примера Json снова и снова получал ios-устройства.
"Content-Type" is "application/json" { "registration_ids":[ "<reg_id1>", "<reg_id2>", ], "priority":"high", "content_available":true, "time_to_live":2419200, "data":{ "message":"Test 15:46:49", "title":"" }, "notification":{ "title":"", "body":"Test 15:46:49", "sound":"default", "badge":"1" } }
по"Content-Type" is "application/json" { "registration_ids":[ "<reg_id1>", "<reg_id2>", ], "priority":"high", "content_available":true, "time_to_live":2419200, "data":{ "message":"Test 15:46:49", "title":"" }, "notification":{ "title":"", "body":"Test 15:46:49", "sound":"default", "badge":"1" } }
Изменить 2: Попробуйте это;
$apiKey = "server key"; $regId = 'registration token'; $url = 'https://gcm-http.googleapis.com/gcm/send'; $post = '{"to" : "' . $regId . '","priority":"high","content_available":true,"time_to_live":2419200,"data":{"message":"GCM Notifier:Message Success","title":"GCM Notifier:Title Success"},"notification":{"title":"GCM Notifier:Title Success","body":"GCM Notifier:Message Success","sound":"default","badge":"1"}}'; $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_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); if ( curl_errno( $ch ) ) { echo 'GCM error: ' . curl_error( $ch ); } curl_close( $ch ); echo $result;
по$apiKey = "server key"; $regId = 'registration token'; $url = 'https://gcm-http.googleapis.com/gcm/send'; $post = '{"to" : "' . $regId . '","priority":"high","content_available":true,"time_to_live":2419200,"data":{"message":"GCM Notifier:Message Success","title":"GCM Notifier:Title Success"},"notification":{"title":"GCM Notifier:Title Success","body":"GCM Notifier:Message Success","sound":"default","badge":"1"}}'; $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_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); $result = curl_exec($ch); if ( curl_errno( $ch ) ) { echo 'GCM error: ' . curl_error( $ch ); } curl_close( $ch ); echo $result;