Как вы управляете своим токеном устройства Android, сгенерированным FCM после истечения срока действия токена?
Я разрабатываю приложение для push-уведомлений, у вас есть такая же проблема:
Мое приложение генерирует токен устройства FCM и сохраняет его в облачной базе данных, поэтому я могу отправлять уведомления на устройство через FCM, и моя таблица базы данных выглядит так:
идентификатор пользователя | устройство_токен
Мэри | xxxxxxxxxxxxxxxxxxxxxxxxxxxx // token1, с первого устройства Мэри
Джон | yyyyyyyyyyyyyyyyyyyyyyyyyyyyyy
Мэри | zzzzzzzzzzzzzzzzzzzzzzzzzzzzzz // token2, со второго устройства Мэри Мэри | ккккккккккккккккккккккккккк // токен, с первого устройства Мэри .......
После того, как Мэри переустановила это приложение со своего первого устройства, был создан новый токен устройства, который сохраняется в файле token3.
Как я могу удалить токен устройства с истекшим сроком действия token1, единственная информация, которую я получил, может быть только парой токена устройства и именем учетной записи.
Итак, как вы управляете своим устройством в этой ситуации?
2 ответа
Если «Мэри» каждый раз использует одну и ту же учетную запись для входа в ваше приложение, даже если это новый телефон или переустановленное приложение, зачем вы создаете новое поле токена в базе данных? Почему бы вам всегда не писать внутри одного и того же поля маркера, чтобы у вас всегда был доступ к этому полю. Это также будет отправлять уведомления только на тот телефон, который ваш пользователь использует прямо сейчас. Поэтому каждый раз, когда пользователь запускает токен проверки приложения, если он не равен, напишите новый внутри вашей базы данных. А со стороны сервера брать эти токены и отправлять уведомления.
Я что-то упускаю?
Для этого я бы предложил использовать FirebaseAuth для процессов SignIn и SignUp вашего приложения. Затем используйте сгенерированный идентификатор поля для пользователя в базе данных реального времени. Вы можете получить это с
public class User {
public long id = 0;
public long account_id = 0;
public String account_name = "";
public String first_name = "";
public String last_name = "";
public String email_address = "";
public String password = "";
public User() {
}
}
Вам решать, как это настроить. Но использование моделей также помогает вам размещать и получать данные, например:
Создание нового пользователя:
DatabaseReference mDatabase = FirebaseDatabase.getInstance().getReference();
mDatabase.child("users").child(FirebaseAuth.getInstance().getCurrentUser().getUid()).setValue(user);
Получение данных из базы данных реального времени:
DatabaseReference database = FirebaseDatabase.getInstance().getReference();
DatabaseReference databaseUsers = database.child("users");
User myUser = null;
Query usersQuery = databaseUsers.orderByChild("username").equalTo(uid); //you can use any value to order as you want, or you don't have to, there is many options for this query
usersQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChanged(@NonNull DataSnapshot snapshot) {
try {
for (DataSnapshot user : snapshot.getChildren()) {
myUser = user.getValue(User.class);
}
} catch (Exception e) {
e.printStackTrace();
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
Вдохновленный этим: Firebase Cloud Messaging — управление регистрационными токенами
Когда генерируется токен: если Мэри вошла в систему:
- добавить устройство в группу устройств «Мария».
- сохраните идентификатор группы устройств и подключите идентификатор группы устройств к профилю «Мэри» в базе данных.
если серверу приложений необходимо отправить уведомление Мэри, просто отправьте его в группу устройств. Преимущество заключается в том, что вам не нужно проверять, действителен ли токен устройства, Firebase Cloud Messaging отбрасывает недействительные токены устройства.
если никто не вошел в систему: ничего не делать или просто сохранить токен устройства.