การรวม Facebook Android กับแฮชของคีย์ที่ไม่ถูกต้อง


194

ในหนึ่งในแอพของฉันฉันต้องได้รับข้อมูลจาก Facebook ... ฉันกำลังทำสิ่งนี้:

ฉันได้สร้างID แอปแล้ว มันเข้าสู่ระบบสำเร็จ แต่หลังจากออกจากระบบฉันเข้าสู่ระบบแล้วมันให้ฉัน:

ภาพหน้าจอของข้อผิดพลาดแฮชของคีย์ที่ไม่ถูกต้อง Facebook

ฉันทำอะไรผิด ฉันกำลังใช้SDK ของ Facebook ... ฉันได้ติดตั้ง Facebook บนโทรศัพท์ของฉัน ... มันทำงานได้ดีภายในตัวจำลอง แต่นั่นไม่ได้ติดตั้งแอปพลิเคชั่น Facebook inbuilt

นี่คือรหัสของฉัน:

if (FB_APP_ID == null) {
    Builder alertBuilder = new Builder(this);
    alertBuilder.setTitle("Warning");
    alertBuilder.setMessage("A Facebook Applicaton ID must be " +
                            "specified before running this example: see App.java");
    alertBuilder.create().show();
}

// Initialize the dispatcher
Dispatcher dispatcher = new Dispatcher(this);
dispatcher.addHandler("login", LoginHandler.class);
dispatcher.addHandler("stream", StreamHandler.class);
dispatcher.addHandler("logout", LogoutHandler.class);

// If a session already exists, render the stream page
// immediately. Otherwise, render the login page.
Session session = Session.restore(this);
if (session != null) {
    dispatcher.runHandler("stream");
}
else {
    dispatcher.runHandler("login");
}

12
แต่มันจะทำงานได้ดีเป็นครั้งแรกเพราะมันไม่ทำงานถ้าฉันเข้าสู่ระบบหลังจากออกจากระบบเสร็จแล้ว
Android

1
ใช่ฉันมี .. สร้างโดยใช้ลอง {PackageInfo ข้อมูล = getPackageManager (). getPackageInfo ("com.facebook.samples.hellofacebook", PackageManager.GET_SIGNATURES); สำหรับ (ลายเซ็นลายเซ็น: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); }
Android

1
ฉันส่งปัญหานี้ที่นี่! เข้าใจที่นี่ดี! [ stackoverflow.com/questions/5306009/… ] [1]
Madi

3
@Android แม้ว่านี่จะเก่า แต่ฉันควรจะพูดถึงเรื่องนี้ สิ่งนี้จะไม่เกิดขึ้นเมื่อผู้ใช้ออกจากระบบจากนั้นเข้าสู่ระบบ สิ่งนี้จะเกิดขึ้นเมื่อคุณทำการดีบั๊กเป็นครั้งที่สองนั่นคือติดตั้งแอปใหม่ขณะทำการดีบั๊ก ดังนั้นการเปลี่ยนแปลงแฮช สิ่งนี้จะไม่เกิดขึ้นในกรณีที่แอปที่ลงชื่อ (พร้อมผลิต)
Nilay Vishwakarma

1
คุณได้รับข้อผิดพลาดเดียวกันหากคุณถอนการติดตั้งแอพ Facebook? ฉันทดสอบจากโทรศัพท์สองเครื่องและข้อผิดพลาดนี้เกิดขึ้นเมื่อติดตั้ง Facebook App เท่านั้น
Jaime Montoya

คำตอบ:


274

รหัสแฮชที่สร้างผิด คุณอาจได้รับรหัสแฮชโดยใช้สองขั้นตอน

หนึ่งคือผ่านพรอมต์คำสั่ง อีกอันหนึ่งคือการเข้ารหัส คีย์แฮชผ่านทางพรอมต์คำสั่งใช้งานได้ในครั้งแรกเท่านั้น ฉันไม่รู้เหตุผล ฉันยังมีปัญหาเดียวกัน ดังนั้นฉันจึงลองผ่านทางการเขียนโปรแกรม

ทำตามขั้นตอนเหล่านี้:

