![](/img/trans.png)
[英]Android Application Login with Facebook is not working with Facebook App installed
[英]Android facebook login not working with installed Facebook app
我已經設置了簡單的 facebook 登錄。 對於 Android 2.3.6 一切正常,用戶得到提示登錄對話框,輸入數據,應用程序繼續。 我還以為是android版本問題,結果發現手機安裝了facebook應用后登錄不上!
測試於:Galaxy Ace 2.3.6 HTC Desire 4.1.2 Galaxy Note 4.1.2 Android 模擬器 4.1.2
即使是 facebook 樣本也不起作用!
每次應用程序執行時 - else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }
else { Log.d("SESSION NOT OPENED", "SESSION NOT OPENED"); }
好像 session 沒有打開,但這是為什么? 遵循本指南 - https://developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
代碼:
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(final Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
Log.d("Access_token", session.getAccessToken());
}
}
});
} else {
Log.d("SESSION NOT OPENED", "SESSION NOT OPENED");
}
}
});
我正在為那些使用Facebook SDK 4.X
人寫這個答案
你可以用以下兩種方式之一打開facebook的登錄門戶網站:
如果你有Android 1.9.X
的Android設備和Facebook App
安裝在這里稱為Native Login
Method的設備,你不需要使用facebook WebView
如果您尚未在Android設備中安裝Facebook App
,那么最好使用WebView
所以這個Facebook提供3個Constants
NATIVE_ONLY
(僅在Facebook App中打開時使用) WEB_ONLY
(僅在想要在WebView
打開時使用) NATIVE_WITH_FALLBACK
(如果未安裝應用程序,推薦使用Facebook檢測和操作webView
) 請查看以下鏈接以獲取詳細信息https://developers.facebook.com/docs/reference/android/current/class/LoginButton/ https://developers.facebook.com/docs/facebook-login/android/v2.2#troubleshooting
LoginButton.setLoginBehavior(LoginBehavior.NATIVE_WITH_FALLBACK);
LoginButton.setLoginBehavior(LoginBehavior.NATIVE_ONLY);
LoginButton.setLoginBehavior(LoginBehavior.WEB_ONLY);
使用此函數獲取散列密鑰(debug和release apk)並將其放入developer.facebook.com/apps中的應用程序中
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();
}
}
這對我很有幫助..希望這對你也有幫助..
查看步驟4的底部: https : //developers.facebook.com/docs/getting-started/facebook-sdk-for-android/3.0/
如果您沒有正確輸入您的應用程序密鑰哈希,Facebook通過WebView彈出窗口登錄(如果未安裝該應用程序)仍然有效,但通過本機Facebook應用程序登錄將不會。
您應該在LogCat中看到此異常:
com.facebook.http.protocol.ApiException: remote_app_id does not match stored id
Facebook SDK會打印出異常,因此無論如何還要檢查是否存在其他問題。
如果我有活躍的facebook會話(來自facebook應用程序),看起來我無法獲取數據。
所以在我打開會話之前,我要求強制登錄,即使用戶已經從facebook應用程序打開了facebook會話。
openRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
所以現在一切正常,但用戶必須手動輸入數據。 它並不理想但它有效。
Facebook應用程序打開時,即使是facebook樣本也不適合我。
如果有人有更好的解決方案,請隨時提出建議。
如果沒有正確生成散列鍵,那么您可能會面臨類似的問題
顯示本機登錄對話框,但在接受權限彈出后,日志cat中沒有任何反應
但是如果禁用設備上的本機應用程序,則登錄和共享將正常工作(在這種情況下,在Web視圖中打開登錄對話框,並且此處不需要正確的哈希鍵)
我遇到了同樣的問題,並通過使用此代碼獲取哈希密鑰解決了這個問題。 散列鍵與使用openSSl和keytool生成的鍵不同
在Facebook應用程序中更新此哈希鍵后,一切正常
//================================== To Get Facebook Hash key Programmatically =========================//
PackageInfo info;
try {
info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", 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());
}
只需更改您的包名稱並獲取正確的哈希鍵即可
在Android 的 Facebook 登錄快速入門底部有一個重要步驟。
對於 Android 11 及更高版本,應用需要為它想了解的每個應用創建一個queries
條目。 如果沒有這個,應用程序將不知道 Facebook 已安裝,並且將始終打開自定義 Chrome 選項卡。
在AndroidManifest.xml
查詢中添加com.facebook.katana
的條目。
<queries>
<package android:name="com.facebook.katana" />
</queries>
作為參考,我使用的是 FB SDK 5.6
禁用SAndbox模式...這將允許您的應用在所有設備上運行。 試試這個解決方案
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.