programing

잘못된 키 해시를 가진 Android Facebook 통합

stoneblock 2023. 8. 7. 22:17

잘못된 키 해시를 가진 Android Facebook 통합

내 앱 중 하나에서 Facebook에서 데이터를 가져와야 합니다.나는 이것을 하고 있습니다.

아이디를 만들었습니다.성공적으로 로그인하지만 로그아웃한 후 로그인하면 다음과 같은 메시지가 나타납니다.

Screenshot of invalid key hash error Facebook

내가 뭘 잘못하고 있는 거지?Facebook SDK를 사용하고 있습니다...나는 내 핸드폰에 페이스북을 설치했습니다...에뮬레이터 내에서 잘 실행되고 있지만 내장된 Facebook 응용 프로그램이 설치되어 있지 않습니다.

내 코드는 다음과 같습니다.

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}

생성된 해시 키가 잘못되었습니다.두 단계를 사용하여 해시 키를 얻을 수 있습니다.

하나는 명령 프롬프트를 통해서입니다.또 다른 방법은 코딩입니다.명령 프롬프트를 통한 해시 키는 처음에만 작동합니다.이유를 모르겠습니다.저도 같은 문제를 겪고 있습니다.그래서 저는 프로그래밍 방식으로 시도했습니다.

다음 단계를 수행합니다.

를 다코드붙여니다습에 .oncreate().

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

위 코딩에서 패키지 이름으로 "com.example.package name"을 반드시 수정하십시오(Android 매니페스트 파일에서 패키지 이름을 찾을 수 있음).

응용 프로그램을 실행합니다.위의 코드를 붙여넣은 활동으로 이동합니다.LogCat 파일에서 "KeyHash"를 검색합니다.키 해시를 찾을 수 있습니다.키 해시를 복사하고 Facebook 응용 프로그램 대시보드 페이지로 이동합니다.설정으로 이동하여 아래 이미지와 같이 세부 정보를 입력합니다.

Enter image description here

위의 단계를 마쳤으면 앱을 다시 시작합니다.이제 Facebook에 로그인할 수 있습니다.키 해시에 대한 자세한 내용은 링크를 참조하십시오.

설정 페이지에 잘못된 정보를 추가하면 오류가 발생합니다.그래서 거기에 정확한 정보를 사용하세요.또한 사용자 이외의 일반 사용자가 응용프로그램을 사용해야 할 경우에는 권한을 사용 가능으로 설정해야 합니다(설정 옆의 "상태 & 검토"에서 "예" 변경).

Google Play 앱 서명을 사용하는 경우:

Google Play Console에서 App 서명 섹션을 열고 App 서명 인증서 아래SHA-1 해시를 가져옵니다.그런 다음 이 도구를 사용하여 Base64로 변환합니다.16진수 -> base64 문자열 디코더

Console screenshot

Convert to Base64 screenshot

이 문제가 발생할 경우 키를 developer.facebook.com 에 입력합니다.

Enter image description here

그런 다음 앱이 developer.facebook.com 에서 활성화되어 있는지 확인합니다.

이 녹색 원은 앱이 활성 상태임을 나타냅니다.

Enter image description here

그렇지 않은 경우 다음 두 단계에 따라 앱을 활성화합니다.

1단계 애플리케이션→설정연락처 전자 메일을 추가하고 변경 내용 저장을 적용합니다.

2단계 앱 검토 옵션으로 이동하여 이 전환이 예인지 확인합니다.스크린샷을 추가했습니다.

Enter image description here

참고: 해시 키를 복사하려면 LogCat에서 BlueServiceQueue를 확인합니다.

저도 같은 문제가 생겼어요.저는 그것이 아주 작은 실수 때문이라고 확신했고, 네, 그렇습니다!

해결책을 찾았습니다.

컴퓨터에서 디버그 해시 키를 생성할 때 시스템의 암호를 입력했습니다.하지만 비밀번호는 다음과 같아야 합니다.

키 저장소 암호 "안드로이드"를 입력하십시오.이것이 제 경우의 유일한 문제였습니다.

디버그 키 해시를 생성하려면 다음 명령을 사용합니다.

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

키 저장소 암호 입력: 'Android'

릴리스 키 해시를 생성하려면 다음 명령을 사용합니다.

keytool -exportcert -alias "alias of keystore" -keystore "Your path to the keystore when signing app" | openssl sha1 -binary | openssl base64

이 명령을 실행한 후 키 저장소 암호를 입력하십시오.