oncreate()วางรหัสต่อไปนี้ใน

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           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) {
}

แก้ไข "com.example.packagename" ด้วยชื่อแพคเกจของคุณในการเข้ารหัสข้างต้นโดยไม่ล้มเหลว (คุณอาจพบชื่อแพคเกจของคุณในไฟล์รายการ Android)

เรียกใช้แอปพลิเคชันของคุณ ไปที่กิจกรรมที่คุณวางโค้ดด้านบน ในไฟล์ LogCat ค้นหา "KeyHash" คุณอาจพบแฮชคีย์ คัดลอกแฮชคีย์และไปที่หน้าแดชบอร์ดของแอปพลิเคชัน Facebook ไปที่การตั้งค่าและป้อนรายละเอียดเช่นในภาพด้านล่าง

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

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

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


20
ด้วยวิธีนี้เป็นไปได้มากว่าคุณจะมีแฮชคีย์สำหรับการดีบักที่เก็บคีย์ มันทำงานให้คุณในโหมดการพัฒนาไม่จำเป็นสำหรับโหมดการผลิตของคุณ อย่างน้อยมันใช้ไม่ได้กับแอปโปรดักชั่นของฉัน
Liangjun

3
ขอบคุณคุณประหยัดเวลาของฉันมาก ... facebook doc อย่างเป็นทางการไม่ควรอ่านมันพล่าม
DjP

ขอบคุณมากครับ!
KinGPinG

