2

GoogleコンソールでAndroidアプリをAPIとして署名し、バックエンドサーバーをGoogleコンソールでoauthクライアントとして署名しました。
私はgradleファイルも更新したので、トークンIDを取得するために必要なものは何でも更新しました。
しかし、どういうわけか、私はいつもグーグルからトークンを取得できません。
Google コンソールからパッケージ名と ssh1 コードを確認し、コマンドを使用してデバッグ ssh1 と一致させました。keytool -list -v -keystore mydebudpath\debug.keystore

ここに Android コードを送信します。

 @Override
      public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    validateServerClientID();
    // [START configure_signin]
    // Request only the user's ID token, which can be used to identify the
    // user securely to your backend. This will contain the user's basic
    // profile (name, profile picture URL, etc) so you should not need to
    // make an additional call to personalize your application.
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.server_client_id))
            .requestServerAuthCode(getString(R.string.server_client_id), false)
            .requestEmail()
            .build();
    // [END configure_signin]

    // Build GoogleAPIClient with the Google Sign-In API and the above options.
    mGoogleApiClient = new GoogleApiClient.Builder(getActivity())
            .enableAutoManage(getActivity()/* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

}

と私の onActivityResult:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_GET_TOKEN) {
        // [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);
            updateUI(true);

            // TODO(user): send token to server and validate server-side
        } else {
            // Show signed-out UI.
            updateUI(false);
        }
        // [END get_id_token]
    }
}

コードresult.getStatus().isSuccess();は常に返されます 上記のコードで、myは、Google 開発者コンソールで Web アプリケーション oauth2 として作成したサーバーの client_id であることfalse
にも注意してください。Android認証コードでAndroidを使用したことはありません。どこで使用すればよいですか? どの部分が間違っていますか?R.string.server_client_id
api_key

4

1 に答える 1

5

これが私のチェックリストです。

  1. 正しいsha1 Google Generate Configureで正しい構成を生成していることを確認してください
  2. アプリ フォルダの google-services.json が正しいことを確認してください
  3. Credentials ページに移動し、正しいプロジェクトを選択していることを確認してください。これは、構成ファイルの生成に使用したものと同じである必要があります。
  4. [資格情報] セクションで、OAuth 2.0 クライアント ID の種類が Android ではなく Web アプリケーションであることを確認します。
  5. string.xml の API キーが Google Developer Console の API キーと一致するかどうかを確認します

他のすべてが失敗した場合は、Google Developer Console で新しいプロジェクトに基づいて新しい API キーを作成することをお勧めします。

有用な情報: developers.google.com/identity/sign-in/android/start-integrating

于 2016-01-19T08:26:20.440 に答える