저도 같은 문제를 겪었습니다.저는 이 이상한 행동의 가능한 이유에 대해 짧은 연구를 했고 다음과 같은 것을 발견했습니다.

  • Facebook 앱을 처음 실행하는 동안 키 해시를 지정하지 않더라도 연결/로그인을 허용합니다.

  • 페이스북이 제공한 튜토리얼은 잘못된 구성을 제공했기 때문에 올바른 키 해시를 생성하지 못했습니다.실행 시:

    keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
    base64
    

하십시오. - 모든속야합니다확인.HOMEPATH해야 할 수도 .아마도 당신은 비밀번호도 제공해야 할 것입니다.

  • 적절한 구성을 생성한 것은 @Mahendran이 제안한 솔루션입니다.

  • 또한, 만약 당신이 원래 게시된 오류를 본다면 (https://i.stack.imgur.com/58q3v.png), 은 아마도 당신의 실제 해시일 것입니다.다른 방법이 없다면 페이스북에 입력해 보세요.

Windows 7 64비트 에디션, Android Studio 1.2.2, JDK 7과 같은 모든 결과를 얻었습니다.

이것이 제가 이 문제를 해결한 방법입니다.

먼저 SHA-1 값을 얻어야 합니다.그것에는 두 가지 방법이 있습니다.

Android Studio에서 SHA-1 값을 가져옵니다.

  1. 그라들 클릭
  2. 보고서 서명 클릭
  3. SHA-1 값 복사

OR

저장소 파일에서 SHA-1 값을 가져옵니다.

keytool -list -v -keystore keystore_file_name.jks -alias key0

다음과 같이 SHA-1 값을 클립보드에 복사합니다.

CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

그리고 16진수 -> Base64 문자열 디코더를 열어 SHA-1 값을 Base64로 변환합니다.

이것이 페이스북이 요구하는 것입니다.

생성된 해시 " *************="를 가져와서 키 해시를 Facebook 앱에 복사합니다.

Android용 Facebook Login에 따르면 키 해시 값을 제공해야 합니다.이를 얻으려면 신청서에 서명하는 데 사용되는 가 필요합니다.

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64

저는 이전의 모든 답변을 시도했지만 제 고객과의 사건에 도움이 되지 않았습니다!

그리고 나서 제 고객은 그가 페이스북 앱을 그의 기기에 설치한 것을 기억했습니다.그가 그것을 제거한 후에, 로그인은 완벽하게 작동했습니다.

해시 키가 변경되었고, Facebook Developers Console에서 이전 해시 키를 오류 키(위에서 제안한 대로)로 교체했는데 작동합니다!

페이스북 앱 자체가 문제일 수 있으니 페이스북 앱이 설치된 기기와 페이스북 앱이 설치되지 않은 기기에서 이를 파악하고 두 가지 경우를 모두 처리하는 것이 좋습니다...

디버그용과 릴리스용으로 두 개의 키 해시를 만들어야 합니다.

디버그 키 해시의 경우:

OS X에서 다음을 실행합니다.

keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

Windows에서 다음을 실행합니다.

keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore | openssl sha1 -binary | openssl
base64

디버그 키 해시 소스

릴리스 키 해시의 경우:

OS X에서 다음을 실행합니다(중간 값으로 대체).

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

Windows에서 다음을 사용합니다(중간 값으로 바꾸기).

keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64

해제 키 해시 소스

이 질문에 많은 도움이 되는 방법으로 답변했지만, 제가 Rafal Malex 답변을 팔로우했을 때(Google Play Console의 해시 키 사용) 앱 서명 SHA1 키를 사용할 수 없었고 여전히 페이스북에서 일반 오류가 발생했습니다.대신 인증서 업로드 부분(Google Play Console의 앱 서명 부분 바로 아래)에서 SHA-1 인증서 지문을 사용해야 했습니다.그렇지 않은 경우 동일한 프로세스;

  1. Google Play Console의 인증서 업로드 섹션에서 SHA-1 인증서 지문 복사

  2. 다음을 사용하여 SHA-1 변환: http://tomeko.net/online_tools/hex_to_base64.php 및 출력 복사(base64)

  3. developer.facebook.com 의 키 해시 입력에 붙여넣고 변경 내용을 저장합니다.

이 답변이 중복되지 않기를 바라며 앱 서명 인증서를 사용할 수 없는 사람에게 도움이 되기를 바랍니다.

이제 Facebook 로그인은 디버그 모드와 릴리스 모드 모두에서 내 앱에서 작동합니다.

다음 코드는 Facebook용 해시를 제공하지만 릴리스 후보 해시를 얻으려면 다음 단계를 따라야 합니다.

  1. 이 코드를 복사하여 기본 활동에 붙여넣기

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                               "com.example.packagename",
                               PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    }
    catch (NameNotFoundException e) {
    }
    catch (NoSuchAlgorithmException e) {
    }
    
  2. 서명된 APK 파일을 생성합니다.

  3. 랩톱에 전화기를 연결하고 연결 상태를 유지합니다.
  4. 릴리스 APK를 전화기로 수동으로 이동하여 전화기에 APK 파일을 설치하고 실행합니다.
  5. 이제 Android LogCat(필터 KeyHash: 사용)을 확인합니다.Facebook용 릴리스 해시 키를 확인해야 합니다.복사하여 당신의 컴퓨터에 붙여넣기만 하면 됩니다.https://developers.facebook.com/apps설정 중입니다.
  6. 이제 앱이 완벽하게 작동하는지 테스트할 수 있습니다.

