ฉันกำลังทำงานกับแอพ 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\bin
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
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.apk
SHA1
ค่าและแปลงโดยใช้เว็บไซต์นี้ทางออกที่ง่ายที่สุด:
ในการสร้างแฮชของรีลีสคีย์ของคุณให้รันคำสั่งต่อไปนี้บน 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());
}
}