Надежный подход к проверке идентификатора токена Firebase, помимо выполнения dry_run FCM send? - PullRequest
0 голосов
/ 21 апреля 2020

Наше приложение обеспечивает поддержку нескольких устройств 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...