要求获得额外的Facebook许可

时间:2014-06-27 08:57:07

标签: android facebook-android-sdk

我在尝试检索其他权限时遇到了麻烦" publish_action"。

我认为用户已经通过Facebook登录,因此授予了基本权限。 然后我有这个代码(来自我的片段):

List<String> permissionsRequested = Arrays.asList("publish_actions");
List<String> permissionsActual = session.getPermissions();
if (!isSubsetOf(permissionsRequested,  permissionsActual)) {
    pendingPublishReauthorization = true;
    Session.NewPermissionsRequest newPermissionsRequest = new Session
        .NewPermissionsRequest(this, permissionsRequested);
    session.requestNewPublishPermissions(newPermissionsRequest);
    return;
}

从调试看,用户授予权限后,控制转到onActivityResult,根据facebook文档,我有

super.onActivityResult(requestCode, resultCode, data);
facebookUiHelper.onActivityResult(requestCode, resultCode, data);

uiHelper也适用于所有onResume&amp; onDestroy方法中使用的文档(根据文档)。

在onCreate中我有

super.onCreate(savedInstanceState);
facebookUiHelper = new UiLifecycleHelper(getActivity(), fbSessionCallback);
facebookUiHelper.onCreate(savedInstanceState);

其中fbSessionCallback已覆盖call()方法,该方法调用onFbSessionRestore()

if (pendingPublishReauthorization && 
    state.equals(SessionState.OPENED_TOKEN_UPDATED)) {
    pendingPublishReauthorization = false;
    // do things with my new session, updated with granted permission. e.g. post to fb.
}

麻烦就是那个

  1. onActivityResult执行,但之后没有调用回调,因此被覆盖的call()不会去,而onFbSessionCallback也是。
  2. 如果我在此之后尝试再次发布(从头开始) - 它会在没有授予权限的情况下获得会话,尝试请求它,然后对待处理的newPublishRequest权限发布facebook异常blah-blah
  3. 有人可以帮助配置onActivityResult及更高版本的工作流程吗? 我读了facebook文档,我倾向于责怪他们写的很糟糕。也许这只是我太愚蠢...... :((

1 个答案:

答案 0 :(得分:0)

这就是我设置它的方式:

Session session = Session.getActiveSession();
    if (session != null) {
        List<String> permissions = session.getPermissions();
        if (!permissions.contains("publish_actions")) {
            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, "publish_actions");
            session.addCallback(callbacktwo);
            session.requestNewPublishPermissions(newPermissionsRequest);
            return;
        }
    }

这是在我的onActivityResult中,但它不需要。我之前在onCreate中使用过它。我在请求中添加了一个回调函数,然后我可以用它来完成下一步。

这是我的回调:

private Session.StatusCallback callbacktwo = new Session.StatusCallback() {

    @Override
    public void call(Session session, SessionState state, Exception exception) {
        Intent in = new Intent(getActivity(), ClassHere.class);
        startActivity(in);
    }
};

请记住,回调将响应两次,一次是在您启动权限请求时,以及在完成后。所以你必须解决这个/在你的代码中工作。