Firebase.Auth.GoogleAuthProvider.GetCredential的第一个参数是什么?

时间:2016-11-07 18:38:32

标签: authentication unity3d firebase firebase-authentication

新的Firebase for Unity支持刚刚发布到Beta版,我正在尝试使用它来实现Auth。我已经使用来自grep -E "^(\d*)(?:\t)13th_Dalai_Lama" input_file 的身份验证代码实现oauth2流程并使用GooglePlayGames.PlayGamesPlatform.Instance.GetServerAuthCode端点将其发送到服务器以获取访问令牌。

我假设此访问令牌是https://www.googleapis.com/oauth2/v4/token方法的第二个参数,但第一个参数要求的ID令牌是什么?这是从Firebase.Auth.GoogleAuthProvider.GetCredential获得的令牌(与GooglePlayGames.PlayGamesPlatform.Instance.GetIdToken相同,如果我对文档/代码的读取是正确的话)?

如果是这种情况,为什么两者都需要?我认为访问令牌是使用谷歌云服务对用户进行身份验证所需的全部内容,并且ID令牌正在逐步淘汰。

编辑:经过一些测试后,我发现传递从GoogleAuthUtil.GetToken获取的ID令牌确实允许Firebase进行身份验证。问题是,它每次都要求用户的电子邮件地址。如果可能的话,我想避免这种情况。

GooglePlayGames.PlayGamesPlatform.Instance.GetIdToken需要回调这一事实外,GetTokenGetAccessTokenGetIdToken之间有什么区别?

1 个答案:

答案 0 :(得分:1)

我设法" hack"这是为了让它工作......但我仍然认为正确的方法应该只使用GetServerAuthCode,但我无法使用它。

第一次获取idToken和AccessToken是正常的过程,当您登录firebase获取用户的电子邮件并将其存储在playerprefs中时。然后第二次,如果您已经收到电子邮件,请执行此操作:

  AndroidJavaClass authUtil = new AndroidJavaClass("com.google.android.gms.auth.GoogleAuthUtil");
    AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
    AndroidJavaObject currentActivity = unity.GetStatic<AndroidJavaObject>("currentActivity");
    string idToken = authUtil.CallStatic<string>("getToken", currentActivity, PlayerData.Email, "audience:server:client_id:XXXXXXXXXX-xxxxxxxxxxxxxx.apps.googleusercontent.com"); // your client id, should be a number a dash and then a bunch of numbers and letters
    string accessToken = authUtil.CallStatic<string>("getToken", currentActivity, PlayerData.Email, "oauth2:https://www.googleapis.com/auth/plus.me");

希望它有所帮助虽然有人会用GetServerAuthCode发布解决方案,因为这是正确的方法