2016-11-07 158 views
3

新的Firebase for Unity支持刚刚发布到Beta中,我正在尝试使用它进行Auth验证。我已经有一个Google登录,它使用GooglePlayGames.PlayGamesPlatform.Instance.GetServerAuthCode中的授权码实现oauth2流,并将其发送到服务器,该服务器使用https://www.googleapis.com/oauth2/v4/token端点交换访问令牌。Firebase.Auth.GoogleAuthProvider.GetCredential的第一个参数是什么?

我假设这个访问令牌是Firebase.Auth.GoogleAuthProvider.GetCredential方法的第二个参数,但是第一个参数要求的ID令牌是什么?是从GooglePlayGames.PlayGamesPlatform.Instance.GetIdToken获得的令牌(与GoogleAuthUtil.GetToken相同,如果我阅读文档/代码是正确的)?

如果是这样,为什么都需要?我认为访问令牌是通过谷歌云服务对用户进行身份验证所需要的,并且ID令牌正在被淘汰。

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

GetToken,GetAccessTokenGetIdToken之间的区别是什么,除了GetIdToken需要回调?

回答

1

我设法“破解”这个为了得到它的工作......但我仍然认为正确的方法应该只使用GetServerAuthCode,但我不能让它与它的工作。

当您登录firebase时,您是否首次获得idToken和AccessToken的正常过程,获取用户的电子邮件并将其存储在播放器首选项中。然后第二次,如果你已经拥有你这样做的电子邮件:

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"); 

希望它能帮助,虽然这将是greatif有人张贴与GetServerAuthCode原因的解决方案是正确的做法

+0

嗨,你有没有发现解决这个问题呢?我也陷入了同样的情况。 –

相关问题