it-swarm-pt.tech

Erro GCM ': não registrado'

Consegui testar meu código do GCM.

Mas exatamente o mesmo código, não consegui obter o GCM Push e recebi:

Erro do GCM: não registrado.

39
LKM

A resposta do GCM, Not Registered, significa "Se for NotRegistered, você deve remover a ID de registro do banco de dados do servidor porque o aplicativo foi desinstalado do dispositivo ou não tem um receptor de transmissão configurado para receber com.google.Android.c2dm.intent. RECEBER intenções. " de documentação . Verifique em que caso você recebe este erro, quando o aplicativo é desinstalado do dispositivo ou se você descreve um receptor de transmissão incorreto no AndroidManifest. Você pode testar sua funcionalidade do GCM com meu servidor GCM de teste . Espero que isso ajude você.

51
Samik

Se você estiver usando um dispositivo para teste, precisará excluir o InstanceID antes de obter o token e testar novamente, pois depois de substituir seu APK ele desregistrará esse InstanceId e obterá o erro NotRegistered. Portanto, em sua classe RegisterIntentService, na função onHandleIntent, faça o seguinte:

InstanceID instanceID = InstanceID.getInstance(this);
try
{
    instanceID.deleteInstanceID();
} catch(IOException e) 
{
    e.printStackTrace();
}
instanceID = InstanceID.getInstance(this);
18
Rhodesie

O Not Registered acontece quando o GCM acha que o dispositivo não conseguiu lidar com a mensagem. Isso acontece se o aplicativo for desinstalado ou configurado incorretamente para manipular a mensagem:

enter image description here

Com base nas respostas do @Samik e do @ O'Rilla, sugiro os seguintes passos:

  1. Desinstalar a instalação atual do dispositivo Android
  2. Certifique-se de que <receiver> e <sender> estejam definidos no nó <application> em AndroidManifest.xml.
  3. Certifique-se de ter o <category Android:name="COM.COMPANY.YOURAPP" /> correto no seu <receiver>
  4. Certifique-se de que a implementação do Receiver está correta
9
Roozbeh Zabihollahi

Se você realmente acha que seu código está correto e continua recebendo erro

{"error": "NotRegistered"} 

tente desinstalar o aplicativo manualmente do telefone e execute-o novamente (seu dispositivo receberá um novo ID de registro).

Pelo menos no meu caso o problema foi resolvido!

5
naren

Eu estava usando o antigo código obsoleto para o GCM: 

if (gcm == null) {
                gcm = GoogleCloudMessaging.getInstance(this);
            }
            String regId = gcm.register(SENDER_ID);
            msg = "Device registered, registration ID=" + regId;

e ao tentar mudar para o novo caminho:

InstanceID instanceID = InstanceID.getInstance(this);
            String token = instanceID.getToken(getString(R.string.gcm_defaultSenderId),
                    GoogleCloudMessaging.INSTANCE_ID_SCOPE, null);

Eu estava recebendo o mesmo erro e isso estava me deixando louca por dois dias inteiros. 

Depois de tentar de tudo no livro, o que foi corrigido foi desativar o GCM no console dos desenvolvedores, reativá-lo e, em seguida, ir aqui: https://developers.google.com/mobile/add para gerar um novo google-services.jsonfile para meu Aplicativo para Android. 

Observe também que a RegistrationIntentService deve estar na raiz do seu pacote ou não funcionará! (veja este exemplo para a implementação do gcm no Android: https://github.com/google/gcm )

Espero que isso ajude alguém porque eu perdi dias com isso !!!! > <

2
Micro

Eu tive esse erro quando eu tinha o receptor gcm fora do aplicativo no arquivo de manifesto. Movido o receptor no escopo do aplicativo e tudo funcionou. Um coelho muito feliz agora.

<application>
...
<receiver>
...
</receiver>
...
</application>
2
G O'Rilla

Uma conta do Google é um requisito em dispositivos que executam o Android 4.0.4 ou inferior. http://developer.Android.com/google/gcm/gcm.html

Você também deve adicionar <uses-permission Android:name="Android.permission.GET_ACCOUNTS" /> no seu arquivo de manifesto.

1
ztan

Isso significa que você está fornecendo um ID de registro incorreto. Assim, primeiro execute seu aplicativo para dispositivos móveis e seu ID de registro será um token. Coloque esse token no código do servidor do aplicativo como ID de registro Para ID do aplicativo, forneça o ID do servidor, que você pode obter do console do desenvolvedor do Google, seu projeto e credenciais. Para o ID do remetente, defina o ID do projeto que pode obter do projeto, configurações no desenvolvedor console. 

0
ireshika piyumalie