Незарегистрированный регистрационный токен в Firebase

Я получил незарегистрированный регистрационный токен, даже я уверен, что мой токен верен, и я проверяю его в своем журнале. Я использую мастер-токен FirebaseInstanceId.Instance.Token.

Вот мой метод:

private void ConfigureFireBase()
        {

            Task.Run(() => {
                var instanceId = FirebaseInstanceId.Instance;
                Android.Util.Log.Debug("TAG", "{0} {1}", instanceId?.Token?.ToString(), instanceId.GetToken(GetString(Resource.String.gcm_defaultSenderId), Firebase.Messaging.FirebaseMessaging.InstanceIdScope));

            });

        }

Я также проверяю метод OnTokenRefresh на тот же токен

public override void OnTokenRefresh()
        {
            var refreshedToken = FirebaseInstanceId.Instance.Token;
            Log.Debug(TAG, "Refreshed token: " + refreshedToken);
            SendRegistrationToServer(refreshedToken);
        }

но когда я попытался в консоли Firebase, он дал мне это сообщение об ошибке, когда я попытался в http://pushtry.com/ с тем же токеном, что и я получил NotRegistered сообщение

Примечание, когда я удалю приложение и снова установлю токен, но после получения этого сообщения об ошибке.

Ответ 1

Причина, по которой эта проблема срабатывает, приводит к тому, что токен незарегистрирован

The registration token may change when:

The app deletes Instance ID
The app is restored on a new device
The user uninstalls/reinstall the app
The user clears app data.

Ссылка

и это происходит в режиме отладки, так что не беспокойтесь в режиме выпуска, все будет хорошо.

Как вы можете исправить эту проблему?

его простое усилие, чтобы обновить токен, вызовите этот метод в вашей активности при приземлении (MainActivity, Login), этот метод заставляет firebase вызывать OnTokenRefresh()

private void ConfigureFireBase()
        {

#if DEBUG

            Task.Run(() =>
            {
                var instanceId = FirebaseInstanceId.Instance;
                instanceId.DeleteInstanceId();
                Android.Util.Log.Debug("TAG", "{0} {1}", instanceId?.Token?.ToString(), instanceId.GetToken(GetString(Resource.String.gcm_defaultSenderId), Firebase.Messaging.FirebaseMessaging.InstanceIdScope));

            });

            // For debug mode only - will accept the HTTPS certificate of Test/Dev server, as the HTTPS certificate is invalid /not trusted
            ServicePointManager.ServerCertificateValidationCallback += (o, certificate, chain, errors) => true;


#endif
        }

Надеюсь, что эта помощь поможет решить одну проблему.

Ответ 2

В моем случае я использовал эмулятор, и брандмауэр блокировал его. Я использовал свой мобильный телефон, включил параметры разработчика, и он работал.

Надеюсь, что это поможет.