Android Facebook SDK 登录后不调用回调

标签 android facebook facebook-android-sdk

我正在尝试在我的应用程序中创建一个处理 Facebook 登录的类。 我的问题是它不适用于所有 Activity 。 在该 Activity 中,它不会调用回调。 关闭登录和授权应用程序 webview 后,不会触发回调。 Logcat 中打印的最后一个状态是 OPENING

这是我的代码:

public void doLogin() {
              
        
        if ((Session.getActiveSession() == null || !Session.getActiveSession().isOpened())) {
            List<String> permissions = new ArrayList<String>();
            permissions.add("email");

            // start Facebook Login
            openActiveSession(activity, true, new Session.StatusCallback() {

                // callback when session changes state
                @Override
                public void call(Session session, SessionState state,
                        Exception exception) {
                    
                    Log.d("Sessionstate", state.toString());
                    if (session.isOpened()) {
                        // make request to the /me API
                        Request.executeMeRequestAsync(session,
                                new Request.GraphUserCallback() {

                                    @Override
                                    public void onCompleted(GraphUser user,
                                            Response response) {
                                        if (prgCheckFB.isShowing())
                                            prgCheckFB.dismiss();
                                        if (user != null) {

                                            Log.e("facebookid", id);
                                            doSomething(user);



                                        }
                                    }
                                });
                    
                    } 
                }, permissions); 
        }
    }



private static Session openActiveSession(Activity activity,
        boolean allowLoginUI, Session.StatusCallback callback,
        List<String> permissions) {
    Session.OpenRequest openRequest = new Session.OpenRequest(activity)
            .setPermissions(permissions).setCallback(callback);
    Session session = new Session.Builder(activity).build();
    if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState())
            || allowLoginUI) {
        Session.setActiveSession(session);
        session.openForRead(openRequest);
        return session;
    }
    return null;
}

doSomething 是一个将用户数据保存在共享首选项中的函数。

有什么问题吗?该功能适用​​于某些 Activity ,但不适用于所有 Activity 。

最佳答案

可能你登录后忘记处理结果了……

检查覆盖方法onActivityResult..

因为它将处理结果返回给MainActivity,

也许这可以帮助您解决问题..

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);
}

更新 1

对于较新的 SDK 使用:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    callbackManager.onActivityResult(requestCode,
            resultCode, data);
}

关于Android Facebook SDK 登录后不调用回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20371842/

相关文章:

Android:内容提供商最佳实践

java - 使用新常量会破坏我的 Android 应用程序吗?

android - 使用 Facebook SDK 仅共享文本

android - 生成包含所有依赖项的 AAR 文件

android - 带有 9patch 的 setDividerDrawable 在 4.0 中不起作用

android - 在 Retrofit 中的请求正文之前添加字符串

php - 可以离线访问 Facebook 相册吗?

android - 更新Android Studio 3.0.1后无法构建Gradle

android - Firebase 未将 Facebook 用户保存在 Auth 列表中

javascript - 在 rail 应用程序中弹出 facebook 应用程序请求对话框时出错