Проблема с push-уведомлением FCM: - "ошибка": "Не зарегистрирован"


У меня возникает странная проблема с отправкой push-уведомлений на Android с помощью FCM.

Цель: - Ошибка при отправке push-уведомления

Ниже приведен сценарий, в котором у меня есть функция для отправки push-уведомлений на Android

 public static function SendMultipleNotificationAndroid($groups)
    {
        //your api key SERVER API KEY
        $apiKey = Yii::$app->params['android_api_key'];
        $url = 'https://fcm.googleapis.com/fcm/send';    
        $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_SSL_VERIFYPEER, false);

        foreach($groups as $resG){
            $users  = $resG['users'];                        
            $msg    =   $resG['message'];
            $type    =   $resG['notification_type'];
            $notification_data    =   $resG['notification_data'];

            $deviceTokens = [];
            foreach($users as $resUser){
                $deviceTokens[] = $resUser['device_token'];
                //Add  Friend badge count +1
                Common::AddRemoveBadgeCount($resUser['user_id']);
            }
            if(!empty($deviceTokens)){
                $fields = array(
                    'registration_ids' => $deviceTokens,
                    'priority'     => 'high', 
                    'collapse_key' => $resG['notification_type'],   
                    'time_to_live' => 2419200,     
                    "click_action" =>"NotificationListingActivity",     
                    'data'         => [                  
                        "title"             => "ProjectName",
                        "body"              => $resG['message'],
                        "action_tag"        => $resG['notification_type'],
                        "message"           => $resG['message'],
                        'notification_type' => $type,
                        'notification_data' => $notification_data,
                        'sound'             => 'default',
                    ]
                );
                //Print result 
                p($ch,0);
                curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($fields));
                curl_exec($ch);
            }            
        }
        curl_close($ch);
    }

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

<pre>Resource id #5</pre>{"multicast_id":4818908994630396118,"success":1,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"},{"message_id":"0:1487136045570022%c3bae3c6002e9358"}]}

<pre>Resource id #5</pre>{"multicast_id":5218359780835228544,"success":1,"failure":1,"canonical_ids":0,"results":[{"error":"NotRegistered"},{"message_id":"0:1487136046618669%c3bae3c6002e9358"}]}

Поскольку мы отлаживаем код, у нас есть маркер устройства в нашей базе данных нет брандмауэр, который прекращает отправку push-уведомлений.

Каждый раз, когда я вызываю вышеуказанную функцию, я получаю

"ошибка": "Не зарегистрирован"

Буду признателен за любую помощь.

Заранее благодарю.

Author: Shashank Shah, 2017-02-15

3 answers

Я мало что знаю о php, но недавно я столкнулся с такой же проблемой в другом проекте и решил ее следующим образом:

Сначала рассмотрите это : Где я могу найти КЛЮЧ API для обмена сообщениями в облаке Firebase?

И получите обновленный ключ API, как показано на приведенном ниже снимкеenter image description here

 10
Author: Maddy, 2017-05-23 12:25:51

Согласно документу, это связано с тем, что при тестировании мобильных устройств ваше приложение больше не установлено

Если он не зарегистрирован, вам следует удалить регистрационный идентификатор из базы данных сервера, поскольку приложение было удалено с устройства или клиентское приложение не настроено для приема сообщений.

 4
Author: sahan maldeniya, 2018-04-23 15:53:37

Это проблема на стороне клиента (устройства), а не на стороне службы. Это может произойти в нескольких сценариях:

  • Если клиентское приложение отменяет регистрацию в GCM.
  • Если клиентское приложение автоматически не регистрируется, что может произойти, если пользователь удалит приложение. Например, в iOS, если Служба обратной связи APNS сообщила, что маркер APNS недействителен.
  • Если срок действия регистрационного маркера истекает (например, Google может решить обновить регистрационные маркеры или маркер APNS имеет истек срок действия для устройств iOS).
  • Если клиентское приложение обновлено, но новая версия не настроена для приема сообщений.

См. https://developers.google.com/cloud-messaging/http-server-ref

При запуске приложения я проверяю, соответствует ли токен, который я сохранил локально, новому токену. Если нет, то я обновляю токен на своих серверах. Я также делаю это в FirebaseInstanceIDService::onTokenRefresh.

 0
Author: Dan, 2018-08-18 13:50:24