Firebase中未注册的注册令牌

Min*_*wzy 16 android xamarin.android firebase-cloud-messaging

我得到了未注册的注册令牌,即使我确定我的令牌是正确的,我在我的日志中检查它我正在使用主令牌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));

            });

        }
Run Code Online (Sandbox Code Playgroud)

我也检查同样的OnTokenRefresh方法

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

但是当我在Firebase控制台中尝试时,它给了我这个错误消息,当我在http://pushtry.com/中尝试使用相同的令牌时,我没有收到NotRegistered消息

请注意,当我卸载应用程序并再次安装令牌工作时,但在我收到此错误消息后.

Min*_*wzy 18

此问题触发的原因是该令牌未注册

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.
Run Code Online (Sandbox Code Playgroud)

参考

这种情况只发生在调试模式,所以不要担心在发布模式下,每件事情都会好的.

你如何解决这个问题?

它只是强制刷新令牌,在您的登陆活动(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
        }
Run Code Online (Sandbox Code Playgroud)

希望这有助于任何人面对同样的问题