Mensaje push extraño recibido en el inicio de la aplicación


Estoy recibiendo un mensaje push extraño capturado por mi servicio push:

Bundle[{CMD=RST_FULL, from=google.com/iid, android.support.content.wakelockid=1}]

Acaba de empezar a suceder ayer y realmente no puedo detectar qué cambio de código es el culpable de esto. Alguien ha visto este mensaje antes y tal vez sabe de dónde viene y por qué?

Author: vkislicins, 2015-05-27

6 answers

Su aplicación está recibiendo este mensaje porque ha tenido datos restaurados de una copia de seguridad. Como la copia de seguridad puede haber incluido tokens de registro, esta transmisión se envía diciéndole a su aplicación que obtenga nuevos tokens, ya que los respaldados no funcionarán.

Esto está pensado para el nuevo GCM APIs, y hará que se llame al método onTokenRefresh() de su implementación InstanceIdListenerService, donde su aplicación debería obtener todos sus tokens nuevamente.

Desafortunadamente, si usted está escribiendo su propio BroadcastReceiver, estos mensajes serán inesperados y pueden causar que su aplicación se bloquee. Lo correcto es filtrar en el campo "de", y si ve uno de estos mensajes, para registrarse de nuevo con GCM ya que sus tokens pueden ser inválidos.

Si está recibiendo estos mensajes fuera de la situación de una nueva instalación donde se están restaurando los datos de su aplicación, envíe un mensaje a la lista de correo android-gcm.

 20
Author: morepork,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-03 23:39:05

Vea los documentos actualizados de la API de GCM como sugiere @morepork.

Para las aplicaciones existentes que extienden un WakefulBroadcastReceiver, Google recomienda migrar a GCMReceiver y GcmListenerService. A migrar:

En el manifiesto de la aplicación, reemplace su GcmBroadcastReceiver con "com.Google.androide.gms.gcm.GcmReceiver", y reemplazar la declaración de servicio actual que extiende IntentService al nuevo GcmListenerService

Eliminar el BroadcastReceiver implementación desde su código de cliente

Refactorizar la implementación actual del servicio IntentService para usar GcmListenerService

Para obtener más información, consulte el manifiesto de ejemplo y los ejemplos de código en esta página.

De su código de ejemplo , es bastante fácil de seguir.

AndroidManifest.xml

<receiver
    android:exported="true"
    android:name="com.google.android.gms.gcm.GcmReceiver"
    android:permission="com.google.android.c2dm.permission.SEND">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
        <category android:name="com.example.client"/>
    </intent-filter>
</receiver>

<service
    android:name=".MyGcmListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE"/>
    </intent-filter>
</service>

<service
    android:name=".MyInstanceIdListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
    </intent-filter>
</service>

<service
    android:name=".MyGcmRegistrationService"
    android:exported="false">
</service>

MyGcmListenerService.java

public class MyGcmListenerService extends GcmListenerService {
    @Override
    public void onMessageReceived(String from, Bundle data) {
        final String message = data.getString("message");
        makeNotification(message);
    }
}

MyGcmRegistrationService.java

public class MyGcmRegistrationService extends IntentService {
    private static final String TAG = "MyRegistrationService";
    private static final String GCM_SENDER_ID = "XXXXXXXXXXXX";
    private static final String[] TOPICS = {"global"};

    public MyGcmRegistrationService() {
        super(TAG);
    }

