0

我从 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
             }

}
4

1 回答 1

0

有两种方法可以得到响应。

  1. 通过 session.addCallback() 将 Session.Callback 附加到会话对象。
  2. 通过 newPermissionsRequest.setCallback() 将 Session.Callback 附加到 newPermissionsRequest

然后你重写你的活动或片段中的onActivityResult方法来调用Session.getActiveSession().onActivityResult,你的回调将被调用。

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

于 2013-08-16T16:34:33.247 回答