สวัสดีโดยรหัสนี้ PackageInfo ข้อมูล = getPackageManager (). getPackageInfo ("com.example.packagename", PackageManager.GET_SIGNATURES); สำหรับ (ลายเซ็นลายเซ็น: info.signatures) {MessageDigest md = MessageDigest.getInstance ("SHA"); md.update (signature.toByteArray ()); Log.d ("KeyHash:", Base64.encodeToString (md.digest (), Base64.DEFAULT)); คีย์แฮชที่แตกต่างกันจะถูกส่งในขณะที่ฉันรันคำสั่งใน cmd บน windows คีย์แฮชของฉันแตกต่างกันและฉันได้เพิ่มไว้ใน FB แต่บันทึกยังคงแสดงแฮชของรหัสโปรแกรม
Sagar Devanga

1
ช่วยฉันได้มากเวลา ยังดีที่สุด ตรวจสอบ verbose สำหรับ keyhash และคัดลอกและวางในหน้าผู้พัฒนา facebook อย่าทำผิดพลาดในการพิมพ์ด้วยตนเอง! นอกจากนี้ให้ทำความเข้าใจว่าการคีย์แฮชเปลี่ยนทุกครั้งที่คุณถอนการติดตั้งและติดตั้งแอพ
sanjeev

190

หากคุณใช้การลงชื่อเข้าใช้ Google Play App:

เปิดลงนาม Appส่วนใน Google Play คอนโซลและได้รับSHA-1 กัญชาภายใต้ใบรับรองการลงนาม App จากนั้นแปลงเป็นBase64ตัวอย่างเช่นด้วยเครื่องมือนี้: Hexadecimal -> ตัวถอดรหัสสตริง base64

ภาพหน้าจอของคอนโซล

แปลงเป็นภาพหน้าจอ Base64


14
ท่าน! คุณเป็นผู้ช่วยชีวิต! ความรักมากมาย ฉันใช้การลงนามของ Play Store ในขณะที่ฉันวางแฮชจากรีลีสคีย์ของฉันในคอนโซลของ Facebook
Taha Rushain

4
คุณช่วยชีวิตฉันใช้การตอบสนองไม่มีใครพูดถึงการลงนามในแอพ Play Store
TomSawyer

7
ขอบคุณ! มันได้ผล! นอกจากนี้คุณยังสามารถใช้คำสั่งมินัลสำหรับมัน echo YOUR_SHA1_CERTIFICATE_COPIED_FROM_GOOGLE_PLAY | sed s/\://g | xxd -r -p | base64
Yuriy Seredyuk

4
นี่คือสิ่งที่ต้องทำเพื่อสภาพแวดล้อมการผลิต !!! ยกนิ้ว!
Bikey

สิ่งที่ฉันอยากรู้ การเปลี่ยนแปลงในการดีบัก Hashkey ทุกครั้งที่คุณถอนการติดตั้งและติดตั้งแอปสำหรับ apk ที่ลงชื่อแล้วนี่เป็นทางออกที่ดีที่สุด! คุณทำให้ชีวิตง่ายขึ้นขอบคุณ!
sanjeev

124

หากคุณประสบปัญหานี้ให้ใส่รหัสนี้ในdeveloper.facebook.comของคุณ:

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

แล้วให้แน่ใจว่าแอปของคุณสดบนdeveloper.facebook.com

วงกลมสีเขียวนี้กำลังระบุว่าแอปยังมีชีวิตอยู่:

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

หากยังไม่ได้ทำตามสองขั้นตอนเหล่านี้เพื่อทำให้แอปของคุณใช้งานได้:

ขั้นตอนที่ 1ไปที่แอปพลิเคชัน→ การตั้งค่าเพิ่มอีเมลติดต่อและใช้บันทึกการเปลี่ยนแปลง

ขั้นตอนที่ 2ไปที่App ทบทวนตัวเลือกและให้แน่ใจว่าสลับนี้คือใช่ ฉันเพิ่มภาพหน้าจอ:

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

หมายเหตุ:หากคุณต้องการคัดลอก hashkey ให้ตรวจสอบ BlueServiceQueue ในLogCat


5
มีวิธีง่าย ๆ ในการคัดลอกแฮชนั้นจากโทรศัพท์หรือไม่?
Daniel Shatz

4
@DanielShatz มันปรากฏใน logcat ฉันค้นพบเฉพาะหลังจากที่ฉันคัดลอกมันโดยตัวอักษร
Alaa M.

4
@DanielShatz ค้นหา tag BlueServiceQueueใน logcat
Alaa M.

4
คำตอบนี้ใช้ได้สำหรับฉัน หลังจากความพยายามพิมพ์ hash ด้วยตนเองมันทำให้ฉันมีข้อผิดพลาดเหมือนกันปัญหาคือฉันพิมพ์ตัวพิมพ์ใหญ่ i "I" แทนตัวพิมพ์เล็ก L "l" เอาเวลาฉันไปรู้เรื่องนี้
Markus

1
มันใช้งานได้ แต่ฉันสงสัยว่า FB รับรหัสแฮชนี้จากที่ใด ไม่มีใครสงสัยไหม? ข้อผิดพลาดแสดงรหัสแฮชที่ใช้งานได้ดี แต่ถึงแม้จะมีคำสั่งทั้งหมดหรือรับ sha1 ถึง base64 จากการลงนามแอพของ Google ก็ให้รหัสที่ FB แสดงในข้อผิดพลาดให้ฉัน ... ขอบคุณสำหรับเคล็ดลับต่อไป
Umar3x

82

ฉันมีปัญหาเดียวกัน ฉันแน่ใจว่ามันเป็นเพราะความผิดเล็กน้อยและใช่มันเป็น!

ฉันพบวิธีแก้ปัญหา:

เมื่อสร้างคีย์แฮ็กดีบักในคอมพิวเตอร์ของฉันฉันป้อนรหัสผ่านของระบบ แต่รหัสผ่านควรเป็นดังต่อไปนี้ -

ป้อนรหัสผ่านที่เก็บคีย์: "android" นี่เป็นปัญหาเดียวในกรณีของฉัน

----- สำหรับการสร้างการแฮชคีย์Debugให้ใช้คำสั่งนี้ -

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

ป้อนรหัสผ่านที่เก็บคีย์: 'android'

----- เพื่อสร้างการแฮชปุ่มReleaseให้ใช้คำสั่งนี้ -

keytool -exportcert -alias "alias of keystore" -keystore "Your path to the keystore when signing app" | openssl sha1 -binary | openssl base64

ระบุรหัสผ่านที่เก็บคีย์ของคุณหลังจากเรียกใช้งานคำสั่งนี้


5
ใช้ "android" เป็นรหัสผ่านใช้งานได้สำหรับฉัน นี่ทำให้งง
adbie

3
ใช้ "android" นี้เป็นรหัสผ่านเมื่อสร้างรหัสแฮช
Akash Bisariya

2
บนเครื่อง windows ตรวจสอบให้แน่ใจว่าตัวแปรพา ธ ถูกตั้งค่าอย่างถูกต้องสำหรับโฟลเดอร์ openssl \ bin และ java .. \ bin นอกจากนี้ตั้งค่าตัวแปร HOMEPATH เพื่อให้สามารถใช้คำสั่งจาก facebook ได้
KawaiKx

1
อย่างน้อยบน mac ฉันต้องติดตั้ง Java JDK เพื่อให้ใช้งานได้ มิฉะนั้นคำสั่ง debug ด้านบนจะยังคงสร้างแฮช แต่แฮชจะไม่ทำงานและคุณจะไม่ได้รับรหัสผ่าน ด้วย JDK ติดตั้งสิ่งนี้ทำงานเหมือนมีเสน่ห์
lejonl

1
คำตอบนี้ควรเป็นคำตอบที่ถูกต้อง
Evan Ngo

20

ฉันประสบปัญหาเดียวกัน ฉันทำวิจัยสั้น ๆ เกี่ยวกับสาเหตุที่เป็นไปได้สำหรับพฤติกรรมแปลก ๆ นี้และฉันพบสิ่งต่อไปนี้:

  • ในระหว่างการดำเนินการครั้งแรกของแอพ Facebook ใหม่มันจะอนุญาตการเชื่อมต่อ / เข้าสู่ระบบแม้ว่าคุณจะไม่ได้ระบุแฮชของคีย์ก็ตาม

  • สำหรับผม, กวดวิชาที่ Facebook ให้ไว้ไม่สร้างกัญชาคีย์ที่ถูกต้องเพราะมันได้ให้การกำหนดค่าที่ไม่ถูกต้อง เมื่อดำเนินการ:

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

ตรวจสอบให้แน่ใจว่าคุณตรวจสอบคุณสมบัติทั้งหมด - การHOMEPATHมีอยู่ของที่เก็บคีย์ ฯลฯ บางทีคุณอาจต้องระบุรหัสผ่านด้วย

  • สิ่งที่สร้างการกำหนดค่าที่เหมาะสมคือโซลูชันที่ @Mahendranแนะนำ

  • นอกจากนี้หากคุณเห็นข้อผิดพลาดที่โพสต์ครั้งแรก ( http://i.stack.imgur.com/58q3v.png ) ส่วนใหญ่แฮชคีย์ที่คุณเห็นบนหน้าจอนั้นเป็นของจริง หากไม่มีอะไรใช้งานได้ให้ลองป้อนใน Facebook

ฉันได้ผลลัพธ์ทั้งหมดด้วย: Windows 7 รุ่น 64 บิต, Android Studio 1.2.2, JDK 7


2
เวอร์ชั่นของ linux: `keytool -exportcert -alias androiddebugkey -keystore $ HOME / .android / debug.keystore | openssl sha1 -binary | openssl base64`
ruX

1
เพียงแค่ป้อนสิ่งที่แสดงโดย facebook บนหน้าจออุปกรณ์ที่ควรจะทำงาน ขอบคุณสำหรับโน้ต @Martin
ralphgabb

14

ตามข้อมูลเข้าสู่ระบบ Facebook สำหรับ Androidคุณต้องระบุค่าแฮชของคีย์ เพื่อให้ได้มาคุณจะต้องใช้รหัสที่ใช้ในการเซ็นชื่อในใบสมัครของคุณ

keytool \
    -exportcert \
    -alias YourKeyAlias \
    -storepass YourStoreKeyPassword \
    -keystore PathToYourKeyStoreFile | openssl sha1 -binary | openssl base64

1
เพียงแค่ต้องการเพิ่มความคิดเห็นใช้ที่เก็บข้อมูลการผลิตของคุณ
Liangjun

2
@ Liangjun ที่จริงแล้วคุณควรใช้กุญแจทั้งหมดของคุณเพราะมิฉะนั้นคุณจะไม่สามารถทดสอบ Facbeook เข้าสู่ระบบในสภาพแวดล้อมการแก้ปัญหา
Pijusn

2
@ ปิอุสใช่ฉันใช้ทั้งสองคีย์จริงๆ ฉันควรจะระบุไว้อย่างชัดเจน
Liangjun

ฉันได้รับข้อผิดพลาดสำหรับคำสั่งนี้ (ไม่มีจาวารันไทม์ของ Java, ขอติดตั้ง) แต่ก็ยังได้รับรหัสด้วยเช่นกัน แต่ก็ไม่ถูกต้องและฉันเพียงแค่คัดลอกวางจาก logcat ที่บอกว่าฉันไม่รู้จัก
Cristi Băluță

8

คุณต้องสร้างแฮชของคีย์สองอันอันหนึ่งสำหรับ Debug และอีกอันสำหรับ Release

สำหรับแฮชคีย์Debug :

บน 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

คีย์ดีบักแฮชแหล่งที่มา

สำหรับแฮชของปุ่มปลดล็อค:

บน OS X รัน(แทนที่สิ่งที่อยู่ระหว่าง<>ด้วยค่าของคุณ) :

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

บน Windows ให้ใช้(แทนที่สิ่งที่อยู่ระหว่าง<>ค่าของคุณ) :

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

ปล่อยรหัสแฮชคีย์


ฉันได้รับข้อผิดพลาดสำหรับคำสั่งนี้ (ไม่มีจาวารันไทม์ของ Java, ขอติดตั้ง) แต่ก็ยังได้รับรหัสด้วยเช่นกัน แต่มันไม่ถูกต้องและเพื่อให้มันทำงานได้ฉันแค่คัดลอกวางจาก logcat
Cristi Băluță

บางทีคุณอาจไม่ได้ตั้งค่า PATH ของ java และ keytool ในบรรทัดคำสั่ง? @ CristiBăluță
MBH

7

ฉันลองคำตอบก่อนหน้าทั้งหมดและไม่มีอะไรช่วยกรณีของฉันกับลูกค้าของฉัน!

จากนั้นลูกค้าของฉันจำได้ว่าเขาติดตั้งแอพ Facebook บนอุปกรณ์ของเขา หลังจากเขาลบมัน การเข้าสู่ระบบทำงานได้อย่างสมบูรณ์แบบ

แฮชคีย์ได้รับการเปลี่ยนแปลงและฉันได้แทนที่แฮชคีย์เก่าที่ Facebook Developers Console ด้วยรหัสจากข้อผิดพลาด (ตามที่แนะนำข้างต้น) และใช้งานได้!

แอพ Facebook อาจเป็นปัญหาดังนั้นคุณควรหาข้อมูลนี้ในอุปกรณ์ที่ติดตั้งแอพ Facebook และบนอุปกรณ์ที่ไม่ได้ติดตั้งแอพ Facebook และจัดการกับทั้งสองกรณี ...


ใช่เหมือนกันที่นี่ฉันพบข้อผิดพลาดหลังจากติดตั้งแอพ facebook บนอุปกรณ์ ดังนั้นในปัจจุบันฉันใส่แฮชคีย์ 2 อันบนการตั้งค่า Facebook dev
stickedoverflow

3
ฉันมีสถานการณ์ที่คล้ายกันมากกับคุณ สิ่งที่ช่วยฉันได้คือไปที่หน้า FB ของคุณ - การตั้งค่า - แอพ - ลบแอพออกจากรายการ เปลี่ยนรหัสแฮชและติดตั้งแอป fb และแอปของคุณใหม่ และตอนนี้มันใช้งานได้ ...
anna_manzhula

4

นี่คือวิธีที่ฉันแก้ไขปัญหานี้:

ก่อนอื่นคุณต้องได้รับค่า SHA-1 เพื่อที่จะมีสองวิธี

วิธีรับค่า SHA-1 ใน Android Studio

  1. คลิก Gradle
  2. คลิกรายงานการลงชื่อ
  3. คัดลอกค่า SHA-1

หรือ

ในการรับค่า SHA-1 จากไฟล์keystore

keytool -list -v -keystore keystore_file_name.jks -alias key0

คัดลอกค่าSHA-1ไปยังคลิปบอร์ดของคุณเช่นนี้:

CD:A1:EA:A3:5C:5C:68:FB:FA:0A:6B:E5:5A:72:64:DD:26:8D:44:84

และเปิดHexadecimal -> ตัวถอดรหัสสตริง Base64เพื่อแปลงค่า SHA-1 ของคุณเป็น Base64

นี่คือสิ่งที่ Facebook ต้องการ

รับแฮชที่สร้างขึ้น "******************** =" และคัดลอกแฮชคีย์ไปยังแอป Facebook


3

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

SDK Facebook สำหรับ Unity ได้รับแฮชของคีย์ผิด มันจะได้รับกุญแจจาก "C: \ Users \" ผู้ใช้ของคุณ ".android \ debug.keystore" และในโลกที่สมบูรณ์แบบมันควรจะได้มันมาจากที่เก็บคีย์ที่คุณสร้างในโครงการของคุณ นั่นเป็นเหตุผลที่มันบอกคุณว่าไม่ได้ลงทะเบียนแฮชคีย์

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


3

รหัสต่อไปนี้จะให้แฮชของคุณกับ Facebook แต่คุณต้องทำตามขั้นตอนเหล่านี้เพื่อรับแฮชที่วางจำหน่าย

  1. คัดลอกและวางรหัสนี้ในกิจกรรมหลักของคุณ

    try {
        PackageInfo info = getPackageManager().getPackageInfo(
                               "com.example.packagename",
                               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) {
    }
  2. สร้างไฟล์APK ที่ลงชื่อแล้ว

  3. เชื่อมต่อโทรศัพท์ของคุณกับแล็ปท็อปและตรวจสอบให้แน่ใจว่ายังคงเชื่อมต่ออยู่
  4. ติดตั้งและเรียกใช้ไฟล์ APK ในโทรศัพท์ของคุณด้วยการย้าย APK ไปยังโทรศัพท์ของคุณด้วยตนเอง
  5. ตอนนี้ดูที่ Android LogCat (ใช้ตัวกรองKeyHash: ) คุณควรเห็นรหัสแฮชสำหรับรีลีสของคุณสำหรับ Facebook เพียงคัดลอกและวางลงในของคุณhttps://developers.facebook.com/appsเพียงแค่คัดลอกและวางไว้ในของคุณภายใต้การตั้งค่า
  6. ตอนนี้คุณสามารถทดสอบแอปมันควรจะทำงานได้อย่างสมบูรณ์แบบ

โปรดทราบว่ารหัสจะทำงานได้ก็ต่อเมื่อคุณสร้าง apk ที่ลงชื่อแล้ว มิฉะนั้นจะให้เฉพาะการดีบัก apk แฮชที่ไม่มีประโยชน์สำหรับ apk ที่ปล่อยออกมา
abdul jalil

สวัสดีเมื่อฉันสร้าง hashkey ให้กับแอพ facebook มันใช้งานได้ดี แต่เมื่อพยายามที่จะเรียกใช้ในอุปกรณ์อื่นมันแสดงอีกครั้งว่า 'HASH KEY HASH KEY' ไม่ถูกต้องฉันจะตั้งค่าแฮชคีย์สำหรับหนังสือหน้าได้อย่างไรสำหรับอุปกรณ์ทั้งหมด
Deepak

2

หลังจากการวิจัยมานานเราพบวิธีแก้ปัญหา

เราได้กำหนดสิทธิ์เป็น:

loginButton.setReadPermissions(public_profile email);

นี้ทำงานเป็นครั้งแรก แต่เมื่อเราอีกครั้งเข้าสู่ระบบใน Facebook ก็ทำให้เกิดข้อผิดพลาดที่ไม่ถูกต้องยุ่งเหยิง

วิธีแก้ไขง่ายๆคือเปลี่ยนบรรทัดด้านบนเป็น:

loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));

และมันก็ทำงานได้เหมือนความสุข!

Facebook ควรส่งคืนข้อยกเว้นที่ถูกต้องแทนข้อผิดพลาดรหัสแฮชที่ไม่ถูกต้องที่ทำให้เข้าใจผิด


ฉันมีปัญหาเดียวกันฉันลองวิธีการแก้ปัญหาของคุณแล้ว แต่ยังไม่สามารถแก้ปัญหาของฉันได้ @ user3663906
BekaKK

2

หลังจากการทดลองหลายครั้งฉันก็พบวิธีแก้ปัญหานี้ ฉันสร้างและเพิ่มทั้ง debug และ release keys ในคอนโซลผู้พัฒนา Facebook และยังพบข้อผิดพลาด

ทางออกเดียวที่ทำงานให้ฉันคือการถอนการติดตั้งโปรแกรม OpenSSL จาก Google และดาวน์โหลดจากWin32 / Win64 OpenSSL Installer สำหรับ Windows

มันใช้งานได้เหมือนเวทมนตร์


2

แม้ว่าคำถามนี้จะได้รับคำตอบในรูปแบบที่เป็นประโยชน์มากมาย แต่ฉันต้องการเพิ่มว่าเมื่อฉันทำตามคำตอบของ Rafal Maleks (โดยใช้ปุ่มแฮชบน Google Play Console) ฉันไม่สามารถใช้คีย์การลงชื่อ SHA1 สำหรับแอปได้ ข้อผิดพลาดจาก Facebook แต่ฉันต้องใช้ลายนิ้วมือใบรับรอง SHA-1 จากส่วนอัปโหลดใบรับรอง (ใต้ส่วนลงชื่อของแอปบน Google Play Console) กระบวนการเดียวกัน;

  1. คัดลอกลายนิ้วมือใบรับรอง SHA-1 จากส่วนอัปโหลดใบรับรองใน Google Play Console

  2. แปลง SHA-1 โดยใช้: http://tomeko.net/online_tools/hex_to_base64.phpและคัดลอกผลลัพธ์ (base64)

  3. วางลงในอินพุตแฮชของคีย์บน developer.facebook.com และบันทึกการเปลี่ยนแปลง

หวังว่าคำตอบนี้จะไม่ซ้ำซ้อนและจะช่วยให้คนที่ไม่สามารถทำงานกับใบรับรองการลงนามแอพได้

ตอนนี้การเข้าสู่ระบบ Facebook ใช้งานได้ในแอพของฉันทั้งในโหมดดีบักและรีลีส


1

วางรหัสต่อไปนี้ลงในวิธีการสร้างของคุณ:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.example.packagename",
                           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) {
    e.printStackTrace();
}
catch (NoSuchAlgorithmException e) {
    e.printStackTrace();
}

