简体   繁体   English

Firebase令牌始终过期

[英]Firebase token always expired

On all tablets of one model with custom ROM i geting firebase token, send it to server, but it always expired. 在具有自定义ROM的一种型号的所有平板电脑上,我都获得了Firebase令牌,将其发送到服务器,但始终过期。 What's can be wrong? 有什么问题吗? Get it when open app this way: 通过以下方式在打开应用程序时获取它:

FirebaseInstanceId.getInstance().getToken();

And onTokenRefreshed: 和onTokenRefreshed:

 @Override
public void onTokenRefresh() {
   String refreshedToken = FirebaseInstanceId.getInstance().getToken();
    Log.d(TAG, "Refreshed token: " + refreshedToken);
    Globals.getInstance().Token = refreshedToken;
    SaveToken();
}

On other devices everything ok. 在其他设备上,一切正常。

It seems your app renew the fcm token when you run the method. 运行该方法时,您的应用似乎更新了fcm令牌。 Use below method. 使用以下方法。 It never cause fcm token to be expire, even you clear the app data. 即使清除应用程序数据,它也不会导致fcm令牌过期。 Only uninstalling and reinstalling the app to force the generation of a new token. 仅卸载并重新安装该应用程序以强制生成新令牌。

  1. First Create a java class for FirebaseInstanceIdService. 首先为FirebaseInstanceIdService创建一个Java类。 It is only called when a new token is generated. 仅在生成新令牌时调用。

FcmInstanceIdService.java FcmInstanceIdService.java

public class FcmInstanceIdService extends FirebaseInstanceIdService{    
    @Override
    public void onTokenRefresh(){
        String recent_token = FirebaseInstanceId.getInstance().getToken();
        SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(getString(R.string.FCM_PREF), Context.MODE_PRIVATE);
        SharedPreferences.Editor editor = sharedPreferences.edit();
        editor.putString(getString(R.string.FCM_Token),recent_token);
        editor.commit();    
    }
}
  1. Add FcmInstanceIdService in AndroidManifest.xml file. 在AndroidManifest.xml文件中添加FcmInstanceIdService。

AndroidManifest.xml AndroidManifest.xml

<service android:name=".FcmInstanceIdService">
     <intent-filter>
         <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
     </intent-filter>
</service>
  1. Add Strings name FCM_PREF & FCM_Token to strings.xml file. 将字符串名称FCM_PREF和FCM_Token添加到strings.xml文件。

strings.xml strings.xml

<string name="FCM_PREF">com.example.YourAccountName.AppName.fcm_pref</string>
<string name="FCM_Token">com.example.YourAccountName.AppName.fcm_token</string>
  1. When you want to get the fcm token, use below code in your activity. 当您想获取fcm令牌时,请在活动中使用以下代码。

YourActivityName.java YourActivityName.java

sharedPreferences = getApplicationContext().getSharedPreferences(getString(R.string.FCM_PREF), Context.MODE_PRIVATE);
final String token = sharedPreferences.getString(getString(R.string.FCM_Token), "");

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM