Android-Facebook 앱의 키 해시


229

Facebook 게시 기능을 통합하려는 Android 앱을 개발 중입니다. Facebook-Android SDK를 다운로드했고 거기에 readme.md (텍스트 파일)가 있는데 여기에는 Android 용 키 해시를 생성한다고 언급되어 있습니다. 어떻게 생성합니까?


2
이 링크를 확인하실 수 있습니다 javatechig.com/2012/12/10/…
— Nilanchal

2
확인 이 여전히 문제를 직면하고있는 사람들을 위해
— 들은 Chintan Khetiya에게

이를 사용하여 디버그 및 릴리스 모드에 대한 HashKey를 생성하십시오. stackoverflow.com/questions/7506392/…
— Naeem Ibrahim

키 가이 비디오를 시청하게하려면
— 곧 산토스

답변:


310

단계는 다음과 같습니다.

  1. Google 코드 에서 openssl 다운로드 (64 비트 시스템을 사용 하는 경우 최신 버전이 아닌 openssl-0.9.8e X64를 다운로드 해야 함 )

  2. 추출하십시오. C : /에 OpenSSL 폴더를 만들고 여기에 추출 된 코드를 복사하십시오.

  3. debug.keystore 파일 경로를 감지하십시오. u를 찾지 못하면 C : /에서 검색하고 다음 단계의 명령에서 경로를 사용하십시오.

  4. keytool.exe 경로를 감지하고 명령 프롬프트에서 해당 dir /로 이동 하여이 명령을 한 줄로 실행하십시오.

    $ keytool -exportcert -alias androiddebugkey -keystore "C : \ Documents and Settings \ Administrator.android \ debug.keystore"| "C : \ OpenSSL \ bin \ openssl"sha1 -binary | "C : \ OpenSSL \ bin \ openssl"base64

    • 암호를 묻고 안드로이드를 넣습니다.
    • 그게 다야. 너는 키 해시를 얻을 것이다.

자세한 내용 은 여기를 방문하십시오


5
이 답변은 Win7 x64에서 거의 효과가있었습니다. 그러나 결과 인코딩 된 인증서가 올바르지 않습니다. 아래의 Bryan Bedard의 답변은 올바른 인증서 값을 생성합니다. 창문의 배관이 어떻게 든 범인이라고 생각합니다.
— Walt Armor

10
64 비트 사용자를위한 참고 사항 : 버전의 openssl-0.9.8e X64이 작품에서만하려면 openssl-0.9.8k X64과 함께 사용하지 마십시오
— 니콜라 Peluchetti

시스템에 openssl-0.9.8e X64를 다운로드하여 압축을 풀었습니다. 데이터가 포함 된 하나의 파일 외에는 아무것도 포함되어 있지 않습니다. 좀 더 알려주세요.
— Ravikiran 2019

2
Windows 시스템에서 java의 bin 폴더에서 명령을 실행해야합니다.
— Antrromet 2019

1
@HanishSharma를 제외하고 시도하십시오 $.
— 금지

241

[편집 2020]-> 이제 나는 안드로이드 스튜디오를 사용하여 더 쉽고, 더 빠르고 코드를 작성할 필요가없는 방법을 여기 에서 완전히 추천합니다. 아래 코드는 일식으로 돌아 왔습니다 :)-.

모든 활동에서이 코드를 사용할 수 있습니다. 디버그 키인 logcat에 해시 키를 기록합니다. 이것은 쉽고 SSL을 사용하는 것보다 안심입니다.

PackageInfo info;
try {
    info = getPackageManager().getPackageInfo("com.you.name", PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md;
        md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String something = new String(Base64.encode(md.digest(), 0));
        //String something = new String(Base64.encodeBytes(md.digest()));
        Log.e("hash key", something);
    }
} catch (NameNotFoundException e1) {
    Log.e("name not found", e1.toString());
} catch (NoSuchAlgorithmException e) {
    Log.e("no such an algorithm", e.toString());
} catch (Exception e) {
    Log.e("exception", e.toString());
}

키를 알고 나면 코드를 삭제할 수 있습니다.;)


27
APK를 만든 후 키 해시가 변경됩니다. 이 코드를 사용하면 디버그 키 저장소 해시를 얻을 수 있지만 APK를 만들 때 다른 해시이므로 에뮬레이터에서 apk를 시도한 후 로그에서 캡처해야합니다. 코드를 삭제 하고이 로그없이 다시 내보내십시오.) D 그러나 나를 위해 그것은 keytool, 행운보다 쉬웠다;)
— Bassem Wissa

4
Opensssl은 항상 문제를 만듭니다. 이 방법이 가장 좋습니다. 빈 응용 프로그램을 만들고 키를 인쇄하십시오. 사용하십시오. 고마워요 !!
— AnhSirk Dasarp

1
이것은 지금까지 가장 쉬운 솔루션입니다. 이 keytool명령을 사용하여 잘못된 키 해시를 얻었습니다 (왜 조사 할만큼 신경 쓰지 않기로 결정했는지 모르겠습니다). 이것은 효과적이고 문자 그대로 디버그 및 릴리스 키 해시를 얻는 데 5 분이 걸렸습니다. +1
— Chris Cirefice

1
예 Sebastien, 서명 된 APK를 장치에 설치하면 안드로이드 스튜디오에 연결하고 로그 고양이를 확인하거나 U가 UI에서 편집 텍스트로 해시를 표시하고 복사 할 수 있습니다. 어쨌든 예이 코드가 생성하는 해시 apk :)
— Bassem Wissa

1
keytool을 사용하는 것은 정말 엉망입니다
— Tabish

135

Windows 및 Mac OS X 용 작은 도구를 만들었습니다. 키 저장소 파일을 던져 해시 키를 얻으십시오.

기본 debug.keystore 파일을 원하는 경우 기본 별명 및 비밀번호를 사용하십시오. 그렇지 않으면, 자신의 키 저장소 파일과 값을 사용하십시오.

그것을 확인 Windows 버전을 다운로드 또는 맥 OS X 버전을 다운로드 (데브 - 호스트 링크가 깨진 경우 그래서, PM 나와 내가 고칠거야 ... 때로는 아래로 수 있습니다).

도움이 되길 바랍니다.

2014 년 12 월 31 일-편집 : 호스트를 AFH로 변경했습니다. 링크가 끊어지면 알려주세요

2013 년 11 월 21 일-편집 :

사용자가 요청한대로 기본 키 저장소 위치와 DONATE 버튼을 추가했습니다 . 내가 도와 주면 언제든지 사용하십시오 . :)

스크린 샷 스크린 샷 2


1
베스트. 방법. 이제까지. 기부 버튼은 어디에 있습니까?
— Adam Varhegyi

1
@ Shahar2k5 정말로 모른다, 다시 시작하고 매력처럼 일했다. 죄송합니다
— Anearion

1
매력처럼 작동합니다! 공유해 주셔서 감사합니다 :)
— Vinayak

1
@Shahar Barsheshet 감사합니다. 당신이 맞아요 Devhost 도메인에서 다운로드했으며 문제가 발생하지 않았습니다.
— MajorGeek

1
이해가 안됩니다 : keytool명령 줄 을 사용하는 것과 비교하여 도구에서 다른 SHA 키를 제공하는 이유는 무엇 입니까? 동일한 키 저장소 파일에 적용되는 경우 동일한 결과를 생성하지 않습니까?
— nightfixed

64

현재 Facebook의 Android 자습서 에있는 지침 은 Windows 에서 제대로 작동하지 않습니다 . 그들의 예제는 keytool 출력을 openssl로 파이프하는 방법을 보여 주지만 Windows에서 이것을 시도하면 어떤 이유로 든 출력이 유효하지 않습니다. 제대로 작동하려면 중간 파일을 사용해야한다는 것을 알았습니다. 나를 위해 일한 단계는 다음과 같습니다.

Google에서 openssl for Windows 를 다운로드 하여 시작하십시오 .

C:\Users\Me>keytool -exportcert -alias my_key -keystore my.keystore -storepass PASSWORD > mycert.bin

C:\Users\Me>openssl sha1 -binary mycert.bin > sha1.bin

C:\Users\Me>openssl base64 -in sha1.bin -out base64.txt

이 명령을 실행하면 유효한 해시가 base64.txt 파일에 저장됩니다. 이를 복사하여 Facebook의 앱 설정에 붙여 넣습니다.


완벽하게 작동하고 다른 모든 것은 실패했습니다.
— 올리버 딕슨