เพียงแก้ไขชื่อแพ็คเกจ จากนั้นไปที่ไฟล์ LogCat ของคุณแล้วเลือก Debug search ที่นี่ จากนั้นคุณจะพบรหัสแฮช ขณะนี้คัดลอกคีย์กัญชานี้และจากนั้นไปที่เว็บไซต์ developer.facebook.app_id Saveแก้ไขคีย์กัญชาของคุณและกด ตอนนี้รันโครงการ Android ของคุณอีกครั้ง ฉันคิดว่าปัญหาจะได้รับการแก้ไข


7
เล่นซ้ำอีกคน
Beto Caldas

1

นี่อาจช่วยคนที่มีปัญหาเดียวกัน

  1. สร้างแฮชคีย์โดยใช้รหัสด้านล่าง

    keytool -exportcert -alias <your_keystore> alias -keystore <your_keystore_file> | openssl sha1 -binary | openssl base64

    วิธีใช้ keytool

  2. วางในฟิลด์ที่จำเป็นในนักพัฒนา Facebook

  3. ใน Android Studio เมนูไฟล์โครงสร้างโครงการ

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

    เพิ่มพารามิเตอร์การเซ็นชื่อ

  4. เลือกรสชาติ

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

    เลือกการกำหนดค่าการเซ็นชื่อที่เราสร้าง

  5. เลือกประเภทบิลด์

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

  6. เลือกชุดตัวเลือกการสร้างและสร้าง

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


