Android Facebook SDK在登录后不调用回调

Android Facebook SDK在登录后不调用回调,android,facebook,facebook-android-sdk,Android,Facebook,Facebook Android Sdk,我正在尝试在我的应用程序中创建一个处理Facebook登录的类。 我的问题是它并不是对所有的活动都有效。 在该活动中,它不调用回调。 在注销登录和授权应用程序webview后,不会触发回调。 在Logcat中打印的最后一个状态是打开 这是我的密码: public void doLogin() { if ((Session.getActiveSession() == null || !Session.getActiveSession(

我正在尝试在我的应用程序中创建一个处理Facebook登录的类。 我的问题是它并不是对所有的活动都有效。 在该活动中,它不调用回调。 在注销登录和授权应用程序webview后,不会触发回调。 在Logcat中打印的最后一个状态是打开

这是我的密码:

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;
}
public void doLogin(){
如果((Session.getActiveSession()==null | |!Session.getActiveSession().isOpened()){
列表权限=新建ArrayList();
权限。添加(“电子邮件”);
//启动Facebook登录
openActiveSession(activity,true,new Session.StatusCallback(){
//会话更改状态时的回调
@凌驾
公共无效调用(会话、会话状态、,
例外情况(例外情况){
Log.d(“Sessionstate”,state.toString());
if(session.isOpened()){
//向/me API发出请求
请求。executeMeRequestAsync(会话,
新请求。GraphUserCallback(){
@凌驾
未完成公共无效(GraphUser用户,
回应(回应){
if(prgCheckFB.isShowing())
prgCheckFB.disclose();
如果(用户!=null){
Log.e(“facebookid”,id);
剂量测量(用户);
}
}
});
} 
},权限);
}
}
专用静态会话openActiveSession(活动,
布尔allowLoginUI,Session.StatusCallback回调,
列出权限){
Session.OpenRequest OpenRequest=新建Session.OpenRequest(活动)
.setPermissions(permissions).setCallback(callback);
Session Session=新建Session.Builder(activity.build();
if(SessionState.CREATED\u TOKEN\u LOADED.equals(session.getState())
||allowLoginUI){
Session.setActiveSession(Session);
openForRead(openRequest);
返回会议;
}
返回null;
}
doSomething
是一个将用户数据保存在共享首选项中的函数


有什么问题吗?该函数在某些活动中有效,但不是在所有活动中都有效。

可能您在登录后忘记处理结果

在ActivityResult上检查覆盖方法

因为它将结果处理回主活动

也许这能帮你解决问题

@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);
}

在AndroidManifest.xml文件中为您的回调活动设置属性
android:noHistory=“true”
,也会导致回调方法不启动。

我以一种奇怪的方式面对并解决了这个问题。 首先,它可以工作,但在我添加了其他社交登录按钮(如谷歌登录)后,我将其初始化为

CallbackManager.Factory.create();

LoginButton LoginButton=(LoginButton)findViewById(R.id.button_facebook);

在我将google初始化移到其他行之后,它已经被解决了


因此,简而言之,facebook登录初始化必须是直接的,没有其他代码执行。

意味着你能进入登录页面吗???是的,但在登录页面完成后回调没有触发。这意味着当你按下登录按钮时,你不能登录。对!!!我想我确实登录到了FB,因为在登录页面之后e、 我被重定向到授权页面。那么您面临的问题是什么呢???先生,请保存我的一天!或者使用facebook ui helper:uiHelper.onActivityResult(请求代码、结果代码、数据、dialogCallback);API稍有更改,而不是您需要使用CallbackManager:CallbackManager.onActivityResult的会话(请求代码、结果代码、数据);我已按上述说明进行了尝试。但没有收到任何回调。它只是返回到FB登录按钮所在的页面。我尝试了此操作,它登录但不返回电子邮件值,也不进入
FacebookCallback
是否有人遇到过此问题?如何解决?花了数小时试图解决此问题。我希望我能找到答案-投票5次。添加
android:noHistory=“true”
com.facebook.FacebookActivity
AndroidManifest.xml中的活动拯救了我的一天!谢谢