2
어떤 PITA-그러나 Bryan는 옳다! 이 명령은 경로가 잘못되었거나 암호가 잘못되었거나 파이프가 제대로 작동하지 않더라도 거의 해시를 출력합니다. 여전히 해쉬를 얻지 만 작동하지 않습니다. 그래서 (Windows에서) Powershell을 버리고 Cygwin을 시도했지만 여전히 작동하지 않습니다. debug.keystore 파일을 작업 디렉토리에 복사 한 후에 만 ​​파일을 실행하고 작동시킬 수 있습니다 !!
— Bobby

2
따라서 요약하자면, Windows에서 Bryan의 분리 기술을 사용하거나 작업 디렉토리의 키 저장소 파일과 함께 cygwin을 사용하십시오. keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1-이진 | openssl base64 암호를 입력하라는 메시지가 표시되지 않으면 키 저장소 파일을 찾지 못한 것입니다.
— Bobby

나를 위해 완벽하게 일했습니다. 좋은 대답입니다.
— Ron

잘못된 암호 사례에 대해 해시를받지 않으려면 openSSL을 계속하기 전에 mycert.bin을 확인하십시오. 그렇지 않으면 잘못된 비밀번호 오류 텍스트를 해싱하게됩니다. :)
— Vaiden

50

다음은 Facebook 공식 페이지 에서 제공되는 내용입니다 .

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

이 명령을 조각으로 나누겠습니다.

  1. 를 찾으십시오 "keytool.exe". C : 드라이브에서 검색 할 수 있습니다. "java jdk"또는 에서 찾을 수 있습니다 "java jre". 여러 버전을 설치 한 경우 원하는 버전을 선택하십시오.

  2. CMD 프롬프트를 열고 찾은 위의 디렉토리로 이동하십시오 "keytool.exe".

    "exe`"를 클립하고 Facebook 페이지에 제공된 위의 명령을 붙여 넣습니다.

  3. OpenSSL이 입력 출력 명령에서 인식되지 않는다고 입력하면 오류가 발생합니다. 해결 방법 : OpenSSL 에서 "Openssl"을 다운로드하십시오 (64 비트 시스템 인 경우 openssl-0.9.8e X64를 다운로드 해야 함 ). 압축을 풀고 어디서나 저장하십시오 ... OpenSSl폴더 의 C : 드라이브에 저장했습니다.

  4. 파이프 뒤에있는 "|"위치에서 OpenSSL 오류가 발생한 위 명령에서 openssl을 "C : \ OpenSSL \ bin \ openssl"로 바꾸십시오.

  5. 비밀번호를 묻는 프롬프트가 표시되면을 입력하십시오 android.

그리고 당신은 당신의 해시 키를 얻을 것이다. 추가 단계는 Facebook 페이지를 다시 참조하십시오.


32

이 코드를 onCreate활동에 추가 하면 logCat 의 KeyHash 태그 아래에 해시가 인쇄됩니다.

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           getPackageName(),
                           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) {

}

계정에 여러 개의 해시 키를 추가 할 수 있으므로 디버그에서 실행중인 경우 릴리스 모드에서 다시 실행하는 것을 잊지 마십시오 .


훌륭한 해결책, 서명되지 않은 실행 파일이 없어야한다고 생각합니까? 서명되지 않은 버전은 어떤 장치에도 설치할 수 없습니다. 그 디버그 버전은 디버그 키 저장소로 서명됩니다 :)
— benleung

26

Android 키 해시 코드를 얻으려면 다음 단계를 수행하십시오.

  1. Windows 용 OpenSSL을 여기에서 다운로드 하십시오.
  2. 이제 C 드라이브에 압축을 풉니 다
  3. CMD 프롬프트를 엽니 다
  4. 유형 cd C:\Program Files\Java\jdk1.6.0_26\bin
  5. 그런 다음 keytool -export -alias myAlias -keystore C:\Users\사용자 이름 만 입력 하십시오\.android\myKeyStore | C:\openssl-0.9.8k_WIN32\bin\openssl sha1 -binary | C:\openssl-0.9.8k_WIN32\bin\openssl enc -a -e
  6. 끝난

2
좋은 답변입니다. 대단히 감사합니다.
— Palani Kumar

1
디버그 키 또는 릴리스 키입니까?
— IgorGanapolsky 2011

경로 대신 @IgorGanapolsky에 myKeyStore릴리스 키 경로를 지정하십시오. 위의 코드는 디버그 키를위한 것입니다.
— Pallavi

