Problema de notificación de inserción de FCM: “error”: “No registrado”

3 minutos de lectura

Avatar de usuario de Shashank Shah
Shashank Shah

Tengo un problema extraño al enviar notificaciones automáticas a Android usando FCM.

Objetivo: – Tener un error al enviar una notificación push

A continuación se muestra el escenario en el que tengo una función para enviar notificaciones automáticas a 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);
    }

Entonces, el problema es que cuando envío una sola notificación, funciona bien, pero cuando envío varias notificaciones, recibo un error cada vez.

<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"}]}

A medida que depuramos el código, tenemos un token de dispositivo en nuestra base de datos, no hay un firewall que deje de enviar notificaciones automáticas.

Cada vez que llamo a la función anterior obtengo

"error":"NotRegistered"

  • ¡¡No, no era el caso!! ¡He enviado varias notificaciones allí! algunas de las notificaciones se enviaron con éxito y otras tenían un error NotRegistered. En ambos casos la aplicación estaba instalada en el dispositivo.

    – Shashank Shah

    4 de diciembre de 2018 a las 6:17

  • “algunas de las notificaciones se enviaron con éxito y algunas tienen un error NotRegistered”. -> Teniendo el mismo problema @ShashankShah, ¿puedes compartir algo si tienes trabajo?

    –Nandam Mahesh

    14 de noviembre de 2020 a las 12:50


  • Después de buscar 4 cuatros, me aseguro de que esta sea la respuesta correcta.

    – Dorbaña

    7 de febrero a las 13:42

  • @maddy esto no funcionó para mí. Cambié la clave del servidor al realizar la solicitud, pero sigo recibiendo el mismo error.

    – AIón

    1 de marzo de 2018 a las 11:10

  • @AIon, envíe una notificación de prueba desde la consola de firebase, si funciona, entonces el problema podría ser de su parte.

    – Maddy

    1 de marzo de 2018 a las 11:12

  • stackoverflow.com/questions/51123197/…

    – Martín Zeitler

    18 de agosto de 2018 a las 13:53

  • _firebaseRegister() { // _firebaseMessaging.deleteInstanceID(); _firebaseMessaging.getToken().then((token) => fcmtoken = token); }

    – Sadhvik Chirunomula

    6 de agosto de 2020 a las 19:07

  • _firebaseRegister() { // _firebaseMessaging.deleteInstanceID(); _firebaseMessaging.getToken().then((token) => fcmtoken = token); }

    – Sadhvik Chirunomula

    6 de agosto de 2020 a las 19:07

  • Estoy de acuerdo con tu forma de actuar. Pero tengo una pregunta, ¿qué sucede si algún usuario no abre la aplicación por un tiempo y se cambia el token entre dispositivos? ¿Qué deberíamos hacer?

    – ceros

    17 de junio de 2021 a las 9:03

  • @Nils, el token cambia solo cuando se abre la aplicación (cada vez que se inicia la aplicación). Entonces, si la aplicación no está abierta, el token no cambiará. Puede probar en su extremo y confirmar aquí.

    – SHS

    18 de junio de 2021 a las 14:38

  • eso es genial para mi En mi caso, cuando el usuario instaló la aplicación, recibí una notificación de 3 a 5 días. Y si el usuario no usa la aplicación durante 4-5 días. No recibí ninguna notificación push. ¿Alguna idea de lo que salió mal?

    – ceros

    21 de junio de 2021 a las 10:13


¿Ha sido útil esta solución?