[英]Android Facebook API errors with SSO when Facebook App installed
我將facebook API / SDK搞砸了一段時間,因為我將它集成到我正在處理的應用程序中。 我需要的唯一真正的Facebook功能是簽到,他們工作。 大多數時候。 這里開始我的問題。
看完facebook API之后。 我開始懷疑我要么完全不了解API,要么是非常錯誤並且缺少一些重要的功能(比如注銷?!)。 這些錯誤的主要問題是,如果我的應用程序完全檢查到facebook(在所有帳戶上,不僅僅是開發人員),然后我安裝Facebook應用程序以更改用戶,然后通過我的應用程序簽入過程將除非我卸載facebook應用程序,否則無法正常工作。 我已經看過幾篇關於它的帖子,但據我所知這個話題從未在這里得到充分討論。
我通常會更直接地提出我的問題,但我擔心我可能只是像傻瓜一樣使用api,並且首先要確保這對其他人來說是一個實際問題,除了我(特別是在我承諾之前)認為facebook不知道他們在使用API做了什么),其次,看看是否有任何解決方法(甚至可能是簡單的facebook庫)。 提前感謝您對這些問題的任何建議和/或確認。
編輯:所以我最終使用Easy Android facebook Sdk(http://www.easyfacebookandroidsdk.com/)。 它的文檔很差,但是這些例子向您展示了如何做到這一點,你可以把它搞亂。
但我的問題是關於facebook如何/為什么不能將它包含在他們的api中仍然存在
沒有其他解決方案(Cygwin,openssl,錯誤的別名,密碼錯誤)之后,此解決方案對我有用
問題是Windows生成無效密鑰。
使用您的應用運行此操作:
try {
PackageInfo info = getPackageManager().getPackageInfo("**YOURPACKAGENAME**", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.i("PXR", Base64.encodeBytes(md.digest()));
}
}
catch (NameNotFoundException e) {}
catch (NoSuchAlgorithmException e) {}
不要忘記獲得Base64(http://iharder.sourceforge.net/current/java/base64/)。
生成的密鑰在您的logcat上,用此替換舊的密鑰。
解決方案歸功於: http : //p-xr.com/implementing-facebook-into-your-app-invalid-key-with-keytool/
正如Guy所說,無效的Key Hash可能是問題所在。 在我的情況下,事實證明它實際上是它。 Jessy,如果這不是您的問題,您可能需要查看AuthListener生成的錯誤消息。
登錄前,您可能會為會話分配一個身份驗證偵聽器:
SessionEvents.addAuthListener(new FbAPIsAuthListener());
現在,只需轉到實現偵聽器的函數並嘗試捕獲錯誤:
/*
* The Callback for notifying the application when authorization succeeds or
* fails.
*/
public class FbAPIsAuthListener implements AuthListener {
@Override
public void onAuthSucceed() {
requestUserData();
}
@Override
public void onAuthFail(String error) {
//Could not authenticate. Check error message.
System.out.println("Login error due to " + error)
}
}
希望有所幫助。
如果在安裝FB應用程序時遇到invalid_key,則由於您使用的密鑰錯誤。 使用調試密鑰運行keytool時,例如:
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
一定要輸入' android
'作為密碼,而不是你的密鑰庫密碼。 要驗證,請確保您獲得的密鑰不是 ga0RGNYHvNM5d0SLGQfpQWAPGJ8 =但應該是其他內容。
為了'注銷'嘗試調用SessionStore.clear()
我忘了用這個來更新我的進度。 我最終選擇了簡單的facebook android api,因為即使它有bug,它也是積極開發的,而不是一個完全沒用的垃圾。
對於任何有相同問題的Facebook沒有修復他們的軟件錯誤,請查看http://www.easyfacebookandroidsdk.com/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.