วิธีสร้างแฮชคีย์ Facebook Facebook


182

ฉันไม่เข้าใจกระบวนการนี้เลย ฉันสามารถนำทางไปยังโฟลเดอร์ที่มี keytool ใน Java SDK ได้ แม้ว่าฉันจะได้รับข้อผิดพลาด openssl ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก ปัญหาคือแม้ว่าฉันจะสามารถทำงานได้ฉันจะทำอะไรและทำอะไรต่อไป


ถ้าคุณใช้ facebook sdk ล่าสุดและถ้าคุณใช้ api facebook ของคุณอย่างสมบูรณ์แบบเมื่อเข้าสู่ระบบคุณคลิกที่เข้าสู่ระบบใน facebook จากนั้นใน logcat ของคุณแป้นแฮชจะถูกพิมพ์ ..
Mehul Ranpara

เพื่อสร้างแฮชคีย์ของคุณบนคอมพิวเตอร์ในพื้นที่ของคุณให้รันยูทิลิตี keytool ของ Java (ซึ่งควรอยู่บนพา ธ ของคอนโซล) กับที่เก็บคีย์การดีบัก Android นี่คือค่าเริ่มต้นในไดเรกทอรี. android ของคุณ) บน 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
Rakesh

ทำไมทุกคนต้องการสร้างรหัสการดีบัก
Anders Lindén

ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

คำตอบ:


242

นี่คือสิ่งที่คุณต้องทำ -

ดาวน์โหลด openSSl จากCode Extract สร้างโฟลเดอร์ - OpenSSL ใน C: / และคัดลอกรหัสที่แยกออกมาที่นี่

ตรวจจับเส้นทางไฟล์ debug.keystore หากคุณไม่พบให้ทำการค้นหาใน C: / และใช้ Path ในคำสั่งในขั้นตอนถัดไป

ตรวจสอบเส้นทาง keytool.exe ของคุณและไปที่พรอมต์คำสั่ง dir / in และเรียกใช้คำสั่งนี้ใน 1 บรรทัด

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

มันจะถามรหัสผ่านใส่ android นั่นคือทั้งหมด คุณจะได้รับแฮชคีย์


เมื่อฉันขอรหัสผ่านฉันสามารถใส่อะไรที่ฉันต้องการได้หรือไม่
Somk

5
@Max androidรหัสผ่านเริ่มต้นคือ
jamapag

2
แฮชคีย์ไม่ตรงกับแอนดรอยด์แฮชที่เก็บไว้ไม่ทำงาน
Boldijar Paul

1
ขั้นแรกให้สร้างที่เก็บคีย์โดยไปที่ Build -> Build Apk จากสตูดิโอของคุณ ให้ชื่อและรหัสผ่านเป็นต้นเก็บไว้เป็นไฟล์. jks ที่โฟลเดอร์สามารถเข้าถึงได้ง่าย ตอนนี้คัดลอกพา ธ และสร้างคีย์โดยแทนที่พา ธ นั้นในคำตอบที่กล่าวถึงข้างต้น
buggydroid

1
มันแสดงให้ฉันเห็นข้อผิดพลาด: "... อนุญาตให้ใช้นิพจน์เป็นองค์ประกอบแรกของไพพ์ไลน์ได้ที่บรรทัด: 1 อักขระ: 184 ... โทเค็นที่ไม่คาดคิด 'sha1' ในนิพจน์หรือคำสั่ง ... อนุญาตให้ใช้นิพจน์เป็น องค์ประกอบแรกของไปป์ไลน์ ... โทเค็นที่ไม่คาดคิด 'base64' ในนิพจน์หรือคำสั่ง + CategoryInfo: ParserError: (:) [], ParentContainsErrorRecordException + FullyQualifiedErrorId: ExpressionsMustBeFirstInPipeline "
นักพัฒนา android

175

สำหรับ Linux และ Mac

เปิดเทอร์มินัล:

สำหรับ Debug Build

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

คุณจะพบdebug.keystoreในโฟลเดอร์ ".android" คัดลอกและวางลงบนเดสก์ท็อปและเรียกใช้คำสั่งด้านบน

สำหรับรุ่น Build

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

หมายเหตุ:ตรวจสอบให้แน่ใจว่าในทั้งสองกรณีจะขอรหัสผ่าน หากไม่ขอรหัสผ่านก็หมายความว่ามีบางอย่างผิดปกติในคำสั่ง รหัสผ่านสำหรับdebug.keystoreเป็น" หุ่นยนต์ "และสำหรับการเปิดตัวคุณจะต้องป้อนรหัสผ่านที่คุณตั้งในระหว่างการสร้างที่เก็บคีย์


