Firebase令牌始终过期

时间:2018-03-17 08:44:26

标签: android firebase firebase-cloud-messaging

在具有自定义ROM的一个型号的所有平板电脑上使用firebase令牌,将其发送到服务器,但它总是过期。什么是错的?以这种方式打开应用程序时获取它:

FirebaseInstanceId.getInstance().getToken();

onTokenRefreshed:

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

在其他设备上一切正常。

1 个答案:

答案 0 :(得分:0)

运行该方法时,您的应用似乎会续订fcm令牌。使用以下方法。它永远不会导致fcm令牌过期,即使您清除应用程序数据。仅卸载并重新安装应用程序以强制生成新令牌。

  1. 首先为FirebaseInstanceIdService创建一个java类。它只是 在生成新令牌时调用。
  2. <强> 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. 在AndroidManifest.xml文件中添加FcmInstanceIdService。
    2. <强>的AndroidManifest.xml

      <service android:name=".FcmInstanceIdService">
           <intent-filter>
               <action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
           </intent-filter>
      </service>
      
      1. 添加字符串名称FCM_PREF&amp; FCM_Token到strings.xml文件。
      2. <强>的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. 如果您想获取fcm令牌,请在活动中使用以下代码。
        2. <强> YourActivityName.java

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