Facebook requestNewPublishPermissions的回调函数 - Android

3
我正在尝试从我的Android应用程序中获取用户的发布权限,我成功了,但当我获得权限时,我希望有一个回调来告诉我这一点。以下是我的代码:
private void requestPublishPermissions(Session session) {
    Log.d("", "Requesting Publish Permissions...");
    if (session != null) {
        List<String> publishPermissions = Arrays.asList("publish_actions", "publish_stream");
        final int REAUTH_ACTIVITY_CODE = 100;
        Session.NewPermissionsRequest reauthRequest = new Session.NewPermissionsRequest(this, publishPermissions).setRequestCode(REAUTH_ACTIVITY_CODE);
        reauthRequest.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        session.requestNewPublishPermissions(reauthRequest);
    }
}
< p > session.requestNewPublishPermissions(reauthRequest);有回调函数或其他告诉我权限已被接受的东西吗?

感谢任何帮助。

3个回答

2

我不知道有没有针对那个请求的回调函数,但是有一种简单的方法可以获得你想要的结果。

只需在onSessionStateChanged()回调函数中添加条件语句。如果你使用session.getPermissions().contains("xxx")在该方法中检查权限,你应该能够在那里进行检查。每当会话状态发生变化时,它都会调用该方法,我认为这包括更新权限。


嗯...这个可能行,但是需要用户先点击发布,然后接受权限并再次点击发布才能真正发布。 - PaperThick
一旦用户接受了发布权限,它应该保存在他们的Facebook应用设置中。从那时起,除非用户手动删除一个关键权限,否则您不需要再次请求权限。 - Wenger
我也遇到了同样的问题。我尝试在onSessionStateChanged()中获取当前权限,但即使用户授予发布权限,它也不包含在会话中。因此,当我运行session.getPermissions().contains("xxx")时,它返回false。有什么想法吗? - Gem
确保您正在运行 Session.openActiveSession(...) 或类似的方法来实际启动会话。它应该从缓存中拉取一个令牌,或者如果令牌已过期,则会获取一个新的令牌。 - Wenger

0
您可以手动向您的FB会话添加回调函数。
Session.getActiveSession().addCallback(new StatusCallback() {

            @Override
            public void call(Session session, SessionState state, Exception exception) {
                if (session.getPermissions().contains("publish_actions")) {
                    //do stuff


                }
            }
        });

0

在您的会话中添加StatusCallback

private Session.StatusCallback statusCallback = new SessionStatusCallback();

private class SessionStatusCallback implements Session.StatusCallback {
    @Override
    public void call(final Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {
            switch (state) {
                case OPENED_TOKEN_UPDATED:
                    // Returns here after you request publish permissions
                    // So call your publishing actions here
                    break;
            }
        }
    }
}

实现onActivityResult()将各个部分粘合在一起。

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接