ฉันกำลังทำงานกับแอพ Android ที่ฉันต้องการรวมคุณสมบัติการโพสต์ Facebook ฉันดาวน์โหลด Facebook-Android SDK และฉันได้ readme.md (ไฟล์ข้อความ) ในนั้นซึ่งถูกกล่าวถึงเพื่อสร้างแฮชคีย์สำหรับ Android ฉันจะสร้างมันได้อย่างไร
ฉันกำลังทำงานกับแอพ Android ที่ฉันต้องการรวมคุณสมบัติการโพสต์ Facebook ฉันดาวน์โหลด Facebook-Android SDK และฉันได้ readme.md (ไฟล์ข้อความ) ในนั้นซึ่งถูกกล่าวถึงเพื่อสร้างแฮชคีย์สำหรับ Android ฉันจะสร้างมันได้อย่างไร
คำตอบ:
นี่คือขั้นตอน -
ดาวน์โหลด openssl จากรหัส Google (หากคุณมีเครื่อง 64 บิตคุณต้องดาวน์โหลด openssl-0.9.8e X64ไม่ใช่รุ่นล่าสุด)
แยกมันออกมา สร้างโฟลเดอร์ - 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
สำหรับข้อมูลเพิ่มเติมเยี่ยมชมที่นี่
$ลองออกออก
[แก้ไขปี 2020] -> ตอนนี้ฉันขอแนะนำคำตอบทั้งหมดที่นี่วิธีที่ง่ายกว่าการใช้ android studio เร็วขึ้นและไม่จำเป็นต้องเขียนโค้ดใด ๆ
คุณสามารถใช้รหัสนี้ในกิจกรรมใดก็ได้ มันจะเข้าสู่ระบบแฮชคีย์ใน 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());
}
คุณสามารถลบรหัสได้หลังจากรู้รหัส;)
keytoolคำสั่งที่ฉันได้รับแฮชคีย์ผิด (ฉันไม่รู้ว่าทำไมตัดสินใจฉันไม่สนใจมากพอที่จะตรวจสอบ) วิธีนี้ใช้งานได้จริงและใช้เวลา 5 นาทีเพื่อให้การดีบักและปล่อยแฮชคีย์ +1
ฉันได้สร้างเครื่องมือขนาดเล็กสำหรับ Windows และ Mac OS X เพียงแค่โยนไฟล์เก็บคีย์และรับแฮชคีย์
หากคุณต้องการไฟล์ debug.keystore เริ่มต้นให้ใช้นามแฝงและรหัสผ่านเริ่มต้น มิฉะนั้นให้ใช้ไฟล์ keystore และค่าของคุณเอง
ลองดูดาวน์โหลดเวอร์ชั่น Windowsหรือดาวน์โหลดเวอร์ชั่นMac OS X (Dev-Host อาจหยุดทำงานในบางครั้ง ... ดังนั้นหากลิงค์เสีย PM ฉันและฉันจะแก้ไข)
ฉันหวังว่าจะช่วยพวกคุณ ...
31 ธันวาคม 2014 - แก้ไข: เปลี่ยนโฮสต์เป็น AFH โปรดแจ้งให้เราทราบหากลิงก์เสีย
21 พ.ย. 2556 - แก้ไข:
ตามที่ผู้ใช้ร้องขอฉันเพิ่มตำแหน่งที่เก็บคีย์เริ่มต้นและปุ่ม DONATE รู้สึกอิสระที่จะใช้มันถ้าฉันได้ช่วยคุณ :)

