Xamarin Android Firebase刷新令牌

Xamarin Android Firebase刷新令牌,android,xamarin.android,Android,Xamarin.android,我在Xamarin Android应用程序中实现了Firebase消息传递。第一次运行该应用程序时,它被称为OnTokenRefresh()(例外)。我卸载了应用程序并重新运行了重新安装应用程序的调试器。不过这次没有调用OnTokenRefresh。事实上,我还没能让它在一台设备上被第二次调用 我尝试创建一个令牌服务来获取令牌,但它总是抛出一个异常。方法非常简单: [assembly: Xamarin.Forms.Dependency(typeof(MyApp.Droid.Services

我在Xamarin Android应用程序中实现了Firebase消息传递。第一次运行该应用程序时,它被称为OnTokenRefresh()(例外)。我卸载了应用程序并重新运行了重新安装应用程序的调试器。不过这次没有调用OnTokenRefresh。事实上,我还没能让它在一台设备上被第二次调用

我尝试创建一个令牌服务来获取令牌,但它总是抛出一个异常。方法非常简单:

 [assembly: 
 Xamarin.Forms.Dependency(typeof(MyApp.Droid.Services.NotificationToken))]
  namespace MyApp.Droid.Services
 {
 class NotificationToken : INotificationToken
 {
    public string GetToken()
    {            
        var token = "";
        if (Firebase.Iid.FirebaseInstanceId.Instance != null)
            token = Firebase.Iid.FirebaseInstanceId.Instance.Token;
        return token;
     }
   }
}
在检查实例是否为null时引发异常

 [GoogleAccountDataServiceImpl] getToken() -> BAD_AUTHENTICATION. Account: <ELLIDED:-119322310>, App: com.google.android.gms, Service: oauth2:https://www.googleapis.com/auth/gcm

在Visual Studio 2017中,您可以禁用以下首选项,以确保在设备部署之间刷新Firebase令牌。这是通过反复试验了解到的

工具>选项>Xamarin>Android>在部署之间保留应用程序数据/缓存


希望这能有所帮助。

watch for Your app在设备上运行时首次向FCM注册时会收到注册令牌。此服务实现一个OnTokenRefresh方法,该方法在最初创建或更改注册令牌时调用。运行OnTokenRefresh时,它从FirebaseInstanceId.Instance.token属性检索最新的令牌。OnTokenRefresh很少被调用:它用于在几种情况下更新令牌。有关更多详细信息,请阅读.Visual Studio For Mac(v8.3.11)菜单:Visual Studio>首选项>项目>Android>在应用程序部署之间保留数据/缓存。谢谢@DFalconer
     [Service]
[IntentFilter(new[] { "com.google.firebase.INSTANCE_ID_EVENT" })]
public class MyFirebaseIIDService : FirebaseInstanceIdService
{
    const string TAG = "MyFirebaseIIDService";

    public override void OnCreate()
    {
        base.OnCreate();
        //FirebaseInstanceId.Instance.GetToken();
    }
    public override void OnTokenRefresh()
    {
        var refreshedToken = FirebaseInstanceId.Instance.Token;
        App.NotificationToken.Token = refreshedToken;
        Log.Debug(TAG, "Refreshed token: " + refreshedToken);
    }        
}