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활동에 추가 하면 logCatKeyHash 태그 아래에 해시가 인쇄됩니다.

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

나는이 방법으로 리눅스 OSWindows 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-hashhttp://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.