什么时候创建fcm刷新令牌

时间:2017-03-28 10:53:09

标签: android firebase firebase-cloud-messaging

我是Android的新手,现在正在查看firebase。在我的应用程序中,可以登录多个手机号码。所以我们正在做的是删除当前令牌

 public void homeFragmentDataImplementation() {
 Notification notification = new Notification();
 kProgressHUD = notification.activityIndicator(mActivity);
 new Thread(new Runnable() {
     @Override
     public void run() {
         OkHttpRequest okHttpRequest = new OkHttpRequest();
         homeApiResponse = okHttpRequest.getOkHttpRequest(URLS.HOMESCREEN_API +Utility.getDeviceId(mFragment.getContext()));                     handler.sendEmptyMessage(1);
     }}).start();
}
 private Handler handler = new Handler(){
     @Override
     public void handleMessage(Message msg) {
         if(msg.what==1) {

             Notification notification = new Notification();
             notification.scheduleDismiss(kProgressHUD);
             swipeContainer.setRefreshing(false);
             new JsonReadingModel(mActivity,homeApiResponse);
             homeScreenBusinessAdapter.notifyDataSetChanged();
         }
     }
 };

之后,当我使用新号码登录时,会生成新令牌。

所以我的问题就是确切地说哪个事件触发了令牌再生事件。我应该在线程(除了MAIN THREAD)上运行

以上代码行之外的一件事

1 个答案:

答案 0 :(得分:2)

这是我用于获取firebase令牌的服务

    public class FCMInstanceIDListenerService extends FirebaseInstanceIdService {
AppSharedPreferences appSharedPreferences;
    @Override
    public void onCreate() {
        super.onCreate();
        String CurrentToken = FirebaseInstanceId.getInstance().getToken();
        if (CurrentToken!=null){
            Intent intent = new Intent("device_id");
            LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
            Log.d("token", "Refreshed token: " + CurrentToken);
            appSharedPreferences.putString("device_id",CurrentToken);
        }
        else {
               onTokenRefresh();
                }
       }

    public FCMInstanceIDListenerService() {

        appSharedPreferences=AppSharedPreferences.getsharedprefInstance(this);
        // prefManager = PrefManager.getInstance(this);
    }

    @Override
    public void onTokenRefresh() {
        super.onTokenRefresh();
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();
        Intent intent = new Intent("device_id");
        LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
        Log.d("token", "Refreshed token: " + refreshedToken);
        appSharedPreferences.putString("device_id",refreshedToken);
        // prefManager.putString(PrefrenceConstants.KEY_DEVICE_ID, refreshedToken);

    }

}

来自developer site

  

onTokenRefresh()在系统确定令牌时调用   需要刷新。应用程序应调用getToken()并发送   所有应用程序服务器的令牌。

     

这不会经常调用,键旋转需要它   并处理由于以下原因导致的实例ID更改:

     
      
  • 应用删除实例ID

  •   
  • 在新设备上恢复应用

  •   
  • 用户卸载/重新安装应用

  •   
  • 用户清除应用数据

  •   
     

系统将限制所有设备上的刷新事件以避免   使用令牌更新重载应用程序服务器。