3
เพื่อความชัดเจนรหัสผ่านจะว่างเปล่า เพียงกด <enter> เมื่อได้รับแจ้ง
Tom Redman

ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

1
หมายเหตุนี้: "หมายเหตุ: ตรวจสอบให้แน่ใจว่าในทั้งสองกรณีจะขอรหัสผ่านหากไม่ขอรหัสผ่านแสดงว่ามีบางอย่างผิดปกติในคำสั่ง" เป็นสิ่งสำคัญในการแก้ปัญหา
Bleno Silva

ขอบคุณที่ช่วยชีวิตฉัน ฉันพิมพ์รหัสผ่าน mac ของฉันสำหรับรหัสผ่านที่เก็บคีย์ตลอดเวลาและฉันรู้ว่ามันผิด
Lucky Angelo

1
แม้แต่การขอรหัสผ่านก็ไม่ได้หมายความว่าทุกอย่างก็โอเค (รหัสผ่านผิด, ชื่อแทนคีย์ผิด) ทำงานkeytool -exportcert -alias <aliasName> -keystore <keystoreFilePath>คนเดียวในตอนแรกเพื่อดูว่าทุกอย่างโอเค นอกจากนี้เมื่อไพพ์, keytool อยู่ในโหมดไม่โต้ตอบและแสดงรหัสผ่านเป็นข้อความธรรมดาเมื่อคุณป้อน ดังนั้นคุณควรเขียนสคริปต์ขนาดเล็กที่รันคำสั่งแยกกัน
ปิแอร์

98

โปรดลองสิ่งนี้:

public static void printHashKey(Context pContext) {
        try {
            PackageInfo info = pContext.getPackageManager().getPackageInfo(pContext.getPackageName(), PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                String hashKey = new String(Base64.encode(md.digest(), 0));
                Log.i(TAG, "printHashKey() Hash Key: " + hashKey);
            }
        } catch (NoSuchAlgorithmException e) {
            Log.e(TAG, "printHashKey()", e);
        } catch (Exception e) {
            Log.e(TAG, "printHashKey()", e);
        }
    }

ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

นี่คือวิธีที่จะไป
Tintinabulator Zea

1
วิธีนี้ใช้งานได้หากคุณเรียก pContext.getPackageInfo หรือเพียงแค่ลบออกจากฟังก์ชั่นและเรียกมันใน onCreate ของกิจกรรมใด ๆ
Dpedrinha

1
ตอนนี้ดูเหมือนว่าจะเป็น getPackageManager (). getPackageInfo ([your-package_name], PackageManager.GET_SIGNATURES)
จนถึง

@Aurva คุณสามารถใส่ไว้ใน Android SharedPreferences ในกรณีที่มีการใช้งานในภายหลัง
แมดดี้

49

OpenSSL: คุณมีการติดตั้งว่าถ้ามันไม่ได้มาติดตั้งกับระบบปฏิบัติการของคุณ(เช่น Windows ไม่ได้มีมันติดตั้งไว้แล้ว) วิธีการติดตั้งที่ขึ้นอยู่กับระบบปฏิบัติการของคุณ (สำหรับ Windows ให้ตรวจสอบลิงค์ที่ให้ไว้โดย coder_For_Life22)

วิธีที่ง่ายที่สุดโดยไม่ต้องเล่นซอคือการคัดลอกไบนารี openssl.exe ไปยังพา ธ keytool ของคุณหากคุณใช้ Windows หากคุณไม่ต้องการทำเช่นนั้นคุณต้องเพิ่มลงในPATHตัวแปรสภาพแวดล้อมของคุณ จากนั้นดำเนินการคำสั่งที่ระบุไว้ในเอกสาร

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

โปรดทราบว่าอาร์กิวเมนต์หลังจาก-keystoreชี้ไปที่ที่เก็บคีย์การดีบักของคุณ ตำแหน่งนี้ยังขึ้นอยู่กับระบบปฏิบัติการของคุณ ควรอยู่ในตำแหน่งใดตำแหน่งหนึ่งต่อไปนี้:

  • Windows Vista หรือ 7 - C: \ Users \ .android \ debug.keystore
  • Windows XP - C: \ Documents และ Settings \. android \ debug.keystore
  • OS X และ Linux - ~ / .android / debug.keystore