17

내가 찾은 가장 간단한 해결책은 다음과 같습니다.

  • 로그 고양이를여십시오
  • Android SDK를 사용하여 Facebook에 액세스하십시오.
  • 로그에서 다음과 같은 줄을 찾으십시오.

    04-24 01:14:08.605: I/System.out(31395): invalid_key:Android key mismatch. 
    Your key "abcdefgHIJKLMN+OPqrstuvwzyz" does not match the allowed keys specified in your
    application settings. Check your application settings at 
    http://www.facebook.com/developers
  • "abcdefgHIJKLMN + OPqrstuvwzyz"를 복사하여 Facebook Android Key Hash 영역에 붙여 넣습니다.


이것은 가장 간단하고 효과적인 방법이며, openssl 없이도 로그에서 가져옵니다!
— Luca C.

이것은 나를 위해 유일하게 작동하는 솔루션입니다!. 나는 당신처럼 로그를 볼 수 없지만, 나는 KeyHash: XWwXXXXX/5xxxxxxxxxxx=로그에서 이것을보고 나를 도와 주었다!
— Khang Dinh Hoang

14

SHA-1 키에서 키 해시를 얻을 수 있습니다. 이미지 아래 Play 스토어에서 SHA-1 (Signed APK) 키를 가져와야하는 것이 매우 간단합니다.여기에 이미지 설명을 입력하십시오

이제 SHA-1 키를 복사 하여이 웹 사이트 http://tomeko.net 에서 붙여 넣으십시오. 아래 이미지를 확인하여 키 해시를 얻으십시오.

여기에 이미지 설명을 입력하십시오


1
감사. OpenSSL을 사용하여 키 해시를 얻으려고했습니다. 1 분 동안 걸렸고 쉬웠습니다.
— Green Y.

1
고마워요! 이 구글과 솔루션은 지금 (난 그냥 업로드 인증서 / 키 스토어를 사용) 내 응용 프로그램에 서명했다
— 해리슨

13

나는이 방법으로 리눅스 OS 및 Windows OS에 .

리눅스 :

  • Openssl 다운로드
  • 터미널 열기
  • keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64

경로로 별칭 이름 과 키 저장소를 친절하게 변경하십시오. 요구 사항으로 사용하여 하십시오.

터미널은 Keystore의 비밀번호 를 요구 합니다 . 동일한 키 저장소에 비밀번호 를 제공해야합니다. .

마지막으로 Release Hashkey를 얻게됩니다 됩니다.

윈도우 :

해시 해제 단계 :

  • Openssl 다운로드 ( 여기 에서 다운로드 ), 64 비트 OS 용으로 다운로드했습니다. 자세한 내용은 여기를 참조 하십시오.
  • 다운로드 한 zip 파일을 C : \ 드라이브에만 추출
  • 명령 프롬프트 열기
  • keytool -exportcert -alias **myaliasname** -keystore **"C:\Users\hiren.patel\Desktop\mykeystore.jks"** | "C:\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary | "C:\openssl-0.9.8e_X64\bin\openssl.exe" base64

경로 이름을 요구 사항으로 사용하여 별칭 이름 과 키 저장소를 변경 하십시오.

노트 :

** ** 사이에 표시된 곳에 세부 정보를 입력하십시오.

터미널은 Keystore의 비밀번호 를 요구 합니다 . 동일한 키 저장소에 비밀번호 를 제공해야합니다 .

마지막으로 Release Hashkey를 얻게 됩니다.

끝난


여기서 비밀번호는 무엇입니까?
— Akash Bisariya

키 저장소를 생성하는 동안 제공 한 @AkashBisariya, 키 저장소의 비밀번호
— Hiren Patel

성공적으로 생성 된 후 키를 어디에서 찾을 수 있습니까?
— Anand Phadke

11
  • 여기에서 Windows 용 openSSL을 다운로드하십시오 여기에서 64 비트 및 32 비트를 찾을 수 있습니다

  • 다운로드 한 파일을 추출하십시오

  • C 드라이브에 폴더 이름 openSSL을 작성하십시오.
  • 추출 된 모든 항목을 openSSL 폴더 (bin, include, lib, openssl.cnf)에 복사하십시오.
  • 안드로이드 디버그 키 저장소를 얻으십시오. 기본 위치는

