Я использую Android SDK для записи токенов устройства в мою базу данных Firebase.Я связываю эти токены с пользователями.Я предполагаю, что у каждого пользователя может быть одно или несколько устройств.Следовательно, вот как выглядит моя текущая структура базы данных:
{
"users" : {
"1" : {
"-LAwu8VKATAxifCOZIPn" : "Device_Token_For_User_1",
"-LAwyfXcoLcXBX3rOshb" : "Device_Token_For_User_1"
},
"8" : {
"-LAwuR9cel-p0kXv-LCn" : "Device_Token_For_User_8"
}
}
}
Как видите, пользователь 1 (представленный ключом «1») содержит тот же токен, который был записан дважды, но с разными ключами (левая сторона).Эти ключи генерируются случайным образом из-за метода push()
.На самом деле я забочусь только о самих значениях, но я хочу избежать записи одного и того же токена конкретному пользователю более одного раза.
Я помещаю токены в свою базу данных в базу данных Firebase следующим образом:
String token = FirebaseInstanceId.getInstance().getToken();
Person currentUser;
try {
currentUser = Reservoir.get("current_user", Person.class);
FirebaseDatabase database = FirebaseDatabase.getInstance();
DatabaseReference myRef = database.getReference();
myRef.child("users").child(Integer.toString(currentUser.id)).push().setValue(token);
} catch (IOException e) {
Log.e("ERROR", "Cannot fetch user from reservoir.");
Toast.makeText(getApplicationContext(), "An unexpected error occurred.", Toast.LENGTH_SHORT).show();
e.printStackTrace();
}
Все хорошо, за исключением того, что когда пользователь выходит из системы и входит обратно на одно и то же устройство, один и тот же токен будет дважды отправлен в базу данных, что и произошло с Пользователем 1.