1

ฉันมีปัญหาเดียวกันเมื่อฉันดีบักแอปของฉัน ฉันเขียนแฮชที่คุณขีดฆ่าในรูปภาพที่แนบมา (อันที่ Facebook บอกว่าไม่ถูกต้อง) และเพิ่มลงในคอนโซลนักพัฒนาของ Facebook เพื่อแฮชคีย์ แค่ระวังความผิดพลาด

การแก้ปัญหานี้เป็นเหมือนวิธีแก้ปัญหาง่ายกว่าทางออกที่เหมาะสม


1

หากคุณพิมพ์ keyhash ด้วยตนเอง (เช่นจากมือถือไปยังแผงควบคุม Facebook) ตรวจสอบให้แน่ใจว่าได้แยกความแตกต่างระหว่าง L และทุนตัวเล็ก I


1
try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "www.icognix.infomedia",
                           PackageManager.GET_SIGNATURES);
    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
        Log.d("YourKeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
    }
}
catch (PackageManager.NameNotFoundException e) {
}
catch (NoSuchAlgorithmException e) {
}

0

สิ่งที่ Facebook ใช้ไม่ใช่รหัสผ่านเริ่มต้นและชื่อแทนสำหรับการดีบัก คุณต้องเปลี่ยนมันตามและมันจะทำงาน