C : \ Users \ username \ .android \ debug.keystore

  • 이제 명령 프롬프트를 가져 와서이 코드를 붙여 넣으십시오.

keytool -exportcert -alias androiddebugkey -keystore C : \ 사용자 \ 사용자 이름 .android \ debug.keystore | "C : \ openSSL \ bin \ openssl"sha1-이진 | "C : \ openSSL \ bin \ openssl"base64

  • Enter 키를 누르면 28 자리 키 코드가 표시됩니다

아니요 암호를 묻습니다. 타이핑 android하면 24 자리 해시가 a제공 되고 타이핑 하면 28 자리 해시가 제공 됩니다 . 왜 그런지 모르겠다!
— sud007

나쁜 링크! 그들은 키 도구가 전혀 없습니다
— KawaiKx

6

안드로이드 사이트에 설명 된 절차와 같이 서명 된 안드로이드 용 앱의 키 도구로 키 저장소를 생성 한 다음 cygwin을 설치해야하며 Google 코드 에서 openssl을 설치 한 다음 다음 명령을 실행하면 해시가 표시됩니다 Android 용 키를 누른 다음 해시 키를 작성한 페이스 북 애플리케이션에 넣습니다. 그런 다음 게시 벽 ( "publish_stream")에 대한 Android 애플리케이션을 통해 페이스 북 애플리케이션에 액세스 할 수 있습니다.

$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1-이진 | openssl base64

cygwin에서 위의 명령을 실행해야합니다.


6

openSSL 다운로드 -> 설치 -> 일반적으로 C : \ OpenSSL에 설치됩니다 .

그런 다음 cmd를 열고 입력하십시오.

cd../../Program Files (Enter)

java (Enter)

dir (Enter)

cd jdk1.6.0_17 (varies with jdk versions) (Enter)

jdk 버전을 확인하려면 C : / program files / java / jdk_version으로 이동하십시오.

cd bin (enter)

keytool -exportcert -alias androiddebugkey -keystore C:Users\Shalini\.android\debug.keystore | "C:\OpenSSL\bin\openssl sha1 -binary | "C:\OpenSSL\bin\openssl base64 (Enter)

안드로이드 비밀번호를 묻습니다.


6
  1. 기본 활동 파일을 열고 아래 언급 함수를 작성하십시오.

         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 (PackageManager.NameNotFoundException e) {
    
    } catch (NoSuchAlgorithmException e) {
     }

1.1 응용 프로그램을 실행하면 응용 프로그램에 대한 해시 키가 생성됩니다.

  1. 이제 log cat을 열고 "KeyHash"로 검색하고 해시 키를 복사하십시오.

  2. 해시 키를 생성하면이 기능을 제거 할 수 있습니다.


5

1) 응용 프로그램에 서명하는 키를 만들고 별칭을 기억하십시오.

2) OpenSSL을 설치하십시오.

3) OpenSSL의 bin 폴더를 경로에 넣으십시오.

4) FB-Android-SDK 페이지의 "싱글 사인온 설정"에 언급 된 단계에 따라 해시 키를 생성하십시오. 올바른 별명 및 키 저장소 파일 이름을 입력하십시오.

5) Facebok에서 응용 프로그램을 만들고 모바일 장치 탭에서이 해시 키를 입력하십시오.


5

페이스 북 개발자 사이트의 공식 문서 :

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Add code to print out the key hash
    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                "com.facebook.samples.hellofacebook", 
                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) {

    }

@WilliamKinaan : 언제든;) : P
— Hardik Thaker

@HardikThaker 나는 당신의 코드를 사용 하여이 명령으로 터미널을 사용하는 것과 정확히 같은 keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64키 해시를 제공하지만 여전히 키 해시가 저장된 키 해시와 일치하지 않습니다.
— Shan Xeeshi

4
keytool -exportcert -alias androiddebugkey -keystore       C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64

이것은 나를 위해 일했다 ...

단계 :

1) Open command line go to - > java Keytool..... for me C:\Program Files\Java\JDK1.7\bin
2) Download OpenSSL from google
3) paste this with changing your paths -
   keytool -exportcert -alias androiddebugkey -keystore C:\Users\pravin\.android\debug.keystore | "H:\OpenSSL\bin\openssl" sha1 -binary | "H:\OpenSSL\bin\openssl" base64 

    ....................   give proper debug.keystore path and openSSL path .. 