หากคุณทำทุกอย่างถูกต้องคุณควรได้รับพร้อมท์ให้ใส่รหัสผ่าน นั่นคือandroidสำหรับใบรับรองการดีบัก หากรหัสผ่านถูกต้องคอนโซลพิมพ์แฮช (ตัวอักษรและตัวเลขสุ่ม)

ใช้สิ่งนั้นและคัดลอกลงในandroid key hashฟิลด์ภายในการตั้งค่าแอพของคุณบน facebook ในการไปที่นั่นให้ไปที่Developers.facebook.com/appsเลือกแอพของคุณไปที่Edit settingsและเลื่อนลง หลังจากนั้นรอสักครู่จนกว่าการเปลี่ยนแปลงจะมีผล


ฉันทำงานในหน่วย cmd และส่งออกรายการตัวอักษรที่ยาวมากดูเหมือนแฮชที่ลงท้ายด้วยเครื่องหมาย = ไม่มีอะไร $ keytool -exportcert -alias androiddebugkey -keystore "C: \ Users \ .android \ debug.keystore" | "C: \ OpenSSL \ bin \ openssl" sha1 -binary | "C: \ OpenSSL \ bin \ openssl" base64
Somk

เสียงถูกต้อง เพิ่งทดสอบกับเครื่องของฉันมันยาว 28 ตัวอักษรสำหรับฉันแค่ให้ความคิดแก่คุณ ตอนนี้เพียงแค่คัดลอกมันไปและคุณก็สบายดี :)

ฉันไม่ได้รับแจ้งให้ใช้ pharse android แม้ว่า ขอโทษที่ฉันช้า
Somk

พูดตามตรงฉันไม่แน่ใจว่าทำไมคุณถึงไม่ได้รับการแจ้งเตือน แต่ฟังดูถูกต้องสำหรับฉัน ฉันหมายความว่าหากคุณทำสิ่งผิดปกติควรมีข้อความแสดงข้อผิดพลาดแทน เพียงคัดลอกมันไปและดูว่ามันใช้งานได้ คุณสามารถทดสอบบางส่วนของคำสั่งกราฟกับกราฟ API Explorer ที่ เลือกแอปของคุณที่ด้านบนและดูว่าคุณได้ผลลัพธ์ที่ถูกต้องหรือไม่ ควรพ่นข้อผิดพลาดหากมีสิ่งผิดปกติ แก้ไข: และไม่มีอะไรผิดปกติกับผึ้งช้า เราไม่รีบร้อน :)

24

เพื่อสร้างแฮชคีย์ของคุณบนคอมพิวเตอร์ในพื้นที่ของคุณให้รันยูทิลิตี keytool ของ Java (ซึ่งควรอยู่บนพา ธ ของคอนโซล) กับที่เก็บคีย์การดีบัก Android นี่คือค่าเริ่มต้นในไดเรกทอรี. android ของคุณ) บน 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

หวังว่านี่จะช่วยคุณได้

Ref - เว็บไซต์ facebook สำหรับนักพัฒนา


ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

19

คุณสามารถใช้จาวาสคริปต์บรรทัดเดียวในคอนโซลเบราว์เซอร์เพื่อแปลงคีย์แผนที่ฐานสิบหกเป็น base64 เปิดคอนโซลในเบราว์เซอร์ใหม่ล่าสุด (F12 ใน Windows) และวางโค้ดและแทนที่SHA-1, SHA-256แผนที่ hex ว่า Google เล่นให้อยู่ภายใต้Release Managment> App signing:

> btoa('a7:77:d9:20:c8:01:dd:fa:2c:3b:db:b2:ef:c5:5a:1d:ae:f7:28:6f'.split(':').map(hc => String.fromCharCode(parseInt(hc, 16))).join(''))
< "p3fZIMgB3fosO9uy78VaHa73KG8="

1
คุณเป็นผู้ช่วยชีวิตขอบคุณ
Yusuf Adeyemo

SHA-1 คือหนึ่งเดียว
Travo

19

นี่คือรายละเอียดที่สมบูรณ์(สำหรับ Windows)

1.ดาวน์โหลดOpenSSlทั้ง 3 หรือ 4 (โดย e จะทำงานได้ดีขึ้น) ตามระบบ 32 บิตหรือ 64 บิต

2.แตกไฟล์ zip ที่ดาวน์โหลดมาไว้ในไดเรกทอรี C

