2016-09-20 118 views
0

也許我做錯了一步。我有3個活動:爲什麼FirebaseInstanceIdService.onTokenRefresh()永遠不會被調用?

  • 啓動
  • 登錄
  • MainActivity

在我的MainActivity的onCreate,我打電話的服務:

void iniciarServicioSendTokenFCM(){ 

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

    } 

,這是執行,因爲它輸入onCreate服務,但onTokenRefresh()永遠不能執行特德。

我也完成了這些steps。我已經卸載並重新安裝了應用程序,但沒有奏效。

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(); 

    } 



} 

回答

0

在使用Firebase Cloud Messaging的應用程序中,客戶端在應用程序啓動時立即開始生成令牌。

當您開始偵聽onTokenRefresh()時,最可能已經生成了初始令牌。所以,你要也立即請求和令牌存儲在您iniciarServicioSendTokenFCM方法:

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

我不認爲它是非常有用的方式,令牌存儲在共享偏好因爲它很容易從FirebaseInstanceId.getInstance().getToken()可訪問。