【发布时间】:2020-03-05 01:55:08
【问题描述】:
我有一个应用程序,它在应用程序第一次运行时创建一个 FCM 令牌,然后该令牌针对手机号码保存在 firebase 数据库中。
在数据库中保存数据的过程是首先从数据库中检索数据,然后在onDataChange()中,如果数据已经存在则更新数据,否则数据是新的。
现在的问题是这样的:当我打开应用程序时,使用手机号码 '1234' 并且在数据库令牌中可以说是 '1' 。现在,如果我使用相同的号码(即“1234”)在另一部手机中打开该应用程序,则其他设备中的令牌就是“2”。在数据库中,针对数字 1234 的令牌应该从“1”更新为“2”,但它没有发生。事实上,当数据更新为 2 时,它再次转换为 1,然后再转换为 2,然后再转换为 1,然后再转换为 2,依此类推。
我希望如果针对手机号码生成了新令牌,那么它应该被更新。
这是我的代码:
tokenZ = new Token();
SharedPreferences sharedPreferenceZ =activity.getSharedPreferences(cmn.SHARED_SPNAME,MODE_PRIVATE);
final String tokens = sharedPreferenceZ.getString(cmn.RegistrationTokenforFirebase, "1");
final DatabaseReference database = FirebaseDatabase.getInstance().getReference();
final DatabaseReference databaseChild = FirebaseDatabase.getInstance().getReference().child("" + UserID);
database.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
Map<String, Object> oldData = (Map<String, Object>) dataSnapshot.getValue();
if (oldData != null) {
System.out.println("oldDD" + oldData.get(UserID));
System.out.println("oldDDy" + "{token=" + tokens + "}");
if (oldData.get(UserID) != null) {
System.out.println("Number already");
Map<String, Object> currentData = (Map<String, Object>) oldData.get(UserID);
if (oldData.get(UserID).toString().equals("{token=" + tokens + "}")) {
System.out.println("Token already");
currentData.put("token", tokens);
databaseChild.updateChildren(currentData);
} else {
System.out.println("New Token");
// databaseChild.removeValue();
tokenZ.setToken(tokens);
databaseChild.setValue(tokenZ);
FirebaseMessaging.getInstance().setAutoInitEnabled(false);
}
} else {
System.out.println("New Number");
tokenZ.setToken(tokens);
databaseChild.setValue(tokenZ);
}
} else {
tokenZ.setToken(tokens);
databaseChild.setValue(tokenZ);
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
【问题讨论】:
标签: android firebase firebase-realtime-database firebase-cloud-messaging