2016-11-07 169 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

嗨,你有沒有發現解決這個問題呢?我也陷入了同樣的情況。 –

相關問題