저도 같은 문제를 겪고 있었습니다.처음 로그인하면 문제가 없지만 잘못된 키 해시가 있습니다.

Facebook SDK for Unity가 잘못된 키 해시를 가져옵니다."C:"에서 키를 얻습니다.\Users\"사용자."안드로이드\디버그.keystore"를 사용할 수 있습니다. 완벽한 환경에서는 프로젝트에서 생성한 keystore에서 가져올 수 있습니다.그래서 키 해시가 등록되지 않았다고 알려주는 것입니다.

Madi가 제안한 대로 이 링크의 단계에 따라 올바른 키를 찾을 수 있습니다.프로젝트 내의 키 저장소를 가리키도록 하십시오.그렇지 않으면 올바른 키를 얻을 수 없습니다.

키 해시를 수동으로 입력하는 경우(예: 모바일에서 Facebook 대시보드로) 작은 L과 대문자 I를 구분해야 합니다.

오랜 연구 끝에, 우리는 해결책을 찾았습니다.

권한을 다음과 같이 설정했습니다.

loginButton.setReadPermissions(public_profile email);

처음에는 작동했지만 Facebook에 다시 로그인했을 때 잘못된 해시 오류가 발생했습니다.

간단한 해결책은 위의 행을 다음과 같이 변경하는 것이었습니다.

loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));

그리고 그것은 행복처럼 작동했습니다!

Facebook은 잘못된 해시 키 오류 대신 올바른 예외를 반환해야 합니다.

수많은 시련 끝에 저는 이것에 대한 해결책을 발견했습니다.페이스북 개발자 콘솔에 디버그 키와 릴리스 키를 모두 생성하여 추가했는데 오류가 발생했습니다.

Google에서 OpenSSL 프로그램을 제거하고 Windows용 Win32/Win64 OpenSSL Installer에서 다운로드하는 것이 유일한 해결책이었습니다.

