如何为 Xamarin.Firebase.Auth AddIdTokenListner 设置侦听器

时间:2021-02-07 01:08:51

标签: android xamarin firebase-authentication

我最近开始学习 Xamarin,并且正在学习一些教程,这些教程展示了如何使用 Xamarin.Firebase.Auth nuget 包来处理身份验证。那时我可以毫无问题地登录并获取 ID 令牌。

我还想使用我构建的 api,它使用 JWT 的令牌。我之前使用过 Firebase 并且知道他们的 id 令牌会在一小时后过期。因此,我四处寻找有关如何设置代码以处理令牌更改的教程,但找不到任何内容。我开始浏览代码,我唯一能找到的是一种添加 Id Token 侦听器的方法。所以,我组合了一个 Listener 类。

public class IdTokenListener : Java.Lang.Object, FirebaseAuth.IIdTokenListener
{
    public EventHandler<TokenChangedEventArgs> IdTokenChanged;

    public class TokenChangedEventArgs: EventArgs
    {
        public string Token { get; set; }
    }
    public void OnIdTokenChanged(FirebaseAuth auth)
    {
        auth.CurrentUser.GetIdToken(false).AsAsync<GetTokenResult>().ContinueWith((task) =>
        {
            IdTokenChanged?.Invoke(this, new TokenChangedEventArgs { Token = task.Result.Token });
        });

    }

}

然后在Android项目的MainActivity.cs文件中(iOS项目还没做过),我创建了一个类级别的变量来保存一个监听器的实例。我还调用了 AddIdTokenListener 方法并在 OnCreate 方法中添加了一个事件处理程序:

public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
{
    IdTokenListener idTokenListener = new IdTokenListener();

    protected override void OnCreate(Bundle savedInstanceState)
    {
        // Other code removed for space
        FirebaseAuth.Instance.AddIdTokenListener(idTokenListener);
        idTokenListener.IdTokenChanged += OnIdTokenChanged;
        LoadApplication(new App());
    }

    private void OnIdTokenChanged(object sender, IdTokenListener.TokenChangedEventArgs e)
    {
        Console.WriteLine("Main Activity - OnIdTokenChanged: " + e.Token);
    }

}

当应用程序加载或我使用登录页面时,会调用令牌侦听器并获得预期的结果。但是,如果我让应用程序继续运行,则永远不会再次调用令牌侦听器。我什至让它运行了一夜,只是为了确保它不是时间问题。我还需要做些什么才能让它发挥作用?

0 个答案:

没有答案