Наше приложение обеспечивает поддержку нескольких устройств c.
Одна и та же учетная запись Google с несколькими устройствами будет иметь несколько идентификаторов токенов Firebase
FirebaseInstanceId.getInstance().getInstanceId()
Со временем Firebase Идентификатор токена с того же устройства может стать недействительным или устарел, и его можно обновить с помощью нового идентификатора токена Firebase.
В нашем бэкэнде мы проверяем сохраненный идентификатор токена Firebase, чтобы определить, все еще действительны.
def is_valid_token(token):
try:
failure_counter = 0
while True:
if failure_counter >= 3:
return False
body = '{"dry_run": true, "registration_ids":["' + token + '"]}'
req = urllib.request.Request('https://fcm.googleapis.com/fcm/send')
req.add_header('Content-Type', 'application/json')
req.add_header('Authorization', 'key=' + constants.FCM_AUTHORIZATION_KEY)
with urllib.request.urlopen(req, body.encode('utf8')) as response:
string = response.read().decode('utf8')
d = json.loads(string)
if d['failure'] == 1:
failure_counter = failure_counter + 1
continue
else:
return True
except Exception as e:
logging.error(e, exc_info=True)
exc_type, exc_obj, exc_tb = sys.exc_info()
error = exc_type
message = str(e)
line_number = exc_tb.tb_lineno
filename = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1]
insert_into_error_log(error, message, filename, line_number, token)
return True
То, что мы сделали, мы выполняем отправку FCM в режиме dry_run
. Если такая операция будет повторяться три раза подряд, мы отметим токен как недействительный.
Однако мы заметили, что такой подход недостаточно точен. Так как у нас есть пользователь, которому принадлежит только 2 устройства. Однако существует 12 различных действительных идентификаторов токенов Firebase, связанных с его одной учетной записью Google.
Мне было интересно, есть ли у вас надежный подход для проверки идентификатора токена Firebase, помимо выполнения dry_run FCM send?