정말 마법처럼 작동합니다.

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "www.icognix.infomedia",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (PackageManager.NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

다음 코드를 OnCreate 메서드에 붙여넣습니다.

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (NameNotFoundException e) {
    e.printStackTrace();
}
catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

패키지 이름만 수정하면 됩니다.그런 다음 LogCat 파일로 이동하여 여기서 Debug search를 선택합니다.그러면 해시 키를 찾을 수 있습니다.이제 이 해시 키를 복사한 다음 developer.facebook.app_id 사이트로 이동하여 해시 키를 편집하고 를 누릅니다.이제 Android 프로젝트를 다시 실행합니다.저는 문제가 해결될 것이라고 생각합니다.

이것은 같은 문제를 가진 누군가에게 도움이 될 수 있습니다.

  1. 아래 코드를 사용하여 키 해시 생성

    keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64
    

    키 도구 사용 방법

  2. Facebook 개발자의 필수 필드에 붙여넣기

  3. Android Studio에서 메뉴 파일 → 프로젝트 구조

    Enter image description here

    서명 매개 변수를 추가합니다.

  4. 맛 선택

    Enter image description here

    작성한 서명 구성을 선택합니다.

  5. 빌드 유형 선택

    Enter image description here

  6. 빌드 변형을 선택하고 빌드합니다.

    Enter image description here

앱을 디버깅할 때도 같은 문제가 있었습니다.첨부된 이미지에서 지운 해시(Facebook이 유효하지 않다고 하는 해시)를 다시 작성하여 Facebook의 개발자 콘솔에 키 해시에 추가했습니다.오타를 조심하세요.

이 솔루션은 적절한 솔루션이라기보다는 쉬운 해결책에 가깝습니다.

저는 많은 사람들이 어려운 답변을 하는 것을 보았습니다. 제가 문제를 해결한 요점은 터미널을 사용하여 프로젝트/안드로이드 폴더/앱으로 이동하는 것입니다. 여기가 디버그입니다.키 저장소 파일은

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

이 명령을 복사하여 붙여넣고 별칭을 바꾸고 프로젝트/patch/app/build.gradle에 있는 동일한 암호를 사용합니다.

debug {
  storeFile file('debug.keystore')  
  storePassword 'android'
  keyAlias 'androiddebugkey'      <---- alias
  keyPassword 'android'           <---- password
}

Facebook이 사용한 것은 디버그를 위한 기본 암호와 별칭이 아닙니다.당신은 그것을 다음과 같이 변경해야 합니다. 그러면 작동할 것입니다.

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

기본 암호로 아무것도 변경하지 않은 경우 "안드로이드"여야 합니다.

build.gradle 파일에서도 구성할 수 있습니다.그러나 해시 생성에는 동일한 별칭 암호를 사용해야 합니다.

android {
    signingConfigs {
        release {
            storeFile file("~/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
}

여기 많은 정답들이 있습니다.단 한 가지:

수신된 해시를 빠른 시작 자습서가 아닌 응용 프로그램 → 설정 → 주에 붙여넣습니다.

저도 같은 문제가 있었습니다.

Facebook developers 섹션에 저장된 해시 키를 생성한 것과 동일한 장치로 APK 파일을 빌드해야 합니다.

다음을 추가하여 수정했습니다.MainApplication.onCreate:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.genolingo.genolingo",
                           PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
        KeyHash.addKeyHash(hash);
    }
}
catch (PackageManager.NameNotFoundException e) {
    Log.e("PackageInfoError:", "NameNotFoundException");
}
catch (NoSuchAlgorithmException e) {
    Log.e("PackageInfoError:", "NoSuchAlgorithmException");
}

저는 구글 개발자 콘솔에 이것을 업로드하고 파생된 APK를 다운로드했습니다. 어떤 이유에서건 전혀 다른 키 해시를 가지고 있습니다.

그런 다음 LogCat을 사용하여 새 키 해시를 결정하고 다른 사용자가 개요를 설명한 대로 Facebook에 추가했습니다.

릴리스 키 해시를 생성하는 경우 "Android"가 아닌 키 저장소의 실제 암호를 입력해야 합니다.

이것이 제 문제였습니다.디버그 릴리스가 작동했지만 APK 릴리스가 작동하지 않았습니다.

저도 같은 문제를 겪었습니다.문제를 해결한 것은 화면의 해시를 앱에 추가하는 것입니다.

미안하지만 실제로 저에게 효과가 있었던 것은 아무것도 없습니다.마지막으로 제가 도움이 된 것은 구글 플레이 콘솔에서 업로드 SHA-1 인증서 지문을 가져와 base64로 변환하여 페이스북에 추가한 것입니다.도움이 필요한 사람이 있으면 댓글을 달아주세요.

저는 디버그의 phat를 변경하여 이 문제를 해결했습니다.keystore, 올바른 pat은 안드로이드 프로젝트 파일의 pat여야 합니다.다음과 같이:

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\yourUser\Documents\other\yourProjectName\android\app\debug.keystore" | "C:\openssl\openssl-3\x64\bin\openssl" sha1 -binary | "C:\openssl\openssl-3\x64\bin\openssl" base64

만약 당신이 어떻게 해야 할지 모른다면.SSL 유튜브에서 이 비디오를 추천합니다: https://youtu.be/aZlkW3Evlx4

활동의 onCreate() 메서드에서 다음 코드를 사용합니다.

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "your application package name",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

이 코드를 실행합니다.해시 키가 생성됩니다.Facebook 응용 프로그램 설정에서 이 KeyHash를 복사하고 변경 사항을 저장합니다.그런 다음 프로그램에 로그인합니다.이것은 미래에도 완벽하게 작동할 것입니다.

언급URL : https://stackoverflow.com/questions/23674131/android-facebook-integration-with-invalid-key-hash