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