Câu trả lời này không phá hủy id cá thể, thay vào đó nó có thể lấy id hiện tại. Nó cũng lưu trữ một cái được làm mới trong Tùy chọn được chia sẻ.
Strings.xml
<string name="pref_firebase_instance_id_key">pref_firebase_instance_id</string>
<string name="pref_firebase_instance_id_default_key">default</string>
Utility.java (bất kỳ lớp nào bạn muốn đặt / nhận tùy chọn)
public static void setFirebaseInstanceId(Context context, String InstanceId) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
SharedPreferences.Editor editor;
editor = sharedPreferences.edit();
editor.putString(context.getString(R.string.pref_firebase_instance_id_key),InstanceId);
editor.apply();
}
public static String getFirebaseInstanceId(Context context) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
String key = context.getString(R.string.pref_firebase_instance_id_key);
String default_value = context.getString(R.string.pref_firebase_instance_id_default_key);
return sharedPreferences.getString(key, default_value);
}
MyFirebaseInstanceIdService.java (mở rộng FirebaseInstanceIdService)
@Override
public void onCreate()
{
String CurrentToken = FirebaseInstanceId.getInstance().getToken();
//Log.d(this.getClass().getSimpleName(),"Inside Instance on onCreate");
String savedToken = Utility.getFirebaseInstanceId(getApplicationContext());
String defaultToken = getApplication().getString(R.string.pref_firebase_instance_id_default_key);
if(CurrentToken != null && !savedToken.equalsIgnoreCase(defaultToken))
//currentToken is null when app is first installed and token is not available
//also skip if token is already saved in preferences...
{
Utility.setFirebaseInstanceId(getApplicationContext(),CurrentToken);
}
super.onCreate();
}
@Override
public void onTokenRefresh() {
.... prev code
Utility.setFirebaseInstanceId(getApplicationContext(),refreshedToken);
....
}
Dịch vụ Android 2.0 trở lên onCreate
không được gọi khi khởi động tự động ( nguồn ). Thay vào đó onStartCommand
là ghi đè và sử dụng. Nhưng trong FirebaseInstanceIdService thực tế, nó được khai báo là cuối cùng và không thể bị ghi đè. Tuy nhiên, khi chúng tôi bắt đầu dịch vụ bằng startService (), nếu dịch vụ đã chạy, thì phiên bản gốc của nó sẽ được sử dụng (tốt). OnCreate () (được định nghĩa ở trên) của chúng ta cũng đã được gọi !.
Sử dụng điều này khi bắt đầu MainActivity hoặc bất cứ lúc nào bạn nghĩ rằng bạn cần id cá thể.
MyFirebaseInstanceIdService myFirebaseInstanceIdService = new MyFirebaseInstanceIdService();
Intent intent= new Intent(getApplicationContext(),myFirebaseInstanceIdService.getClass());
//Log.d(this.getClass().getSimpleName(),"Starting MyFirebaseInstanceIdService");
startService(intent); //invoke onCreate
Và cuối cùng,
Utility.getFirebaseInstanceId(getApplicationContext())
Lưu ý , bạn có thể nâng cao điều này hơn nữa bằng cách cố gắng di chuyển mã startervice () sang phương thức getFirebaseInstanceId.