4) Finley it may be ask u password .. so give password -> android   ...
5) you will get 28 characters that will be your has key

4

리눅스

터미널 열기 :

디버그 빌드

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

".android"폴더에서 debug.keystore 를 찾아 데스크탑 에서 복사하여 붙여넣고 위의 명령을 실행하십시오.

릴리스 빌드

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

참고 : 두 경우 모두 암호를 요구해야합니다. 암호를 요구하지 않으면 명령에 문제가 있음을 의미합니다.


별칭 이름이 다른 다른 값을 얻는 중 올바른 것이 무엇인지 확인하는 방법은 무엇입니까?
— Javal Nanda

별명 이름을 가진 암호를 요구합니까?
— Biraj Zalavadia

ya와 내가 입력 한 암호는 해시 키입니다 .. 내 앱은 이미 플레이 스토어에 있으며 네이티브 fb는 현재 작동하지 않습니다. 릴리스 빌드를 위해 정확한 키 해시를 생성해야합니다. 개발자는 다음 게시물에 onCreate 안에 코드를 포함시킬 것을 제안하지만 playstore에서 앱 업데이트없이 작동하게하고 싶습니다. stackoverflow.com/questions/15021790/…
— Javal Nanda

예, openssl이있는 미망인에 문제가 있습니다. 해당 게시물에 지정된 코드로 달성 할 수 있습니다.
— Biraj Zalavadia

Playstore에서 업데이트하지 않고 원할 경우. 1) 새로운 안드로이드 Demp 앱을 만듭니다. 2) 해당 코드를 작성하십시오. 3) 앱 스토어에서 동일한 키 저장소로이 데모 앱에 서명하십시오. 4) 그런 다음 서명 된 apk를 실행하십시오. 5) 마지막으로이 해시 키를 사용하십시오
— Biraj Zalavadia

4

Android 애플리케이션의 경우

이 코드는 Facebook 통합을 위해 Android 애플리케이션에서 해시 키를 가져 오는 데 사용됩니다. 모든 장치를 테스트했으며 작동합니다. 이 코드의 패키지 이름 만 변경하십시오.

private void facebookHashKey() {

    try {
        PackageInfo info = getPackageManager().getPackageInfo("com.app.helpcove", PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashCode  = Base64.encodeToString(md.digest(), Base64.DEFAULT);
            System.out.println("Print the hashKey for Facebook :"+hashCode);
            Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        }
    } catch (NameNotFoundException e) {

    } catch (NoSuchAlgorithmException e) {

    }
}

4

으로 대답 유사한 문제에 내가 나를 위해 작동하는이 발견 :

  • apkname.apk해시를 알고 싶은 파일을 ' Java \ jdk1.7.0_79 \ bin에 복사하십시오. '폴더를
  • 이 명령을 실행 keytool -list -printcert -jarfile apkname.apk
  • SHA1이 사이트를 사용하여 값을 복사 하고 변환
  • 변환 된 Keyhash 값을 사용하십시오 ( 예 : zaHqo1xcaPv6CmvlWnJk3SaNRIQ = )

3

가장 간단한 해결책 :

  1. 해시 키를 추가하지 말고 다른 모든 것을 구현하십시오.
  2. 페이스 북 로그인을 누르면 "잘못된 키 해시입니다. 키 해시"xxx "가 저장된 키와 일치하지 않습니다."라는 오류가 표시됩니다.
  3. 페이스 북 앱 대시 보드를 열고 해시 "xxx ="(오류에서 "xxx"해시 + "="부호)를 추가하십시오.

3

릴리스 키의 해시를 생성하려면 릴리스 키 별명과 키 저장소 경로를 대체하여 Mac 또는 Windows에서 다음 명령을 실행하십시오.

Windows에서는 다음을 사용하십시오.

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

이 명령은 28 개의 characher 문자열을 생성해야합니다. 그 기억 복사 및 붙여 넣기를이 릴리스 키 하여 Facebook 앱 ID의 Android 설정에 저장하십시오.

이미지 : fbcdn-dragon-a.akamaihd.net/hphotos-ak-xpa1/t39.2178-6/851568_627654437290708_1803108402_n.png

https://developers.facebook.com/docs/android/getting-started#release-key-hash 및 http://note.taable.com 에서 참조하십시오.


3

kotlin에서 프린트 키 해시에 사용