3.เปิดโฟลเดอร์ที่แตกแล้วขึ้นมาที่ bin และคัดลอกพา ธ ควรเป็นอย่างเช่นC:\openssl-0.9.8k_X64\bin\openssl (เพิ่ม \ openssl ที่ส่วนท้าย)

4. (รับเส้นทางไปยังโฟลเดอร์ bin ของ Jdk หากคุณรู้วิธีให้ละเว้นสิ่งนี้)

เปิด android studio ~ file ~ โครงสร้างโครงการ (ctrl + alt + shift + s) เลือกตำแหน่ง SDK ในแผงด้านซ้ายคัดลอกตำแหน่ง JDK และเพิ่ม / bin ลงไป

ดังนั้นตำแหน่ง JDK สุดท้ายจะเป็นเช่นนั้น C:\Program Files\Android\Android Studio\jre\bin

เรากำลังติดตามวิธีนี้เพื่อรับตำแหน่ง Jdk เพราะคุณอาจใช้ jdk แบบฝังเช่นฉัน

ป้อนคำอธิบายรูปภาพที่นี่

ตอนนี้คุณมีตำแหน่ง OpenSSl และตำแหน่ง JDK

5.ตอนนี้เราต้องการตำแหน่งที่เก็บคีย์ debug สำหรับที่เปิด C ~> Users ~> YourUserName ~> .android ควรมีชื่อไฟล์ debug.keystore ตอนนี้คัดลอกตำแหน่งพา ธ มันควรจะมีบางอย่างเช่น

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

6.ตอนนี้เปิดพร้อมรับคำสั่งและพิมพ์คำสั่ง

cd YourJDKLocationFromStep4  

ในกรณีของฉัน

 cd "C:\Program Files\Android\Android Studio\jre\bin"

7.ตอนนี้สร้างคำสั่งต่อไปนี้

keytool -exportcert -alias androiddebugkey -keystore YOURKEYSTORELOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64

ในกรณีของฉันคำสั่งจะมีลักษณะ

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64

ตอนนี้ป้อนคำสั่งนี้ในพรอมต์คำสั่งหากคุณทำสิ่งที่ถูกต้องคุณจะถูกถามรหัสผ่าน (รหัสผ่านเป็น Android)

Enter keystore password:  android

คุณจะได้รับ Key Hash เพียงคัดลอกและใช้

สำหรับ KeyHash ที่ลงชื่อแล้วให้สร้างคำสั่งต่อไปนี้

keytool -exportcert -alias YOUR_ALIAS_FOR_JKS -keystore YOUR_JKS_LOCATION | YOUROPENSSLLOCATION sha1 -binary | YOUROPENSSLLOCATION base64

ป้อนรหัสผ่านที่เก็บคีย์ของคุณหากคุณป้อนรหัสผ่านผิดรหัสผ่านจะให้ KeyHash ผิด

บันทึก

หากด้วยเหตุผลบางอย่างถ้ามันให้ข้อผิดพลาดที่บางเส้นทางแล้วตัดเส้นทางนั้นด้วยเครื่องหมายคำพูดคู่นอกจากนี้ Windows power shell ไม่ทำงานได้ดีสำหรับฉันฉันใช้ git bash (หรือใช้ command command)

ตัวอย่าง

keytool -exportcert -alias androiddebugkey -keystore "C:\Users\Redman\.android\debug.keystore" | "C:\openssl-0.9.8k_X64\bin\openssl" sha1 -binary | "C:\openssl-0.9.8k_X64\bin\openssl" base64

1
ขอบคุณมากนี่เป็นคำแนะนำโดยละเอียดสำหรับผู้เริ่มต้น!
Pablo Quemé

@TamimProduction ลองขั้นตอนเดียวกันกับ k รุ่น openssl และดูcode.google.com/archive/p/openssl-for-windows/downloads
Manohar Reddy

@ TamimProduction หากคุณป้อนรหัสผ่านผิดรหัสผ่านก็จะส่งกลับ keyhash ที่ไม่ถูกต้อง คุณสร้าง apk อีกครั้งหลังจากลบที่เก็บคีย์ด้วยหรือไม่
Manohar Reddy

@TamimProduction ดาวน์โหลดและติดตั้งแอพพลิเคชั่น Facebook เข้าสู่ระบบในแอพพลิเคชั่น Facebook เปิดแอพของคุณและทำการล็อกอิน Facebook มันจะให้แฮชที่สำคัญในแอปพลิเคชัน Facebook ตรวจสอบว่ามันเหมือนกับของคุณ
Manohar Reddy

