android - 某些设备上的 Facebook 登录失败

标签 android facebook facebook-login

我已经实现了 Facebook 登录,它在某些设备/AVD 上运行良好。我的开发设备是 Gingerbread 手机,但用 4.1.1 设备测试它,它根本无法登录。按下 facebook 按钮后,它显示黑屏(尝试连接 Facebook),1-2 秒后它返回主屏幕。此外,不会在 Logcat 中烘烤或显示任何错误。哦,Facebook 应用程序安装在设备中......有什么想法吗?

更新:

我按照 Mark Venzke 的建议启用了日志记录并使用 this程序,我在每次登录尝试时都收到此警告(两次)(注意:使用 HTC One S 手机进行测试):

07-05 20:14:50.582: W/PackageManager(605): Unable to load service info ResolveInfo{4171dbf0 com.htc.socialnetwork.facebook.remote.FacebookSyncService p=0 o=0 m=0x108000}

请注意 com.htc.socialnetwork.facebook.remote.FacebookSyncService 行,HTC 设备是否需要任何额外步骤?

此外,我附上了执行登录的代码:

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (isResumed) {
        FragmentManager manager = getSupportFragmentManager();
        int backStackSize = manager.getBackStackEntryCount();
        for (int i = 0; i < backStackSize; i++) {
            manager.popBackStack();
        }
        com.facebook.Settings.addLoggingBehavior(LoggingBehavior.REQUESTS);
        if (state.isOpened()) {

            Bundle params = new Bundle();
            params.putString("fields", "id");
            params.putString("limit", "1");             
            Request request = new Request(Session.getActiveSession(), "me", params, HttpMethod.GET, new Callback()
            {

                @Override
                public void onCompleted(Response response)
                {
                    if (response != null)
                    {
                        Log.d("AuthGraphResponse", response.toString());
                        long id;
                        try {
                            id = response.getGraphObject().getInnerJSONObject().getLong("id");
                            app.setFacebookId(id);
                            Log.d("UserID", Long.valueOf(id).toString());
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });

            RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();

            showFragment(AUTH, false);
        } else if (state.isClosed()) {
            showFragment(UNAUTH, false);
        }
    }
}

更新 2:

HTC 是否有可能将所有设备(或其中一些设备)中的默认 Facebook 应用程序的包名称重命名为 com.htc.socialnetwork.facebook(而不是 com.facebook.katana),这会导致这个冲突?我真的不认为卸载默认应用程序并从 Google Play 安装 Facebook 是一个可接受的解决方案(另外,我认为无法卸载默认应用程序)。

更新 3:

还没有解决。 19 小时奖励 100 声望赏金!

更新 4:

LogCat 的另一个有趣的行:

07-15 10:55:51.718: E/chromium(30475): external/chromium/net/disk_cache/stat_hub.cc:216: [0715/105551:ERROR:stat_hub.cc(216)] StatHub::Init - App com.facebook.katana isn't supported.

最佳答案

您的股票应用程序和 SDK 之间肯定存在冲突。因此,如果您不想卸载现有的 HTC 应用程序并仍然使用 SDK 3.0,我认为不修改 sdk 源代码的最佳选择是禁用 SSO 并仅通过 webview 登录。

这可以通过在每次尝试打开新 session 时添加 SessionLoginBehavior.SUPRESS_SSO 轻松完成。这是我从 Facebook SDK 的 SessionLoginSample (LoginUsingActivityActivity) 更改而来的示例,向您展示该怎么做:

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);

        //add the check, for if session is opened
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || !session.getState().isOpened()) {
            //Add the suppress SSO behavior to force webview auth dialog to popup
            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO));
        }
    }
  ...
}
//then put your code in the statusCallback method or keep it in the session state change listener

否则如果你不介意更改facebook sdk代码,你应该检查this

关于android - 某些设备上的 Facebook 登录失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17278509/

相关文章:

android - travis 中存储库的路径

ios - SFSafariViewController 打开 "login with Facebook"而不是 native Facebook 应用程序

android - publish_actions 权限错误

android - Facebook API : cannot login on Android

安卓开发: Bluetooth Low Emission Advertisement is "Not Supported" on compatible devices

android - 如何旋转照片而不丢失Exif和元数据?

ios - FBSDKCoreKit 项目错误

facebook - 从 Graph API 中删除照片标签

objective-c - 如何从 objective-c 中的 Firebase Auth 中删除 "Sign In with Email"

java - 在 Android 中运行单元测试时, Intent 解析为不同的进程