2017-07-20 37 views
0

我正在整合Android的Google登錄功能,並且希望將id_token返回,以便我可以使用我的服務器進行身份驗證。我跟所有的步驟爲https://developers.google.com/identity/sign-in/android/backend-authAndroid Google SignIn結果爲空

如果我要求只是requestEmail()然後我又回到個人資料信息,但如果我添加.requestIdToken(getString(R.string.server_client_id))然後result.isSuccess()是假的,我沒有得到任何帳戶信息回來。有任何想法嗎?

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestEmail() 
      .requestIdToken(getString(R.string.server_client_id)) 
      .build(); 

onActivityResult:

  GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
      if (result.isSuccess()) { 
        GoogleSignInAccount acct = result.getSignInAccount(); 
        String idToken = acct.getIdToken(); 
        mIdTokenTextView.setText("ID Token: " + idToken); 
        // TODO(user): send token to server and validate server-side 
      } else { 
        mIdTokenTextView.setText("ID Token: null"); 
      } 

如果我打電話的 「結果」 的任何方法,然後我得到一個空指針錯誤...

了java.lang.RuntimeException:失敗將結果ResultInfo {who = null,request = 9001,result = 0,data = Intent {(has extras)}}傳遞給活動{com.test.LoginActivity}:java.lang.NullPointerException

+0

您是否已經在Google開發人員控制檯中完成了相關任務? – Nabin

+0

看到「result.getStatus()。getStatusMessage()」這裏你應該會發現錯誤信息 –

+0

@an_droid_dev我得到空指針錯誤.. java.lang.RuntimeException:發送結果失敗ResultInfo {who = null,request = 9001 ,結果= 0,數據=意圖{(有額外)}}活動{com.test.LoginActivity}:java.lang.NullPointerException –

回答

0

已解決!

因此,6小時後,我的頭,發現問題。顯然,當你使用SSH1創建config.json時,google會自動創建一個與此項目相關的Web OAuth2密鑰。我注意到Google創建了3個具有相同名稱的項目(一個用於firebase,一個用於Web,另一個不確定)

因此,抓住與同一個Android項目鏈接的Web客戶端ID。哦谷歌!

0

我在研究這個問題後發現,發現結果是拋出空指針異常,因爲 android:launchMode="singleInstance"在活動清單中。

因此,請確保將啓動模式更改爲'singleTop',或者不要給任何launchmode用於您的活動例如:signinActivity;

+0

這個答案沒有任何意義,因爲他從未發佈他的'manifest' – Steven

+0

這個答案真的工作。在JellyBean上,登錄在singleInstance模式下失敗,但在singleTop中成功,而在Oreo上,它在兩種模式下均可使用。 – pfaehlfd

相關問題