ขอให้เรายังคงอภิปรายนี้ในการแชท
Tamim Attafi

16

มีวิธีแก้ไขปัญหาสั้น ๆ เช่นกัน เพียงเปิดใช้งานในแอปของคุณ:

FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this));

อีกต่อไปที่ไม่ต้องใช้ FB SDK (ขึ้นอยู่กับการแก้ปัญหาที่นี่ ):

public static void printHashKey(Context context) {
    try {
        final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
        for (android.content.pm.Signature signature : info.signatures) {
            final MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            final String hashKey = new String(Base64.encode(md.digest(), 0));
            Log.i("AppLog", "key:" + hashKey + "=");
        }
    } catch (Exception e) {
        Log.e("AppLog", "error:", e);
    }
}

ผลลัพธ์ควรลงท้ายด้วย "="


1
ฉันสังเกตเห็นว่าแฮชคีย์ของฉันมี '_' อยู่ซึ่งไม่ได้รับอนุญาตจาก FB ในการใช้แฮชฉันต้องเปลี่ยนเป็น '/'
Abdelalim Hassouna

ฟังก์ชั่น Facebook ส่งคืนกุญแจของฉันเนื่องจาก-AAAAAAAA_AAAAAA-AAAAAAAAAAไม่ได้รับอนุญาตจาก Facebook printHashKey ส่งคืนกุญแจในรูปแบบที่ถูกต้อง+AAAAAAAA/AAAAAA+AAAAAAAAAA=
GrafOrlov

@GrafOrlov ช่างแปลกจริงๆ บางทีพวกเขาอาจมีข้อผิดพลาดใน FB SDK รุ่นใหม่บางรุ่น คุณควรรายงานเกี่ยวกับเรื่องนี้กับพวกเขา
นักพัฒนา android

9

สำหรับ Windows:

  1. พร้อมรับคำสั่งเปิดและวางคำสั่งด้านล่าง

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

  1. ป้อนรหัสผ่าน: android -> กด Enter

  2. คัดลอกรหัสสร้างแฮช -> ลงชื่อเข้าใช้ Facebook ด้วยบัญชีนักพัฒนาซอฟต์แวร์ของคุณ

  3. ไปที่แอพ Facebook ของคุณ -> การตั้งค่า -> วางแฮชคีย์ในตัวเลือก "แฮชคีย์" -> บันทึกการเปลี่ยนแปลง

  4. ทดสอบแอพ android ของคุณด้วย Facebook Log-in / Share เป็นต้น


ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

สวัสดีฉันสามารถสร้างรหัสแฮชผ่านรหัสในกิจกรรมหลักของฉันได้ แต่รหัสแฮชที่สร้างขึ้นใช้งานได้บนอุปกรณ์เครื่องเดียวเท่านั้น เมื่อฉันติดตั้ง apk เดียวกันในอุปกรณ์อื่นและเรียกใช้มันแสดงข้อผิดพลาดคีย์แฮชที่ไม่ถูกต้อง มีอะไรที่ฉันคิดถึงบ้างไหม
Deepak

8

ตั้งแต่ API 26 คุณสามารถสร้างคีย์แฮชของคุณโดยใช้รหัสต่อไปนี้ในKOTLINโดยไม่จำเป็นต้องใช้ Facebook SDK

fun generateSSHKey(context: Context){
    try {
        val info = context.packageManager.getPackageInfo(context.packageName, PackageManager.GET_SIGNATURES)
        for (signature in info.signatures) {
            val md = MessageDigest.getInstance("SHA")
            md.update(signature.toByteArray())
            val hashKey = String(Base64.getEncoder().encode(md.digest()))
            Log.i("AppLog", "key:$hashKey=")
        }
    } catch (e: Exception) {
        Log.e("AppLog", "error:", e)
    }

}

ป้อนคำอธิบายรูปภาพที่นี่


คุณหมายถึงฉันวางรหัสของคุณใน class MainActivity: FlutterActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) GeneratedPluginRegistrant.registerWith(this) } }
asdfasdf

6

นั่นคือวิธีที่ฉันได้รับ:

