[英]Why is FirebaseInstanceIdService.onTokenRefresh() is never called?
Maybe I am doing a wrong step. 也许我做错了一步。 I have 3 activities:
我有3个活动:
In the onCreate
of my MainActivity, I am calling the service: 在我的MainActivity的
onCreate
中,我正在调用该服务:
void iniciarServicioSendTokenFCM(){
servicioFCM= new Intent(this, IDService.class);
startService(servicioFCM);
}
And this is executed, because it gets to enter in onCreate
of Service but onTokenRefresh()
is never executed. 并执行此操作,因为它可以输入Service的
onCreate
,但从不执行onTokenRefresh()
。
I have done these steps too. 我也做了这些步骤 。 I have uninstalled and reinstalled the app but it didn't work.
我已经卸载并重新安装了该应用程序,但没有成功。
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();
}
}
In an app that uses Firebase Cloud Messaging, the client immediately starts generating the token when the app starts. 在使用Firebase Cloud Messaging的应用程序中,客户端会在应用程序启动时立即开始生成令牌。
Most likely the initial token has already been generated by the time you start listening for onTokenRefresh()
. 当您开始监听
onTokenRefresh()
时,很可能已经生成了初始令牌。 So you'll want to also immediately request and store the token in your iniciarServicioSendTokenFCM
method: 因此,您还需要立即请求令牌并将其存储在
iniciarServicioSendTokenFCM
方法中:
sendRegistrationToServer(FirebaseInstanceId.getInstance().getToken());
I don't think it is very useful to store the token in shared preferences by the way, given that it is readily accessible from FirebaseInstanceId.getInstance().getToken()
. 鉴于可以从
FirebaseInstanceId.getInstance().getToken()
轻松访问令牌,因此我认为将令牌存储在共享首选项中不是很有用。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.