/usr/lib/jvm/jdk1.8.0_66/bin/keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

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

คุณยังสามารถกำหนดค่าในไฟล์ build.gradle แต่ควรใช้รหัสผ่านนามแฝงเดียวกันเพื่อสร้างแฮ:

android {
    signingConfigs {
        release {
            storeFile file("~/.android/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
}

0

นี่คือคำตอบที่ถูกต้องมากมาย เพียงสิ่งหนึ่ง:

วางแฮชที่ได้รับลงในแอปพลิเคชันการตั้งค่าหลักไม่ใช่ผ่านทางบทช่วยสอนการเริ่มต้นอย่างรวดเร็ว


0

ผมมีปัญหาเหมือนกัน.

ตรวจสอบให้แน่ใจว่าคุณสร้างไฟล์ APK ด้วยอุปกรณ์เดียวกับที่สร้างแฮชคีย์ซึ่งเก็บไว้ในส่วนนักพัฒนา Facebook


0

ฉันแก้ไขสิ่งนี้โดยเพิ่มสิ่งต่อไปนี้ลงในMainApplication.onCreate:

try {
    PackageInfo info = getPackageManager().getPackageInfo(
                           "com.genolingo.genolingo",
                           PackageManager.GET_SIGNATURES);

    for (Signature signature : info.signatures) {
        MessageDigest md = MessageDigest.getInstance("SHA");
        md.update(signature.toByteArray());
        String hash = Base64.encodeToString(md.digest(), Base64.DEFAULT);
        KeyHash.addKeyHash(hash);
    }
}
catch (PackageManager.NameNotFoundException e) {
    Log.e("PackageInfoError:", "NameNotFoundException");
}
catch (NoSuchAlgorithmException e) {
    Log.e("PackageInfoError:", "NoSuchAlgorithmException");
}

ฉันอัปโหลดสิ่งนี้ไปยังคอนโซลนักพัฒนาซอฟต์แวร์ของ Google แล้วดาวน์โหลดAPK ที่ได้รับซึ่งมีเหตุผลแฮชคีย์ที่แตกต่างกันไม่ว่าด้วยเหตุผลใด

ฉันใช้ LogCat เพื่อกำหนดแฮชของคีย์ใหม่และเพิ่ม Facebook ในขณะที่ผู้ใช้รายอื่น ๆ ระบุไว้


0

หากคุณกำลังสร้างแฮชคีย์สำหรับรีลีสให้แน่ใจว่าคุณป้อนรหัสผ่านจริงของที่เก็บคีย์ของคุณและไม่ใช่ "android"

นี่คือปัญหาของฉัน การดีบักทำงานได้ แต่ APK ไม่ได้เปิดตัว


-1

ใช้รหัสด้านล่างในวิธีการ onCreate () ของกิจกรรมของคุณ:

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

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


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