private class SessionStatusCallback implements Session.StatusCallback {
        @Override
        public void call(Session session, SessionState state, Exception exception) {

            if (exception != null) {
                new AlertDialog.Builder(FriendActivity.this)
                        .setTitle(R.string.login_failed_dialog_title)
                        .setMessage(exception.getMessage())
                        .setPositiveButton(R.string.ok_button, null)
                        .show();
            }

ดังนั้นเมื่อคุณพยายามป้อนโดยไม่ใช้คีย์ข้อยกเว้นจะเกิดขึ้น Facebook ใส่รหัส RIGHT ลงในข้อยกเว้นนี้ สิ่งที่คุณต้องทำคือคัดลอก


ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

6

หากคุณได้อัปโหลดแอปไปยัง Play store แล้วคุณสามารถสร้างรหัสแฮชได้ดังนี้:

1) ไปที่การจัดการการเผยแพร่ที่นี่

2) เลือก Release Management -> Signing App

3) คุณสามารถเห็นคีย์ SHA1 ในรูปแบบฐานสิบหกใบรับรองการลงนามแอป


4) คัดลอก SHA1 ในรูปแบบเลขฐานสิบหกและแปลงเป็นรูปแบบ base64 คุณสามารถใช้ลิงก์นี้โดยไม่ใช้ SHA1: ส่วนหนึ่งของฐานสิบหก


5) ไปที่คอนโซลผู้พัฒนา Facebook และเพิ่มรหัส (หลังจากแปลงเป็นฐาน 64) ในการตั้งค่า -> พื้นฐาน -> แฮชของคีย์



3

ดาวน์โหลด open ssl :

จากนั้นเพิ่ม openssl \ bin ให้กับตัวแปรระบบพา ธ :

คอมพิวเตอร์ของฉัน -> คุณสมบัติ -> การกำหนดค่าขั้นสูง -> ขั้นสูง -> ตัวแปรระบบ -> ภายใต้ตัวแปรระบบค้นหาเส้นทางและเพิ่มสิ่งนี้ในตอนท้าย:; yourFullOpenSSLDir \ bin

ตอนนี้เปิดบรรทัดคำสั่งในโฟลเดอร์ jdk \ bin ของคุณ C: \ Program Files \ Java \ jdk1.8.0_40 \ bin (บน windows ค้างกะและคลิกขวา -> บรรทัดคำสั่งเปิดที่นี่) และใช้:

keytool -exportcert -alias keystorealias -keystore C:\yourkeystore\folder\keystore.jks | openssl sha1 -binary | openssl base64

และคัดลอกหมายเลข 28 ความยาวที่สร้างขึ้นหลังจากให้รหัสผ่าน


ฉันไม่เห็นว่าคำตอบเดิมมีลิงค์ openssl อยู่แล้ว แต่มันยังคงมีประโยชน์สำหรับตัวแปรระบบ
sagits

ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

แน่นอนคุณแน่ใจหรือว่าคุณสร้างหมายเลขความยาว 28 ตัว? ถ้าเป็นเช่นนั้นตอนนี้คุณต้องไปที่เว็บไซต์ของนักพัฒนา Facebook (ค้นหาบน Google) และสร้างแอปพลิเคชั่นใหม่ภายใต้การตั้งค่าคุณสามารถเพิ่มแอพ Android ใหม่ได้ที่นั่นคุณวาง keyhash และชื่อกิจกรรมของคุณ ) มีการสอนเกี่ยวกับเรื่องนี้บน Facebook ด้วย
sagits

ขอบคุณสำหรับการตอบกลับอย่างรวดเร็วฉันจะลองเร็ว ๆ นี้
Apurva

3

เรียกใช้สิ่งนี้ในแอปของคุณ:

FacebookSdk.sdkInitialize(getApplicationContext());
Log.d("AppLog", "key:" + FacebookSdk.getApplicationSignature(this)+"=");

หรือสิ่งนี้:

public static void printHashKey(Context context) {
    try {
        final PackageInfo info = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
        for (android.content.pm.Signature signature : info.signatures) {
            final MessageDigest md = MessageDigest.getInstance("SHA");
            md.update(signature.toByteArray());
            final String hashKey = new String(Base64.encode(md.digest(), 0));
            Log.i("AppLog", "key:" + hashKey + "=");
        }
    } catch (Exception e) {
        Log.e("AppLog", "error:", e);
    }
}

และจากนั้นดูที่บันทึก

ผลลัพธ์ควรลงท้ายด้วย "="

การแก้ปัญหาจะขึ้นอยู่กับที่นี่และที่นี่


3

วิธีง่าย ๆ -> อย่าติดตั้ง openssl -> ใช้ GIT BASH!

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

