Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Android Studio + Firebase: Sistema não imprime o token

Fazendo o curso Curso Android com Web Service parte 2: mais técnicas de sincronização, ao aplicar os conceitos explanados na aula, não consigo o mesmo resultado.

Mesmo com o FCM informando que está tudo certo, o sistema não obtem o token e imprime no log.

AgendaInstanceIDService.java:

package br.com.alura.agenda.firebase;

import android.util.Log;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;

public class AgendaInstanceIDService extends FirebaseInstanceIdService{

    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Log.d("token firebase", "Refreshed token: " + refreshedToken);

        /*
        If you want to send messages to this application instance or
        manage this apps subscriptions on the server side, send the
        Instance ID token to your app server.
        */
        sendRegistrationToServer(refreshedToken);
    }

    private void sendRegistrationToServer(String refreshedToken) {

    }
}

build.gradle (Module:app):

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    buildToolsVersion '27.0.3'
    defaultConfig {
        applicationId "br.com.alura.agenda"
        minSdkVersion 15
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    productFlavors {
    }

    packagingOptions {
        exclude 'META-INF/LICENSE'
    }

}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    //noinspection GradleCompatible
    implementation 'com.android.support:appcompat-v7:27.1.1'
    implementation 'com.android.support:cardview-v7:27.1.1'
    implementation 'com.android.support:support-v4:27.1.1'
    implementation 'com.squareup.retrofit2:retrofit:2.1.0'
    implementation 'com.squareup.retrofit2:converter-jackson:2.1.0'
    implementation 'com.squareup.okhttp3:logging-interceptor:3.4.2'
    implementation 'com.google.android.gms:play-services:12.0.1'
    implementation 'com.google.firebase:firebase-messaging:12.0.1'
    implementation 'com.google.firebase:firebase-core:12.0.1'
    implementation 'com.google.firebase:firebase-messaging:12.0.1'
}

apply plugin: 'com.google.gms.google-services'

build.gradle (Project: agenda):

// Top-level build file where you can add configuration options common to all sub-projects/modules.

buildscript {
    repositories {
        jcenter()
        google()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:3.1.3'

        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.google.gms:google-services:3.2.0'
    }
}

allprojects {
    repositories {
        jcenter()
        maven { url "https://maven.google.com" }
    }
}
4 respostas
solução!

Oi Yuri, blz? Dado que o token é gerado apenas uma única vez e é mantido no celular, para que ele seja gerado novamente, ou você tem que desinstalar e instalar a App novamente.

Existe uma outra alternativa sem a necessidade de desinstalar a App que é desativando o token atual e ativando novamente com o seguinte código:

// desativa token
FirebaseInstanceId.getInstance().deleteInstanceId();
// ativa token
FirebaseInstanceId.getInstance.getToken();

Essa abordagem vai gerar um novo token que vai ser armazenado no celular. Recomendo testar a primeira para que você veja que o onTokenRefreshed() foi chamado.

[]s

Sensacional, professor! Funcionou. Voce é o cara, mesmo.

Posso aproveitar para pedir a sua ajuda com outra coisa? Eu já estava com este problema antes:

Durante a sua aula sobre o Push Notification do Firebase, eu não consegui fazê-lo funcionar por nada.

O assistente da barra lateral informa que tudo está instalado e as classes estão como na explanação da aula, mas o dispositivo não recebe mensagem alguma.

No console diz que o envio da mensagem foi concluído, mas não chega nada no dispositivo.

A aplicação não está em foreground como disse que deveria e já tentei pelos dois métodos: via plataforma app mesmo e pelo token do aparelho.

Pode me dar uma luz? Acha melhor criar outra discussão?

Desde já, obrigado!

Oi Yuri, claro!

Vou responder a dúvida dado que já fez a pergunta, porém, se tiver mais dúvidas pode abrir um outro tópico? O motivo é justamente para que outros alunos que tenham o mesmo problema consigam achar com mais facilidade uma solução :)

Enfim, sobre o que você acabou de explicar, a notificação que é enviada via console do Firebase só é recebida quando está em background, ou seja, quando a App não estiver ativa.

Agora se for o data que é a mensagem recebida quando acontece alguma alteração no servidor, é recebida tanto em background como em foreground.

[]s

Isso! O app estão em background e configurei tudo como explanou no vídeo, mas ainda não funciona.

Vou criar outro tópico para aguardar sua ajuda.

Obrigado, professor!