2016-11-29 2 views
3

in the Firebase unity3D SDK Когда я пытаюсь получить учетные данные, я прошу у меня id_token и access_token.Firebase: Аутентификация с использованием Google. Где я должен получить id_token?

Я предполагаю, что access_token должен быть нулевым для некоторых примеров, которые я видел, но я понятия не имею, что делать с этим id_token. Пример кода:

Это вызов:

Firebase.Auth.GoogleAuthProvider.GetCredential(string id_token,string access_token); 

Это Unity3D пример кода:

public void GoogleLogin(Action<bool> loginOK) 
{ 
    string id_token = "90096201****-353hvgf63fecvvc3mi****s6140f98a.apps.googleusercontent.com"; 
    Firebase.Auth.Credential credential; 
    credential = Firebase.Auth.GoogleAuthProvider.GetCredential(id_token,null); 
    auth.SignInWithCredentialAsync(credential).ContinueWith (task => 
    { 
     if (!task.IsCanceled && !task.IsFaulted) 
     { 
      loginOK(true); 
     } 
     else 
     { 
      loginOK(false); 
     } 

     if (task.Exception != null) 
     { 
      Debug.LogException(task.Exception); 
     } 
    }); 
} 

Я думал, что это будет OAuth 2.0 маркер, который приходит из из консоли Google. Но это, похоже, не работает. Google ответ говорит мне следующее:

11-29 13: 58: 25.476 com.google.android.gms 2009 3225 I AuthChimeraService
"сообщение": "Невозможно разобрать Google id_token: 90096201 **** - **** 353hvgf63fecvvc3mi s6140f98a.apps.googleusercontent.com»

Любая идея о том, что я делаю неправильно?

+0

Вы определили этот вариант? Я не слишком люблю строить мост между Android и Unity, если это не совсем необходимо, и я не хочу использовать сторонние плагины. – Leniaal

+0

Я тоже застрял в той же проблеме. Вы уже определились с этим? –

ответ

0

firebase sample for google sign in in unity должен помочь вам в этом. Одним из первых шагов упоминает:

Следуйте инструкциям для Android и iOS, чтобы получить идентификатор маркера для знака Google в

firebase документация также подраздел для manually verifying id tokens, но они делают совет против. это.

+1

В примере не показано, как получить idtoken из Unity3D. Также их документы устарели. –

+1

@MX D Недостаточно документации для объяснения, где я могу получить строку id_token, string access_token. У меня есть пустой проект с импортированным FirebaseAuth.unitypackage. –

0

Да, это OAuth 2.0 маркер, который необходим здесь,

для этого вы можете использовать это.

n Вы не можете предоставить свой токен, поскольку он может измениться в отношении пользователя.

private void getGoogleOAuthTokenAndLogin() { 
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); 
    // Log.e("SahajLOG", "Login PREF ISSSSSSSS ONCREATE "+prefs.getBoolean("AuthByGplus", AuthByGplus)); 
    if (!prefs.getBoolean("AuthByGplus", AuthByGplus)) { 
     AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() { 
      String errorMessage = null; 

      @Override 
      protected String doInBackground(Void... params) { 
       String token = null; 

       try { 
        String scope = String.format("oauth2:%s", Scopes.PLUS_LOGIN); 
        token = GoogleAuthUtil.getToken(MainActivity.this, Plus.AccountApi.getAccountName(mGoogleApiClient), scope); 
       } catch (IOException transientEx) { 
       /* Network or server error */ 
        Log.e("SahajLOG", "Error authenticating with Google: " + transientEx); 
        errorMessage = "Network error: " + transientEx.getMessage(); 
       } catch (UserRecoverableAuthException e) { 
        Log.w("SahajLOG", "Recoverable Google OAuth error: " + e.toString()); 
       /* We probably need to ask for permissions, so start the intent if there is none pending */ 
        if (!mIntentInProgress) { 
         mIntentInProgress = true; 
         Intent recover = e.getIntent(); 
         startActivityForResult(recover, MainActivity.GOOGLE_SIGIN); 
        } 
       } catch (GoogleAuthException authEx) { 
       /* The call is not ever expected to succeed assuming you have already verified that 
       * Google Play services is installed. */ 
        Log.e("SahajLOG", "Error authenticating with Google: " + authEx.getMessage(), authEx); 
        errorMessage = "Error authenticating with Google: " + authEx.getMessage(); 
       } 

       return token; 
      } 

      @Override 
      protected void onPostExecute(String token) { 
       mGoogleLoginClicked = false; 
       Intent resultIntent = new Intent(); 
       if (token != null) { 
        Log.e("SahajLOG", "TOKEN IS " + token); 
       //  firebaseAuthWithGoogle(token); 


        //onGoogleLoginWithToken(token); 
        resultIntent.putExtra("oauth_token", token); 
       } else if (errorMessage != null) { 
        resultIntent.putExtra("error", errorMessage); 
       } 
       setResult(MainActivity.GOOGLE_SIGIN, resultIntent); 
       finish(); 
      } 
     }; 
     task.execute(); 
    } 
    Log.e("SahajLOG", "oAuthCalled"); 
    /* Get OAuth token in Background */ 
} 
+0

Помните, что я использую Unity3D. Предполагается, что я должен сделать это из единства. –

+0

Вы пробовали ** Плагин Google Play Games для Unity ** –

+0

Вопрос в том, должен ли я использовать другую третью сторону для получения учетных данных для Firebase? –