Facebook Android SDK:暂停执行,直到收到用户/fb的响应

Facebook Android SDK:暂停执行,直到收到用户/fb的响应,android,facebook,permissions,facebook-android-sdk,Android,Facebook,Permissions,Facebook Android Sdk,我从facebook提供的关于如何向用户请求发布权限的示例中得到了这段代码(如下),唯一的问题是,当导致fb对话框弹出并询问用户“您想授予此应用发布权限吗?”的这段代码被称为时,应用程序将继续执行以下代码(本例中为asynctask api请求)这是一个问题,bc fb没有真正给我一个布尔值或任何其他方法来检查(用户批准了权限请求&&权限已成功授予){ 执行asynctask api请求以更新数据库 } 也许我遗漏了什么或者真的很愚蠢,但这对他们来说不是很可怕的实现吗?任何专业的公开使用的api

我从facebook提供的关于如何向用户请求发布权限的示例中得到了这段代码(如下),唯一的问题是,当导致fb对话框弹出并询问用户“您想授予此应用发布权限吗?”的这段代码被称为时,应用程序将继续执行以下代码(本例中为asynctask api请求)这是一个问题,bc fb没有真正给我一个布尔值或任何其他方法来检查(用户批准了权限请求&&权限已成功授予){

执行asynctask api请求以更新数据库

}

也许我遗漏了什么或者真的很愚蠢,但这对他们来说不是很可怕的实现吗?任何专业的公开使用的api都应该返回一个布尔值、一个字符串……我可以用来创建if语句的东西,这难道不是很标准吗

private void turnOnFacebookPublishing() {
        Session session = Session.getActiveSession();
        if (session != null) {
            Log.i("sharedprefs fbPublishBool at start of turnOnFbPublish", String.valueOf(sharedprefs.isFacebookPublishingOn()));
            // Check for publish permissions    
            List<String> permissions = session.getPermissions();
            Log.i("permissions prior to if", permissions.toString());
            if (!isSubsetOf(PERMISSIONS, permissions)) {
                pendingPublishReauthorization = true;
                Session.NewPermissionsRequest newPermissionsRequest = new Session
                        .NewPermissionsRequest(this, PERMISSIONS);
                session.requestNewPublishPermissions(newPermissionsRequest);

            }

// asynctask api request to my api that updates a record on my db that determines a users Facebook publishing preference goes here
             }

}
private void turnOnFacebookPublishing(){
Session=Session.getActiveSession();
if(会话!=null){
Log.i(“打开FBPublish时的sharedprefs fbPublishBool”,String.valueOf(sharedprefs.isFacebookPublishingOn());
//检查发布权限
List permissions=session.getPermissions();
Log.i(“if之前的权限”,permissions.toString());
如果(!isSubsetOf(权限、权限)){
pendingPublishReauthorization=真;
Session.newpermissions请求newpermissions请求=新会话
.NewPermissionsRequest(此,权限);
session.requestNewPublishPermissions(newPermissionsRequest);
}
//asynctask api对my api的请求,该请求更新my db上确定用户Facebook发布偏好的记录
}
}

有两种方法可以获得响应

  • 通过Session.addCallback()将Session.Callback附加到会话对象
  • 通过newPermissionsRequest.setCallback()将Session.Callback附加到newPermissionsRequest
  • 然后重写活动或片段中的onActivityResult方法以调用Session.getActiveSession().onActivityResult,回调将被调用

    我们需要回调而不是直接返回一些数据的原因是,这是一个异步操作(它创建了启动另一个活动的意图),因此在它通过onActivityResult返回之前,我们不会知道结果