keytoolบรรทัดคำสั่ง มันควรจะให้ผลลัพธ์ที่เหมือนกันหรือไม่หากนำไปใช้กับไฟล์ keystore เดียวกัน
คำแนะนำในขณะนี้ในFacebook ของ Android สอน ไม่ทำงานได้ดีภายใต้ของ Windows ตัวอย่างของพวกเขาแสดงวิธีการไพพ์เอาต์พุต keytool ไปยัง openssl แต่ถ้าคุณลองภายใต้ Windows เอาต์พุตจะไม่ถูกต้องด้วยเหตุผลบางประการ ฉันพบว่าฉันต้องใช้ไฟล์ตัวกลางเพื่อให้มันทำงานได้อย่างถูกต้อง นี่คือขั้นตอนที่เหมาะกับฉัน:
เริ่มต้นด้วยการดาวน์โหลดopenssl สำหรับ Windowsจาก Google
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
นี่คือสิ่งที่ให้ไว้ในหน้าอย่างเป็นทางการของ Facebook :
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
ให้ฉันแบ่งคำสั่งนี้เป็นชิ้นส่วน
"keytool.exe"มองหา คุณสามารถค้นหาในไดรฟ์ C: คุณสามารถค้นหาได้ในหรือ"java jdk" "java jre"หากคุณติดตั้งหลายรุ่นให้เลือกใด ๆ
เปิด CMD "keytool.exe"พรอมต์และไปที่ไดเรกทอรีดังกล่าวข้างต้นที่คุณพบ
คลิป "exe`" และวางคำสั่งด้านบนที่มีให้ในหน้า Facebook
คุณจะได้รับข้อผิดพลาดในการป้อนสิ่งนี้ซึ่ง OpenSSL ไม่ได้รับการยอมรับเช่นเดียวกับในคำสั่งอินพุตเอาต์พุต วิธีแก้ปัญหา: ดาวน์โหลด "Openssl" จากOpenSSL (หากคุณมีเครื่อง 64 บิตคุณต้องดาวน์โหลด openssl-0.9.8e X64 ) แยกและบันทึกได้ทุกที่ ... ฉันบันทึกไว้ในไดรฟ์ C: ในOpenSSlโฟลเดอร์
แทนที่ openssl ในคำสั่งด้านบนซึ่งคุณได้รับข้อผิดพลาดของ OpenSSL ด้วย "C: \ OpenSSL \ bin \ openssl" ที่ทั้งสองแห่งหลังจากที่ไปป์ "|"
androidหากได้รับแจ้งให้ใส่รหัสผ่านให้ป้อน
และคุณจะได้รับรหัสแฮชของคุณ สำหรับขั้นตอนเพิ่มเติมอ้างถึงหน้า Facebook อีกครั้ง
เพิ่มรหัสนี้ลงonCreateในกิจกรรมของคุณมันจะพิมพ์แฮชภายใต้แท็กKeyHashใน logCat ของคุณ
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) {
}
คุณสามารถเพิ่ม hashkeys หลายสำหรับบัญชีของคุณดังนั้นถ้าคุณได้รับการทำงานในการแก้ปัญหาไม่ลืมที่จะทำงานนี้อีกครั้งในโหมดการเปิดตัว
ในการรับรหัสแฮชของ Android ให้ทำตามขั้นตอนเหล่านี้:
cd C:\Program Files\Java\jdk1.6.0_26\binkeytool -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 myKeyStoreให้พา ธ ของคีย์การปลดล็อคของคุณ รหัสด้านบนใช้สำหรับคีย์ดีบั๊ก
ทางออกที่ง่ายที่สุดที่ฉันพบคือ:
ค้นหาบรรทัดในบันทึกที่มีลักษณะดังนี้:
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" และวางลงในพื้นที่แฮชคีย์ Android ของ Facebook
KeyHash: XWwXXXXX/5xxxxxxxxxxx=ในบันทึกและช่วยฉันออกไป!
คุณสามารถรับแฮชคีย์จากคีย์ SHA-1 มันง่ายมากที่คุณจะต้องรับคีย์ SHA-1 (APK ที่ลงชื่อ) จาก Play Store ตรวจสอบภาพด้านล่าง
ตอนนี้คัดลอกรหัส SHA-1 และวางไว้ในเว็บไซต์นี้http://tomeko.netตรวจสอบภาพด้านล่างเพื่อรับรหัสแฮชของคุณ
ฉันได้ทำโดยวิธีนี้สำหรับLinux OSและWindows OS :
keytool -exportcert -alias **myaliasname** -keystore **/home/comp-1/Desktop/mykeystore.jks** | openssl sha1 -binary | openssl base64โปรดเปลี่ยนชื่อนามแฝงและคีย์สโตนด้วยพา ธ ของมันตามความต้องการของคุณ
เทอร์มิจะถามสำหรับรหัสผ่านของ Keystore คุณต้องใส่รหัสผ่านสำหรับเดียวกันKeystore
ดังนั้นในที่สุดคุณจะได้รับRelease Hashkey
ขั้นตอนสำหรับการปล่อย แฮชคีย์ :
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 คุณต้องใส่รหัสผ่านสำหรับเดียวกันKeystore
ดังนั้นในที่สุดคุณจะได้รับRelease Hashkey
เสร็จสิ้น
ดาวน์โหลด openSSL สำหรับ windows ที่นี่คุณสามารถหา 64 บิตและ 32 บิตได้ที่นี่
แตกไฟล์ที่ดาวน์โหลดมา
C: \ Users \ ชื่อผู้ใช้ \ .android \ debug.keystore
keytool -exportcert -alias androiddebugkey -keystore C: \ Users \ username.android \ debug.keystore | "C: \ openSSL \ bin \ openssl" sha1 -binary | "C: \ openSSL \ bin \ openssl" base64
androidให้แฮช 24 หลักและการพิมพ์aให้แฮช 28 หลัก ไม่รู้ทำไม!
คุณต้องสร้างที่เก็บคีย์โดย keytool สำหรับแอพที่ลงนามแล้วสำหรับ Android เช่นขั้นตอนที่อธิบายไว้ในไซต์ Androidแล้วคุณต้องติดตั้ง cygwin จากนั้นคุณต้องติดตั้ง openssl จากรหัส googleจากนั้นเพียงแค่เรียกใช้คำสั่งต่อไปนี้ คีย์สำหรับ android แล้วใส่รหัสแฮชนั้นลงในแอปพลิเคชัน facebook ที่คุณสร้างขึ้น และจากนั้นคุณสามารถเข้าถึงแอปพลิเคชัน Facebook ผ่านแอปพลิเคชัน Android เพื่อโพสต์วอลล์ ("publish_stream") อาจเป็นตัวอย่าง
$ keytool -exportcert -alias alias_name -keystore sample_keystore.keystore | openssl sha1 -binary | openssl base64
คุณต้องดำเนินการคำสั่งดังกล่าวจาก cygwin
ดาวน์โหลด 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)
มันจะขอรหัสผ่านซึ่งเป็น Android
เพียงเปิดไฟล์กิจกรรมหลักของคุณและสร้างฟังก์ชั่นด้านล่างนี้:
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 เรียกใช้แอปพลิเคชันของคุณซึ่งจะสร้างรหัสแฮชสำหรับแอปพลิเคชันของคุณ
ตอนนี้เปิดล็อกแมวและค้นหาด้วย "KeyHash" และคัดลอกคีย์แฮ
หนึ่งที่คุณสร้างคีย์แฮคุณสามารถลบฟังก์ชั่นนี้
1) สร้างรหัสเพื่อลงชื่อสมัครใช้ของคุณและจดจำนามแฝง
2) ติดตั้ง OpenSSL
3) วางโฟลเดอร์ bin ของ OpenSSL ในเส้นทางของคุณ
4) ทำตามขั้นตอนที่ระบุไว้ภายใต้ "การติดตั้ง Single Sign-On" บน FB-ปฏิบัติการ Android SDK หน้าและสร้างความยุ่งเหยิงที่สำคัญของคุณ ตรวจสอบให้แน่ใจว่าคุณใส่ชื่อแทนและที่เก็บคีย์ที่ถูกต้อง
5) สร้างแอปพลิเคชันบน Facebok และภายใต้แท็บอุปกรณ์มือถือให้ป้อนรหัสแฮชนี้
เอกสารอย่างเป็นทางการในเว็บไซต์นักพัฒนา Facebook :
@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) {
}
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64และฉันยังคงได้รับ hash ของคีย์ไม่ตรงกับ hash ของคีย์ที่เก็บไว้
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
สำหรับ Linux
เปิดเทอร์มินัล:
สำหรับ 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
หมายเหตุ: ตรวจสอบให้แน่ใจว่าในทั้งสองกรณีจะต้องขอรหัสผ่าน หากไม่ขอรหัสผ่านแสดงว่ามีบางอย่างผิดปกติในคำสั่ง
สำหรับแอปพลิเคชัน Android
รหัสนี้ใช้เพื่อรับรหัสแฮชในแอปพลิเคชัน Android ของคุณสำหรับการรวม Facebook ฉันได้ทดสอบอุปกรณ์ทั้งหมดและใช้งานได้ เปลี่ยนชื่อแพ็คเกจของรหัสนี้เท่านั้น:
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) {
}
}
ตามที่ได้รับคำตอบในประเด็นที่คล้ายกันฉันพบว่าสิ่งนี้ทำงานได้สำหรับฉัน:
apkname.apkไฟล์ที่คุณต้องการทราบแฮชของไปยังโฟลเดอร์ ' Java \ jdk1.7.0_79 \ bin 'keytool -list -printcert -jarfile apkname.apkSHA1ค่าและแปลงโดยใช้เว็บไซต์นี้ทางออกที่ง่ายที่สุด:
ในการสร้างแฮชของรีลีสคีย์ของคุณให้รันคำสั่งต่อไปนี้บน Mac หรือ Windows เพื่อแทนที่ alias key ของรีลีสและพา ธ ไปยังที่เก็บคีย์ของคุณ
บน Windows ให้ใช้:
keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64
คำสั่งนี้ควรสร้างสตริงอักขระ 28 ตัว โปรดจำไว้ว่าคัดลอกและวางรหัสแฮชของรุ่นนี้ลงในการตั้งค่า Android ของ Facebook App ID
ภาพ: 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
ใช้สิ่งนี้สำหรับแฮชของคีย์การพิมพ์ใน 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){
}
แก้ไขฉันด้วยใน Android Studio แต่ด้วยวิธีที่แตกต่างกันเล็กน้อย
วิธีรับค่า SHA-1 ใน Android Studio
ค่า SHA-1 ดูเหมือนซีดีนี้: A1: EA: A3: 5C: 5C: 68: FB: FA: 0A: 6B: E5: 5A: 72: 64: DD: 26: 8: 44: 84
และเปิดhttp://tomeko.net/online_tools/hex_to_base64.phpเพื่อแปลงค่า SHA1 ของคุณเป็น base64 นี่คือสิ่งที่ Facebook ต้องการเพื่อรับแฮชที่สร้างขึ้น "******************** =" และคัดลอกแฮชคีย์ไปยังคอนโซลแอป Facebook
ส่วนหนึ่งของคำตอบนี้นำมาจากที่นี่Github Link
มีสองวิธีที่มีความซับซ้อนและวิธีที่ง่าย
วิธีที่หนึ่ง: (ซับซ้อนเล็กน้อย)
ก่อนอื่นคุณต้องดาวน์โหลดSSL 64bitหรือ32bitตามอย่าลืมที่จะดาวน์โหลดไฟล์ที่มีชื่อที่มีeหลังโค้ดรุ่นopenssl-0.9.8e_X64.zipหรือopenssl-0.9.8e_WIN32.zipไม่ได้อยู่กับkหลังโค้ดรุ่น
และวางไว้ในไดเรกทอรี AndroidStudio / jre / bin หากคุณไม่รู้ว่าจะวางตำแหน่งใดคุณสามารถค้นหาไดเรกทอรีนี้ได้โดยคลิกขวาบนทางลัดของ studio studio Android:
ตอนนี้คุณมีการจัดการที่สองสิ่งที่จำเป็นต้องใช้ในสถานที่แห่งหนึ่ง แต่ยังคงคุณต้องไปหาเส้นทางสำหรับคุณdebug.keystoreที่จะสามารถพบได้ใน"C:\Users\yourusernamehere\.android\debug.keystore",
หมายเหตุ หากแอปของคุณได้รับการเผยแพร่แล้วหรือกำลังจะเผยแพร่ให้ใช้ที่เก็บคีย์การเผยแพร่ของคุณหากว่าคุณกำลังทดสอบในโหมดการพัฒนามากกว่าที่คุณสามารถใช้ debug, keysotre
เมื่อทุกอย่างถูกตั้งค่าให้จัดเรียงคำสั่งที่คุณต้องการเรียกใช้สำหรับการสร้างรหัสแฮช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
มันจะให้คุณป้อนรหัสผ่านสำหรับ debug.keystore ซึ่งเป็น android โดยค่าเริ่มต้น หากคุณใช้รหัสของคุณเองมากกว่ารหัสผ่านก็จะเป็นของคุณเช่นกัน ผลลัพธ์จะมีลักษณะเช่นนี้หากทุกอย่างเป็นไปตามที่คาดหวังหวังว่ามันจะช่วยได้
วิธีที่สอง (ง่าย ๆ อย่างหนึ่งตามลำดับ)
หากคุณไม่ต้องการทำตามขั้นตอนทั้งหมดข้างต้นให้ใช้วิธีต่อไปนี้เพื่อบันทึก 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());
}
}
เอาท์พุท:
วิธีที่ดีที่สุดคือการใช้รหัสต่อไปนี้:
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();
}
}
แต่ฉันรู้สึกผิดหวังกับความจริงที่ว่าไม่มีเครื่องมือง่ายๆในการสร้าง HashKey สำหรับแอพ Facebook ทุกครั้งที่ฉันต้องเล่นกับ Openssl และ Keytool หรือใช้รหัสเพื่อรับแฮชจากลายเซ็น ...
ดังนั้นฉันจึงเขียน KeyGenTool ง่ายๆที่จะทำงานให้คุณ: -> KeyGenTool บน Google Play <-
สนุก :)
ฉันทำผิดเล็กน้อยที่ควรจำไว้ หากคุณใช้ที่เก็บคีย์ของคุณโปรดตั้งชื่อแทนไม่ใช่ 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
เย็น.
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());
}
}
});
}
}
รหัส 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());
}
}
โปรดอย่าลืมสร้างคีย์ในสภาพแวดล้อม Debug และ Release ตามที่เปลี่ยนตามการตั้งค่าการสร้าง
ลองนี้:
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());
}
}