try {
        val info = context.getPackageManager().getPackageInfo(context.packageName,
                PackageManager.GET_SIGNATURES);
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            Log.d("Key hash ", android.util.Base64.encodeToString(md.digest(), android.util.Base64.DEFAULT))
        }
    }catch (e:Exception){

    }

2

안드로이드 스튜디오에서도 광산을 해결했지만 약간 다른 접근 방식으로 해결했습니다.

Android Studio에서 SHA-1 값을 얻으려면

  1. Gradle을 클릭하십시오
  2. 서명 보고서를 클릭하십시오
  3. SHA-1 복사

Android Studio에서 표시된 패널을 클릭하십시오.

  1. SHA-1 값은 다음과 같습니다. CD : A1 : EA : A3 : 5C : 5C : 68 : FB : FA : 0A : 6B : E5 : 5A : 72 : 64 : DD : 26 : 8D : 44 : 84

    http://tomeko.net/online_tools/hex_to_base64.php 를 열어 SHA1 값을 base64로 변환하십시오. Facebook에서 생성 된 해시 "******************** ="를 가져 와서 키 해시를 페이스 북 앱 콘솔에 복사해야합니다.

이 답변의 일부는 여기에서 가져온 것입니다 Github 링크


2

복잡한 방법 과 쉬운 방법에는 두 가지가 있습니다.

방법 하나 :( 약간 복잡한)

먼저 다운로드해야 모든 SSL을 64bit 하거나 32bit따라, 포함하는 이름으로 파일을 다운로드 기억 e버전 코드 후 openssl-0.9.8e_X64.zip 또는 openssl-0.9.8e_WIN32.zip 하지으로 k버전 코드 후,

AndroidStudio / jre / bin 디렉토리에 배치하십시오. 위치를 모르는 경우 Android 스튜디오 바로 가기를 마우스 오른쪽 단추로 클릭하여 다음 디렉토리를 찾을 수 있습니다.

여기에 이미지 설명을 입력하십시오

이제 두 곳의 필수 항목을 한곳에서 관리했지만 여전히 경로를 찾아야 debug.keystore합니다 "C:\Users\yourusernamehere\.android\debug.keystore".

참고 앱이 이미 게시되었거나 게시 예정인 경우 게시 서명 키 저장소를 사용하십시오. 개발 모드에서 테스트중인 경우에만 디버그, 키 소트를 사용할 수 있습니다

모든 것이 설정되면 해시 키 생성을 위해 실행하려는 명령을 정렬 base64 format하면 명령은 다음과 같습니다.

keytool.exe -exportcert -alias androiddebugkey -keystore "C:\Users\ayyaz talat\.android\debug.keystore" | "D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" sha1 -binary |"D:\Program Files\Android\Android Studio\jre\bin\openssl\bin\openssl.exe" base64

기본적으로 android 인 debug.keystore의 비밀번호를 입력하라는 메시지가 표시됩니다. 당신이 당신의 자신의 키를 사용하는 경우 암호도 당신의 것입니다. 모든 것이 예상대로 진행되면 출력이 다음과 같이 보일 것입니다.

여기에 이미지 설명을 입력하십시오

두 번째 방법 (각각 쉬운 방법)

위의 모든 절차를 거치지 않으려면 다음 방법을 사용하여 haskey를 기록하십시오.

 private void printKeyHash() {
        try {
            PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA1");
                md.update(signature.toByteArray());
                Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (PackageManager.NameNotFoundException e) {
            Log.e("KeyHash:", e.toString());
        } catch (NoSuchAlgorithmException e) {
            Log.e("KeyHash:", e.toString());
        }
    }

산출:

여기에 이미지 설명을 입력하십시오


1

가장 좋은 방법은 다음 코드를 사용하는 것입니다.

private void getHashKey(String pkgName)
{
    try
    {
        PackageInfo info = getPackageManager().getPackageInfo(pkgName, PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures)
        {
            MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            String hashKey = Base64.encodeBytes(md.digest());
            _hashKey_et.setText(hashKey);
            Log.i("KeyTool", pkgName + " -> hashKey = " + hashKey);
        }
    }
    catch (NameNotFoundException e)
    {
        e.printStackTrace();
    }
    catch (NoSuchAlgorithmException e)
    {
        e.printStackTrace();
    }
}

그러나 Facebook 앱의 HashKey를 생성하는 간단한 도구가 없다는 사실에 너무 실망했습니다. Openssl과 Keytool을 사용하거나 서명에서 해시를 가져 오는 코드를 사용해야 할 때마다 ...

그래서 나는 당신을 위해 그 일을 할 간단한 KeyGenTool을 썼습니다 : -> Google Play의 KeyGenTool <-

즐겨 :)


