簡體   English   中英

Android facebook 登錄不適用於已安裝的 Facebook 應用程序

[英]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的登錄門戶網站:

  1. 如果你有Android 1.9.X的Android設備和Facebook App安裝在這里稱為Native Login Method的設備,你不需要使用facebook WebView

  2. 如果您尚未在Android設備中安裝Facebook App ,那么最好使用WebView

所以這個Facebook提供3個Constants

  1. NATIVE_ONLY (僅在Facebook App中打開時使用)
  2. WEB_ONLY (僅在想要在WebView打開時使用)
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM