2012-05-09 81 views
9

我正在構建一個應用程序,該應用程序將支持Facebook。我已經從原始的Git回購站下載了Facebook API和他們的樣本,稱爲「Hackbook」。問題出在登錄 - 如果原來的FB應用程序沒有安裝在手機上,登錄正在通過自定義對話框,一切正常,但如果安裝了FB應用程序,Hackbook會自動重定向到原來的FB應用程序,然後什麼也沒有發生。無法登錄。 我已經在五種不同的手機上測試過,並且總是出現同樣的問題。Facebook API登錄失敗,在手機上安裝FB應用程序

回答

18

我有類似的問題。在我的情況下,我沒有使用我的簽名密鑰創建散列密鑰。我剛剛使用debug.keystore默認簽名密鑰創建了一個散列密鑰。

只要我使用我的應用程序版本簽名密鑰創建了一個哈希鍵,就可以解決這個問題。如果您尚未完成此操作,請使用您的簽名密鑰(用於在市場上上傳)創建一個新的哈希密鑰,並將其添加到您應用的Facebook控制面板。

希望這會有所幫助。

+0

我在控制面板中添加了哈希鍵,但問題仍然存在。我還需要在某處添加散列鍵嗎? – virusss8

+2

@ virusss8:你不需要在你的應用程序中添加hashkey。按照這一步並告訴我結果。在facebook-sdk中打開Util類文件,並將'private static boolean ENABLE_LOG = false'更改爲'true'。現在,將手機連接到開發PC並運行使用簽名的apk創建的應用程序並登錄。保持DDMS窗口打開並查看是否生成錯誤。 –

+0

D/Facebook授權(25124):登錄失敗:invalid_key:Android密鑰不匹配。您的密鑰「********* real * key ************」與您的應用程序設置中指定的允許密鑰不匹配。請在http://www.facebook.com/developers 檢查您的應用程序設置,但我從未在任何地方設置過該密鑰。那個關鍵是什麼? – virusss8

4

我已經辛苦了兩天&得到最後的解決方案,這是獲得哈希鍵WRONG方式 -

keytool -exportcert -alias *<your _alias_name>* -keystore *<key_store_path>* | [openssl_bin_directory]\openssl sha1 -binary | [openssl_bin_directory]\openssl base64 

正道是鍵入以下3行,一個在以cmd爲單位的時間。在第一行之後,您將被要求插入密鑰庫密碼。

keytool -exportcert -alias *<your _alias_name>* -keystore *<key_store_path>* > [openssl_bin_directory]\debug.txt 
[openssl_bin_directory]\openssl sha1 -binary [openssl_bin_directory]\debug.txt > [openssl_bin_directory]\debug_sha.txt 
[openssl_bin_directory]\openssl base64 -in [openssl_bin_directory]\debug_sha.txt > [openssl_bin_directory]\debug_base64.txt 

如果你想知道的細節,在這裏描述的RIGHT方式 -

http://facebook.stackoverflow.com/questions/13281913/app-is-misconfigured-for-facebook-login-with-release-key-hash

或這裏

Facebook Android Generate Key Hash

+1

你爲什麼要在文本中發佈錯誤而不是正確的?我幾乎用它大聲笑,但感謝鏈接到正確的 – Guardanis

+2

@Cruceo,我編輯的帖子,你可以給+1,如果你喜歡它。 – Khobaib

+0

謝謝你只是花了最後3個小時試圖解決這個問題 –

1

獲取您使用此功能哈希鍵(debug和release apk),並將其放入developer.facebook.com/a的應用程序中PPS

private void calculateHashKey(String yourPackageName) { 
    try { 
     PackageInfo info = getPackageManager().getPackageInfo(
       yourPackageName, 
       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(); 
    } 
} 

這幫助了我很多..希望這將幫助你太..

1

我已經修復了這個問題。使用keytool -exportcert -alias <RELEASE_KEY_ALIAS> -keystore <RELEASE_KEY_PATH> | openssl sha1 -binary | openssl base64獲得密鑰哈希後,我已成功首次在發佈模式中登錄... 然後第二次,我得到了常見錯誤 您的密鑰"*********real*key************"與您的應用程序設置中指定的允許密鑰不匹配。

只需使用Facebook提供的"*********real*key************"錯誤消息,我現在在發佈模式下成功登錄。 因此,請確保輸入此密鑰時使用完全相同的密鑰。字母I,small(L) i.e (l)會讓你陷入困境。我做了兩個鍵,第一個鍵我用small(L) i.e (l),第二個鍵我用了I.並將這些鍵放在開發人員的應用程序中。
它現在正在工作....

+0

這是我的情況確切的問題..唯一的解決方案工作!和關於小'L'的部分是正確的,還有大'我'(這可能看起來像一些字體中的小'L'.. –

0

在我的情況下,問題是,即使在生成正確的密鑰後,當facebook應用程序安裝在設備上時,用戶登錄被取消。

我在登錄前添加了以下行,它工作的很好。

LoginManager.getInstance().logOut(); 
相關問題