2016-09-20 2 views
0

Vielleicht mache ich einen falschen Schritt. Ich habe 3 Aktivitäten:Warum wird FirebaseInstanceIdService.onTokenRefresh() nie aufgerufen?

  • Launcher
  • Anmeldung
  • MainActivity

Im onCreate meiner MainActivity, ich rufe den Dienst:

void iniciarServicioSendTokenFCM(){ 

     servicioFCM= new Intent(this, IDService.class); 
     startService(servicioFCM); 

    } 

Und dies wird ausgeführt, , weil es in onCreate von Service eingeben kann, aber onTokenRefresh() ist nie Exec ted.

Ich habe diese steps auch getan. Ich habe die App deinstalliert und neu installiert, aber es hat nicht funktioniert.

public class IDService extends FirebaseInstanceIdService { 

    private ConnectionStatusSync ConnSync;//= new ConnectionStatusSync(this); 
    private DispositivoSync Sync; 
    private Integer dispositivoId; 
    private PreferenceUtil preferenceUtil ; 
    private String tokenDispositivo; 
    private DispositivoSync.OnFragmentInteractionListener listener; 
    public IDService() { 

    } 

    @Override 
    public void onCreate() { 
     super.onCreate(); 
     Listener(); 
     ConnSync = new ConnectionStatusSync(this); 
     Sync = new DispositivoSync(this); 
     preferenceUtil= new PreferenceUtil(this); 

     dispositivoId=preferenceUtil.getInt(getString(R.string.dispositivoID),0,null); 
     dispositivoId=(dispositivoId==0?null:dispositivoId); 
     tokenDispositivo= new IDUtil(this).getId(); 


    } 

    private void Listener(){ 
     listener = new DispositivoSync.OnFragmentInteractionListener() { 
      @Override 
      public void onFinished(boolean terminoBien, int dispositivoID) { 
       if(terminoBien){ 
        preferenceUtil.savePreference(getString(R.string.dispositivoID),dispositivoID,null); 

       } 
      } 
     }; 
    } 

    @Override 
    public void onTokenRefresh() { 
     // Get updated InstanceID token. 
     String refreshedToken = FirebaseInstanceId.getInstance().getToken(); 
     preferenceUtil.savePreference(getString(R.string.TokenFCM),refreshedToken,null); 
     //Log.d(TAG, "Refreshed token: " + refreshedToken); 

     // TODO: Implement this method to send any registration to your app's servers. 
     if(validaciones()) 
     sendRegistrationToServer(refreshedToken); 
    } 

    private boolean validaciones(){ 

     return dispositivoId!=null && MainActivity.mOperador!=null; 
    } 

    private void sendRegistrationToServer(final String token){ 



     final Thread registrar = new Thread(new Runnable() { 
      @Override 
      public void run() { 
Sync.EnviarDispositivo(MainActivity.mOperador.getOperadorIdServidor(),dispositivoId,token,tokenDispositivo,listener); 
      } 
     }); 

     Thread hilo = new Thread(new Runnable() { 
      @Override 
      public void run() { 

       Command commandNull= new Command() { 
        @Override 
        public void execute() { 

        } 
       }; 

       ConnSync.CheckConnection(registrar,commandNull); 

      } 
     }); 

     hilo.start(); 

    } 



} 

Antwort

0

In einer App, die Firebase Cloud Messaging verwendet, beginnt der Client sofort mit dem Generieren des Tokens, wenn die App gestartet wird.

Wahrscheinlich wurde das erste Token bereits generiert, als Sie auf onTokenRefresh() warten. So sollten Sie auch sofort anfordern und speichern Sie die Token in Ihrer iniciarServicioSendTokenFCM Methode:

sendRegistrationToServer(FirebaseInstanceId.getInstance().getToken()); 

Ich glaube nicht, dass es sehr nützlich ist, das Token in gemeinsamen Präferenzen durch die Art und Weise zu speichern, da es leicht ist zugänglich von FirebaseInstanceId.getInstance().getToken().

Verwandte Themen