1

나는 명심해야 할 작은 실수를했다. 키 저장소를 사용하는 경우 androiddebugkey가 아닌 별명을 지정하십시오 ...

나는 내 문제를 해결했다. 이제 Facebook이 기기에 설치되어 있으면 여전히 내 앱이 Facebook 로그인 통합에 대한 데이터를 가져옵니다. 해시 키만 신경 쓰십시오.

아래를 참조하십시오.

C:\Program Files\Java\jdk1.6.0_45\bin>keytool -exportcert -alias here your alias name  -keystore "G:\yourkeystorename.keystore" |"G:\ssl\bin\openssl" sha1 -binary | "G:\ssl\bin\openssl" base64

그런 다음 키를 누르면 Enter비밀번호를 묻는 메시지가 표시되고 Android가 아닌 키 저장소 비밀번호를 입력합니다.

멋있는.


0
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

import android.os.Bundle;
import android.app.Activity;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.pm.Signature;
import android.text.Editable;
import android.util.Base64;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

    Button btn;
    EditText et;
    PackageInfo info;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn=(Button)findViewById(R.id.button1);
        et=(EditText)findViewById(R.id.editText1);
        btn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub

                try {
                    info = getPackageManager().getPackageInfo("com.example.id", PackageManager.GET_SIGNATURES);
                    for (Signature signature : info.signatures) {
                        MessageDigest md;
                        md = MessageDigest.getInstance("SHA");
                        md.update(signature.toByteArray());
                        String something = new String(Base64.encode(md.digest(), 0));
                        //String something = new String(Base64.encodeBytes(md.digest()));
                        et.setText("" + something);
                        Log.e("hash key", something);
                    }
                } catch (NameNotFoundException e1) {
                    Log.e("name not found", e1.toString());
                } catch (NoSuchAlgorithmException e) {
                    Log.e("no such an algorithm", e.toString());
                } catch (Exception e) {
                    Log.e("exception", e.toString());
                }
            }
        });
    }



}

이 코드는 유효한 해시 키를 생성하지 않습니다. @Jamshid의 대답은 Mac OSX에서 저에게 효과적입니다.
— Loolooii

0

해시 키를 얻는 Kotlin 코드

 private fun logHashKey() {
    try {
        val info = getPackageManager().getPackageInfo("your.package.name", PackageManager.GET_SIGNING_CERTIFICATES);
        for (signature in info.signingInfo.signingCertificateHistory) {

            val md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            val something = Base64.getEncoder().encodeToString(md.digest());
            Log.e("hash key", something);
        }
    } catch (e1: PackageManager.NameNotFoundException) {
        Log.e("name not found", e1.toString());
    } catch (e: NoSuchAlgorithmException) {
        Log.e("no such an algorithm", e.toString());
    } catch (e: Exception) {
        Log.e("exception", e.toString());
    }
}

빌드 및 설정에 따라 키가 변경되므로 디버그 및 릴리스 환경에서 키를 생성하는 것을 잊지 마십시오.


0

이 시도 :

  • 해시 키 값을 얻는 두 가지 방법

1) 명령 줄을 사용하여 해시 키 가져 오기 (공식 문서 : https://developers.facebook.com/docs/android/getting-started )

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

또는

2) 코드를 사용하여 해시 키 가져 오기

  @Override
   protected void onCreate(Bundle savedInstanceState) {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.activity_main);

            //Hask Kay generation 
             GetKeyHase();
    }

    private void GetKeyHase() {
            try {
                PackageInfo info = getPackageManager().getPackageInfo("ADD YOUR PACKAGE NAME", PackageManager.GET_SIGNATURES);
                for (Signature signature : info.signatures) {
                    MessageDigest md = (MessageDigest.getInstance("SHA"));
                    md.update(signature.toByteArray());
                    String hashkey_value = new String(Base64.encode(md.digest(), 0));
                    Log.e("hash key", hashkey_value);
                    //check you logcat hash key value
                }
            }catch (Exception e) {
                Log.e("exception", e.toString());
            }
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.