รหัสผ่านเริ่มต้นคือ "android"

พวกเราส่วนใหญ่ติดตั้ง Git Bash ดังนั้นนี่เป็นวิธีที่ฉันชอบ


3

นี้จะช่วย newbees ด้วย

เพียงเพิ่มรายละเอียดเพิ่มเติมในคำตอบของ @ coder_For_Life22

ถ้าคำตอบนี้ช่วยคุณอย่าลืมโหวต มันกระตุ้นเรา

สำหรับสิ่งนี้คุณต้องทราบเส้นทางของไฟล์ที่เก็บคีย์และรหัสผ่านของแอป

สำหรับตัวอย่างนี้ให้พิจารณาว่าคีย์ถูกเก็บไว้ที่ "c: \ keystorekey \ new.jks"

1. เปิดหน้านี้ https://code.google.com/archive / p / openssl-for-windows / ดาวน์โหลด

2. ดาวน์โหลดไฟล์ zip 32 หรือ 64 บิตตามระบบปฏิบัติการ windows ของคุณ

3. แยกไฟล์ที่ดาวน์โหลดมาซึ่งคุณต้องการและจดจำเส้นทาง

4. สำหรับตัวอย่างนี้เราพิจารณาว่าคุณได้แตกโฟลเดอร์ในโฟลเดอร์ดาวน์โหลดแล้ว

ดังนั้นที่อยู่ไฟล์จะเป็น "C: \ Users \ 0 \ Downloads \ openssl-0.9.8e_X64 \ bin \ openssl.exe";

5. บนแป้นพิมพ์กดปุ่ม windows + r

6. จะเป็นการเปิดกล่องวิ่ง

7. พิมพ์ cmd และกดCtrl + Shift + Enter

8. สิ่งนี้จะเปิดพร้อมรับคำสั่งในฐานะผู้ดูแลระบบ

9. นี่นำทางไปยังโฟลเดอร์ bin ของ Java:

ถ้าคุณใช้บริการที่มีให้ JRE โดย Android สตูดิโอที่คุณจะหาเส้นทางดังนี้
เปิด android studio
ข File-> โครงสร้างโครงการ
ค ในบานหน้าต่างด้านซ้ายคลิก 'ตำแหน่ง SDK'
d ในบานหน้าต่างด้านขวาด้านล่าง 'ตำแหน่ง JDK' เป็นเส้นทาง jre ของคุณ
อี เพิ่ม "\ bin" ที่ท้ายเส้นทางนี้เป็นไฟล์ "keytool.exe" ที่เราต้องการอยู่ในโฟลเดอร์นี้
สำหรับตัวอย่างนี้ฉันพิจารณา
"C: \ Program Files \ Java \ jre-10.0.2 \ bin"

"C: \ Program Files (x86) \ Java \ jre-10.0.2 \ bin"
10. ตอนนี้โดยใช้คำสั่ง path ข้างต้นดำเนินการดังต่อไปนี้:

keytool -exportcert -alias androiddebugkey -keystore "c:\keystorekey\new.jks" | "C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" sha1 -binary |"C:\Users\0\Downloads\openssl-0.9.8e_X64\bin\openssl.exe" base64
  1. คุณจะถูกถามรหัสผ่านให้รหัสผ่านที่คุณได้รับเมื่อสร้างคีย์ keystore

    !!!!!! สิ่งนี้จะให้กุญแจแก่คุณ

ข้อผิดพลาด: ถ้าคุณได้รับ:
---
'keytool' ไม่ได้รับการยอมรับว่าเป็นคำสั่งภายในหรือภายนอก
---
ซึ่งหมายความว่ามีการติดตั้งจาวาไว้ที่อื่น


3

ขั้นตอนที่ 1-> C: \ Program Files \ Java \ jdk1.6.0_43 \ bin>

ขั้นตอนที่ 2> keytool -list -v -keystore C: \ Users \ leon \ .android \ debug.keystore -alias androiddebugkey -passpass android -keypass android

คุณได้รับค่าSHA1 คลิกที่ลิงค์นี้และแปลงค่า SHA1 ของคุณเป็น HASH KEY

ฉันแน่ใจว่าลิงค์นี้จะช่วยคุณได้ 100%



2

คุณสามารถรับลายนิ้วมือได้จากhttps://console.developers.google.com/projectselector/apis/credentials
และใช้รหัส Kotlin นี้เพื่อแปลงเป็น keyhash:

fun main(args: Array<String>) {
    listOf("<your_production_sha1_fingerprint>",
            "<your_debug1_sha1_fingerprint>",
            "<your_debug2_sha1_fingerprint>")
            .map { it.split(":") }
            .map { it.map { it.toInt(16).toByte() }.toByteArray() }
            .map { String(Base64.getEncoder().encode(it)) }
            .forEach { println(it) }
}

1

https://developers.facebook.com/docs/android/getting-started/

4.19.0 - 25 มกราคม 2017

Facebook SDK

ดัดแปลง

Facebook SDK จะเริ่มต้นโดยอัตโนมัติเมื่อแอปพลิเคชันเริ่มต้น ในกรณีส่วนใหญ่ไม่จำเป็นต้องโทรไปที่ FacebookSDK.sdkInitialize () อีกต่อไป ดูคู่มือการอัพเกรดสำหรับรายละเอียดเพิ่มเติม

สำหรับ Debug

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 (NoSuchAlgorithmException e) {
    e.printStackTrace();
} catch (Exception e) {
    e.printStackTrace();
}

1

เพียงแค่เรียกใช้รหัสนี้ในของคุณOnCreateViewหรือOnStart Actvity และฟังก์ชั่นนี้กลับมาให้คุณพัฒนากุญแจแฮ

private String generateKeyHash() {
    try {
        PackageInfo info = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES);
        for (Signature signature : info.signatures) {
            MessageDigest md = (MessageDigest.getInstance("SHA"));
            md.update(signature.toByteArray());
            return new String(Base64.encode(md.digest(), 0));
        }
    }catch (Exception e) {
        Log.e("exception", e.toString());
    }
    return "key hash not found";
}

0

ฉันพบปัญหาเดียวกันฉันไม่ได้ขอรหัสผ่านและดูเหมือนว่าฉันมีเส้นทางที่ไม่ถูกต้องสำหรับไฟล์ที่เก็บคีย์

ในความเป็นจริงหาก keytool ไม่พบที่เก็บคีย์ที่คุณได้ตั้งค่ามันจะสร้างขึ้นมาใหม่และให้คีย์ผิดเนื่องจากคุณไม่ได้ใช้ที่ถูกต้อง

กฎทั่วไปคือถ้าคุณไม่ได้ถูกถามรหัสผ่านคุณจะต้องสร้างรหัสผิด


ฉันสร้างแฮชคีย์แล้ว แต่ไม่รู้ว่าจะวางคีย์นั้นไว้ที่ไหนคุณจะแนะนำฉัน ฉันใช้ android studio บน Ubuntu
Apurva

0

คุณสามารถใช้apkนี้

1.first install the app from the Google play store
2.install the above apk
3.launch the apk and input the package name of your app
4.then you will get the hash code you want

@Elynad It's Chinese: D
armnotstrong


0

keytool -exportcert -alias androiddebugkey -keystore "C: \ Users ** Deepak **. android \ debug.keystore" | " C: \ Users \ Deepak \ ssl \ bin \ openssl" sha1 -binary | " C: \ Users \ Deepak \ ssl \ bin \ openssl" base64

2 การเปลี่ยนแปลงในคำสั่งด้านบนนี้ 1.Deepak === แทนที่ด้วยระบบของคุณ USERNAME 2.C: \ Users \ Deepak \ ssl === ทำการรีโหลดเส้นทาง Open SSL ของคุณ

เรียกใช้คำสั่งนี้และรับผลลัพธ์เช่นนี้

C: \ Users \ Deepak> keytool -exportcert -alias androiddebugkey -keystore "C: \ Users \ D eepak.android \ debug.keystore" | "C: \ Users \ Deepak \ ssl \ bin \ openssl" sha1 -binary | "C: \ Users \ Deepak \ ssl \ bin \ openssl" base64 ป้อนรหัสผ่านที่เก็บคีย์: ****** ga0RGNY ****************** =


0

หากใครบางคนมีปัญหากับ openssl ให้ทำตามคำแนะนำนี้:

  1. ดาวน์โหลด "openssl" สำหรับ windows ใน zip
  2. แยก zip ในเส้นทางที่คุณต้องการ
  3. รับเส้นทางสำหรับโฟลเดอร์ "bin" ที่อยู่ในรหัสไปรษณีย์

แค่นั้นแหละ

https://sourceforge.net/projects/openssl/files/latest/download

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.