[android] Android의 새로운 Google 로그인

새로운 Google Play 서비스 8.3을 사용하여 사용자 토큰 ID를 얻으려고하는데 문서화 된대로 서버 ID를 전달합니다.

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

하지만 여전히 아래와 같이 성공적이지 않은 결과를 얻고 있습니다.

{statusCode=unknown status code: 12501, resolution=null}

여기에 문서화 GoogleSignInStatusCodes

사용자가 로그인을 취소했습니다. 즉, 사용자가 계정 선택 또는 OAuth 동의와 같은 일부 로그인 해결을 취소했습니다.

상수 값 : 12501

이미 계정을 선택했기 때문에 그것은 내 경우가 아닙니다. 이유가 무엇인지 아십니까?



답변

나는 똑같은 문제가 있었고 해결책을 찾았습니다.

여기에있는 문서를 따르는 경우 :
https://developers.google.com/identity/sign-in/android/start-integrating

첫 번째 단계에서는 구성 파일 (OAuth 2.0 클라이언트 ID를 만들어 google-services.json에 삽입)을 만들도록 지시합니다.

그런 다음 나중에 OAuth 2.0 클라이언트 ID를 만드는 방법에 대해 다시 언급하지만 이번에는 웹 응용 프로그램에 대해 수행해야한다고 말합니다.

그리고 이것은 혼란스러운 부분입니다! (적어도 나를 위해) 나는 안드로이드 OAuth를 위해 생성 된 클라이언트 ID를 취하고 웹 애플리케이션을 위해 새로운 것을 생성하지 않았기 때문에 (문서가 중복되거나 무언가라고 생각했습니다)

그것이 말했듯이, 이것은 이것 뿐이며 requestIdToken 또는 requestServerAuthCode 메소드의 매개 변수로 사용해야하는 유일한 것 입니다.

이 메서드에서 Android OAuth ID를 사용하는 것은 잊어 버리십시오. 그러면 항상 추악한 상태 코드 응답 12501을 받게됩니다.

주된 문제는 문서가 이것에 대해 약간 혼란 스럽다는 것입니다. 또는 두 개의 OAuth ID를 만들어야한다는 사실이 조금 이상하기 때문일 수 있습니다.

요약하자면 Android 용과 웹 애플리케이션 용으로 각각 하나씩 두 개의 OAuth ID가 필요하며 각 ID를 올바른 위치에 설정해야합니다.


답변

나는 이것으로 어려움을 겪었고 거의 일주일을 낭비했습니다.

이것이 내가 일한 방법입니다.

  1. AndroidStudio에서 프로젝트 가져 오기
  2. 프로젝트에 대한 디버그 키 저장소를 만듭니다.
  3. 디버그 키 저장소를 사용하여 프로젝트에 대한 SHA1 서명을 만듭니다.
  4. SHA1 서명을 사용하여 Google 개발자 콘솔에서 Google 로그인에 앱을 등록합니다.
  5. 거기에 Google 구성 파일을 생성하십시오. (Android Studio의 앱 폴더에 넣으십시오)
  6. Android 프로젝트에서 OAuth 2.0 자격 증명의 웹 클라이언트 ID를 사용합니다.
  7. 이제 Android Studio에서 프로젝트의 디버그 빌드 (APK)를 생성합니다.
  8. 시스템에 기기를 마운트-> 서명 된 APK 디버그 버전을 복사하여 설치합니다.

마지막 세 단계 6, 7 및 8 은 실제로 처리해야하는 것입니다. 프로젝트를 직접 실행하면 APK가 실제로 디버그 키 저장소로 서명되지 않고 Google에서 전혀 인식하지 못합니다.


답변

동일한 문제가 발생했습니다. 연구 솔루션 후 server_client_id에 잘못된 값이 포함되어 있거나 google_services.json에 키 저장소에 등록 된 client_id와 함께 oauth_client가 포함되지 않았다는 것이 재개되었습니다.

requestIdToken(getString(R.string.server_client_id))

R.string.server_client_id웹 애플리케이션에 OAuth 2.0 클라이언트 ID를 사용합니다 . google_services.json에서 Android 용 OAuth 클라이언트 ID 사용

일반적으로 2 개의 키 저장소를 사용합니다. 1 개는 디버그 키 저장소를 사용하고 1 개는 게시 용으로 서명 된 키 저장소를 사용합니다. 따라서 디버그 및 게시 모드에서 필요한 경우 Android 용 OAuth 클라이언트 ID를 두 번 등록합니다. 하나는 디버그 키 저장소의 SHA1을 사용하고 하나는 게시를 위해 서명 된 키 저장소에서 사용합니다.

내 google_services.json의 작은 예

  "oauth_client": [
    {
      "client_id": "xxx-client-id.com",
      "client_type": 1,
      "android_info": {
        "package_name": "com.app.android",
        "certificate_hash": "xxxhash"
      }
    },
    {
      "client_id": "yyy.client-id.com",
      "client_type": 1,
      "android_info": {
        "package_name": "com.app.android",
        "certificate_hash": "yyyhash"
      }
    }
  ],


답변

동일한 문제가 발생했습니다. Android 애플리케이션 유형의 클라이언트 ID를 생성했기 때문입니다.

대신 삭제하고 웹 애플리케이션 유형의 클라이언트 ID를 생성하여이 문제를 제거했습니다.


답변

이 문제를 해결하는 방법을 알아보세요 … 내 앱의 디버그 버전을 실행하는 동안이 오류가 발생했습니다 … 문제를 해결하려면 개발자 콘솔과 google-services에서 디버그 앱에 대한 자격 증명을 추가하세요. .json.

이것은 나를 위해 그것을 고쳤습니다!


답변

나는 같은 문제가 있었고 다음 해결책으로 해결했습니다.

  1. 여기에 설명 된대로 구성 파일 (google-services.json)을 만들고 / app 프로젝트 디렉토리에 배치합니다.
  2. (다른 답변에서 언급했듯이) 웹 응용 프로그램 클라이언트 ID를 사용하여 requestIdToken방법.
  3. [내 주요 문제] 아래와 같이 디버그 모드에서 작업하는 경우 앱에 서명하세요.
 signingConfigs {
    release {
        storeFile file("myreleasekey.keystore")
        storePassword "password"
        keyAlias "MyReleaseKey"
        keyPassword "password"
    }
 }

 buildTypes {
     release {
         ...
     }
     debug {
         ...
         signingConfig signingConfigs.release
     }
 }


답변

이제 알았습니다.

따라서 먼저 다음과 같은 상위 답변을 따라야합니다.

  1. Google Developers Console에서 웹 애플리케이션 용 OAuth 클라이언트 ID를 만들고 사용합니다 requestIdToken()
    (상태 코드 12501 제거).
  2. 프로덕션 해시 키용 Android OAuth 클라이언트 ID를 만든 경우 디버그 해시 키용 새 Android OAuth 클라이언트 ID를 만들고이를 google-services.json에 통합합니다. (상태 코드 12500 제거)

더 이상 유효
그리고 여기 마지막 부분은 온다 : 3. 호출 할 수 없습니다 requestIdToken()requestEmail()한 번에. 적어도 제 경우에는 Result: Status{statusCode=INTERNAL_ERROR, resolution=null}을 삭제하여 제거 했습니다 requestEmail().

행운을 빕니다 …