Android Facebook SDK 3请求将新权限返回到登录侦听器

Android Facebook SDK 3请求将新权限返回到登录侦听器,android,facebook,facebook-graph-api,android-facebook,Android,Facebook,Facebook Graph Api,Android Facebook,我正在使用FacebookSDK3forAndroid编写一个Android应用程序 这个SDK的架构是非常错误的,我有一个有线行为 我的流程如下: 用户以基本权限登录到应用程序 当我需要一些其他权限时,我会检查用户是否已经允许了这些权限,如果没有,我会向他显示Facebook UI对话框,让他给我这些权限 听起来很简单,登录流工作得很好,但每当我尝试允许更多权限时,在用户接受这些权限后,就会调用登录流中的StatucCallback侦听器,而不是我作为Session.getActiveSess

我正在使用FacebookSDK3forAndroid编写一个Android应用程序

这个SDK的架构是非常错误的,我有一个有线行为

我的流程如下:

  • 用户以基本权限登录到应用程序
  • 当我需要一些其他权限时,我会检查用户是否已经允许了这些权限,如果没有,我会向他显示Facebook UI对话框,让他给我这些权限
  • 听起来很简单,登录流工作得很好,但每当我尝试允许更多权限时,在用户接受这些权限后,就会调用登录流中的
    StatucCallback
    侦听器,而不是我作为
    Session.getActiveSession()的参数给出的新回调

    这是我的
    FacebookManager
    类中的代码:

    /**
     * start a logging session to facebook
     * @param callback the callback listener
     */
    public void startLoginSession(StatusCallback callback)
    {
        //get the session
        Session session = Session.getActiveSession();
        //open if needed
        if (session == null || session.isClosed() || !session.isOpened())
            Session.openActiveSession(mainActivity, true, callback);
        else
            callback.call(session, session.getState(), null);
    }
    
    /**
     * Start a new user events session. 
     * @param callback the callback listener for the session request
     */
    public void startUserEventsSession(StatusCallback callback)
    {
        //get the session
        Session session = Session.getActiveSession();
        //open if needed
        String permission = mainActivity.getResources().getString(R.string.facebook_event_permission);
        if (session == null || session.isClosed() || !session.isOpened())
            Session.openActiveSession(mainActivity, true, callback);
        //if permission is already granted
        if (isPermissionGranted(session, permission))
            callback.call(session, session.getState(), null);
        //ask for new permission
        else
        {               
            NewPermissionsRequest request = createPermissionRequest(permission);            
            request.setCallback(callback);              
            session.requestNewReadPermissions(request);
        }
    }
    
    正如您所看到的,他们两个都接收到一个
    StatusCallback
    ,我正在向他们每个人传递不同的status
    callback
    。。然而,用户第一次允许我的应用程序后的回调与登录相同

    顺便说一句,如果已经授予了权限,则在正确的侦听器中调用调用函数


    我怀疑它与用户授予新权限后调用的
    Activity.onActivityResults()
    函数有关,但我确实定义了一个新回调,因此…?

    这是一个不幸的误称,但是StatusCallback应该被称为StatusListener,因为它们遵循侦听器模式而不是回调。因此,只要更新会话,就会调用之前添加到活动会话中的任何回调。有没有办法在添加新的侦听器之前清除侦听器?或者我应该手动构建一个新会话?而且,你在哪里找到了关于它的信息?他们的文档缺少if信息,这是一种轻描淡写的说法…会话类上有一个removeCallback方法。是的,我找到了。谢谢,现在一切都好了。。但是挫折感。。。哦,沮丧。。。