我按照谷歌的例子来获取令牌但没有成功.总是无法获得令牌.这是Google在您的网页上显示的最新方式开发人员我认为该错误不在我的代码中
private String CLIENTE_ID = "...apps.googleusercontent.com"; GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(CLIENTE_ID) .requestEmail() .build(); // Build GoogleAPIClient with the Google Sign-In API and the above options. mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); imgBGoogle.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, 9002); } }); @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == 9002) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result, data); } if (requestCode == 9002) { // [START get_id_token] GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); Log.d(TAG, "onActivityResult:GET_TOKEN:success:" + result.getStatus().isSuccess()); if (result.isSuccess()) { GoogleSignInAccount acct = result.getSignInAccount(); String idToken = acct.getIdToken(); // Show signed-in UI. Log.d(TAG, "idToken:" + idToken); Log.d(TAG, "\n "); // TODO(user): send token to server and validate server-side } else { // Show signed-out UI. Log.d(TAG, "idToken: fail"); } // [END get_id_token] } } private void handleSignInResult(GoogleSignInResult result, Intent data) { getToken1(data); getToken2(result); String BOOKS_API_SCOPE = "https://www.googleapis.com/auth/books"; String GPLUS_SCOPE = "https://www.googleapis.com/auth/plus.login"; String mScopes = "oauth2:" + BOOKS_API_SCOPE + " " + GPLUS_SCOPE; } void getToken1(Intent data){ GoogleSignInResult a = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (a.isSuccess()) { Log.d(TAG, "TOKEN 1: " + a.getSignInAccount().getIdToken()); Log.d(TAG, "DISPLAY NAME 1: " +a.getSignInAccount().getDisplayName()); Log.d(TAG, "ID 1: " + a.getSignInAccount().getId()+"\n "); }else{ Log.d(TAG, "ID 1: falhou"+"\n "); } } void getToken2(GoogleSignInResult result){ if (result.isSuccess()) { GoogleSignInAccount acct = result.getSignInAccount(); Log.d(TAG, "TOKEN 2: " + acct.getIdToken()); Log.d(TAG, "DISPLAY NAME 2: " + acct.getDisplayName()); Log.d(TAG, "ID 2: " + acct.getId()+"\n "); }else{ Log.d(TAG, "ID 2: falhou"+"\n "); } }
我该如何获得令牌?谁能帮我?
我只是偶然发现了类似的问题,我没有使用网络OAuth客户端,它使用了firebase,我认为这个更简单的解决方案可能对某人有所帮助.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)) .requestEmail() .build();
无需定义default_web_client_id,它将作为粘贴工作.它是由google-services插件生成的字符串.