![]() |
![]() |
這幾天在處理一個 Android 內嵌 Facebook 服務所發生的問題(如上圖所示),這個問題是在啟動該服務時,需要先經過一次個人在 Facebook 上的授權確認頁,而這時會在確認頁的最上方看到一排紅底的提示訊息:
英文訊息
[Your Facebook APP Name] is misconfigured for Facebook login. Press Okay to go back to the application without connecting it to Facebook.
中文訊息
因[Your Facebook APP Name]不當預設 Facebook 的登入。請按 Okay 直接返回該應用程式,無需經由 Facebook 再登入。
主要原因是因為 Android Key Hash 不符,致於是什麼原因嘛,坦白說只能歸究於 Facebook 吧XD,一來這並不是所有 APP 都會發生的症狀,再來是所獲得的 Key Hash 也都是經由官方說明的方式獲得,因此,這問題可以算在 Facebook 身上吧:P
而解決方式就是重新取得由官方給予的KEY,獲得方式要從程式碼中來取得,請程式碼要做 Facebook 授權片段 new Facebook.DialogListener() 中的 onFacebookError 處動手,下面程式碼是取自 Facebook SDK 範例 – Hashbook 之片段:
1 2 3 4 |
@Override public void onFacebookError(FacebookError error) { SessionEvents.onLoginError(error.getMessage());//在這裡下中斷點(breakpoint) } |
接著就開始執行 Debug 動作啦,在出現本文一開始的畫面之後,點下畫面右上角的 確定/Okey ,就會執行到中斷點處,將滑鼠移到 error.getMessage() 上,可以看到類似如下的錯誤訊息:
com.facebook.android.FacebookError: invalid_key:Android key mismatch. Your key “ Your New Key Hash ” does not match the allowed keys specified in your application settings. Check your application settings at http://www.facebook.com/developers
再來將 Error Message 中的 “ Your New Key Hash “,複製到自己的 Facebook 開發者應用程式該 APP 的 Android Key Hash 欄位裡更新,該 APP 就可以宣告復活嘍。
若是使用的 keystore 是在發佈(Release)用的已經無法進入 debug mode 去處理的話,可以在該區段裡使用 AlertDialog 將訊息送出,再將取得 Key 的那個字串輸入嘍。