2014-07-16 28 views
2

我試圖通過Google Plus登錄獲取授權碼,以便在服務器上使用它。 G +登錄工作,我登錄了設備,但是當我嘗試獲取令牌時,我收到了一條異常,其中包含超級有用的消息Unknown。這是代碼:GoogleAuthException「Unknown」試圖獲取令牌

private class GoogleLoginTask extends AsyncTask<Void, Void, String> { 
    private static final String LOGIN_SCOPES = 
     "https://www.googleapis.com/auth/plus.login " + 
     "https://www.googleapis.com/auth/userinfo.email"; 

    @Override 
    protected String doInBackground(Void[] params) { 
     String apiKey = getApplicationMetaData("google.client-id"); 
     String scopes = "oauth2:server:client_id:" + apiKey 
         + ":api_scope:" + LOGIN_SCOPES; 

     Bundle appActivities = new Bundle(); 
     appActivities.putString(GoogleAuthUtil.KEY_REQUEST_VISIBLE_ACTIVITIES, 
           "http://schema.org/AddAction"); 
     String code = null; 

     try { 
      code = GoogleAuthUtil.getToken(getBaseContext(), 
        getPlusClient().getAccountName(), scopes, appActivities); 

     } catch (IOException e) { 
      Toast.makeText(getBaseContext(), R.string.error_network, Toast.LENGTH_LONG).show(); 
     } catch (UserRecoverableAuthException e) { 
      startActivityForResult(e.getIntent(), AUTH_CODE_REQUEST_CODE); 
     } catch (GoogleAuthException e) { 
      Log.e(TAG, "Google auth exception: ", e); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
     return code; 
    } 
} 

我已經採取了代碼直接從Developer Page。儘管文檔沒有闡明許多參數,但我認爲我的理解正確。

我已經三重檢查了apiKeygetPlusClient().getAccountName()的內容,它們是正確的。我確保應用程序和服務器位於API控制檯的同一個項目中。

不知道我還能做什麼錯。

回答

4

我發現了這個問題:build.gradle文件比在API控制檯中設置的applicationId有一個稍微(錯別字)的值。

雖然在這種情況下一些簡單的錯誤信息會很好。

+0

不知道爲什麼我不能接受這是正確的答案,但AndroidManifest中錯誤的應用程序ID在檢索令牌時會導致「未知」異常。 –