    @Override
    protected void onHandleIntent(Intent intent) {
        try {
            synchronized (TAG) {
                InstanceID instanceID = InstanceID.getInstance(this);
                String token = instanceID.getToken(GCM_SENDER_ID,
                        GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);
                sendTokenToServer(token);
                subscribeTopics(token);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void subscribeTopics(String token) throws IOException {
        for (String topic : TOPICS) {
            GcmPubSub pubSub = GcmPubSub.getInstance(this);
            pubSub.subscribe(token, "/topics/" + topic, null);
        }
    }
}

MyInstanceIdListenerService.java

public class MyInstanceIdListenerService extends InstanceIDListenerService {
    public void onTokenRefresh() {
        Intent intent = new Intent(this, MyGcmRegistrationService.class);
        startService(intent);
    }
}

Entonces puede reemplazar su antiguo código de registro con solo

Intent intent = new Intent(this, MyGcmRegistrationService.class);
startService(intent);
 13
Author: mpkuth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-05 16:08:28

Me di cuenta del mismo problema hoy. Primero, este mensaje debe provenir del propio Google (from=google.com/iid), de lo contrario el atributo from sería el id de su proyecto en Google developer console (es decir, 475832179747). Pero para estar seguro, apagué nuestro servidor de aplicaciones, y aún así recibí el mensaje.

Siempre lo recibo cuando me registro en el servidor de Google Cloud Messaging. No es un gran problema porque puedes filtrar el mensaje por la intención-acción, pero realmente lo haría me gustaría saber el propósito de la misma.

 7
Author: rickul,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-28 14:05:56

Para las aplicaciones existentes que extienden un WakefulBroadcastReceiver, Google recomienda migrar a GCMReceiver y GcmListenerService. A migrar:

  • En el manifiesto de la aplicación, reemplace su GcmBroadcastReceiver con "com.Google.androide.gms.gcm.GcmReceiver", y reemplazar el actual declaración de servicio que extiende IntentService al nuevo GcmListenerService
  • Elimine la implementación de BroadcastReceiver de su código de cliente
  • Refactorizar la corriente Para usar GcmListenerService Para obtener más información, consulte el manifiesto de ejemplo.

Parece que Google dividió el GCMIntentService que extendió IntentService para manejar gcms a dos servicios, uno extiende GcmListenerService que manejará los mensajes recibidos y otro que filtra iid.InstanceID por separado para filtrar la notificación recibida para la primera instalación, esto es del nuevo gcm android guías

<service
    android:name="com.example.MyGcmListenerService"
    android:exported="false" >
    <intent-filter>
        <action android:name="com.google.android.c2dm.intent.RECEIVE" />
    </intent-filter>
</service>
<service
    android:name="com.example.MyInstanceIDListenerService"
    android:exported="false">
    <intent-filter>
        <action android:name="com.google.android.gms.iid.InstanceID"/>
    </intent-filter>
</service>

Https://developers.google.com/cloud-messaging/android/client

 2
Author: nosaiba darwish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-25 09:01:16

Lo mismo me está pasando en al menos una tableta de Asus

Probablemente en más dispositivos, pero no he tenido la oportunidad de echar un vistazo

Estoy buscando algunas cadenas particulares en Intent.getExtras () así que la solución era simple, si no están presentes entonces ignora todo.

¿Cuáles son las posibilidades de que alguien de Google aparezca y explique lo que está pasando?

 0
Author: user1126515,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-29 12:26:29

Tuve este problema durante la migración de GCM - > FCM con recibir solo el elemento wakelockid de:

  • firebase console
  • solicitud reproducida por cartero con solicitud como esta:

{ "to": "<your token from FirebaseInstanceId.getInstance().getToken()>", "notification": { "body": "Hello", "title": "This is test message." } }

También copié todo el código de google quickstart firebase messaging. Todo debería estar bien. Sin embargo, después de todas las pruebas decidí revisar mis versiones de gradle libs. Así que los incrementé a los últimos números. Desde entonces empecé a recibir mensajes correctamente.

La solución más rápida que recomendaría para descargar el proyecto de GitHub y probar si esto está funcionando para Usted. El siguiente paso sería copiar este código a su proyecto. Si en un proyecto todo está funcionando bien, tiene al menos un punto de pie/trabajo por dónde comenzar.

Hay rumores sobre Android Studio está causando este problema - pero no es cierto. Lo comprobé.

Puede ser cierto que podría usar el mismo token antiguo (de gcm) y no recibir mensajes pero si tuvieras el mismo caso como yo que es migrating, entonces token debería actualizarse a uno nuevo y deberías manejarlo..

 0
Author: deadfish,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-13 13:52:52