android - 从 Facebook 获取读取权限后获取 publish_action 权限

标签 android facebook facebook-android-sdk facebook-authentication

我正在将 Facebook 登录到我的应用程序中。我能够获得读取权限,但如何从 Facebook SDK 获得发布权限。

这就是我请求读取权限的方式:

@Override
public void onClick(View v) {
Session currentSession = Session.getActiveSession();
if (currentSession == null
    || currentSession.getState().isClosed()) {
    Session session = new Session.Builder(context).build();
    Session.setActiveSession(session);
    currentSession = session;
}

if (currentSession.isOpened()) {
    // Do whatever u want. User has logged in

} else if (!currentSession.isOpened()) {
    // Ask for username and password
    OpenRequest op = new Session.OpenRequest((Activity) context);

    op.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
    op.setCallback(null);

    List<String> permissions = new ArrayList<String>();
    permissions.add("user_likes");
    permissions.add("email");
    permissions.add("user_birthday");
    permissions.add("user_location");
    permissions.add("user_interests");
    permissions.add("friends_birthday");
    op.setPermissions(permissions);

    Session session = new Builder(MainActivity.this).build();
    Session.setActiveSession(session);
    session.openForRead(op);
    }
}
});

如果用户授予权限,我可以获取 access_token 并在 onActivityResult 上执行我的操作。这是我正在做的事情:

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);
if (Session.getActiveSession() != null)
    Session.getActiveSession().onActivityResult(this, requestCode,
            resultCode, data);

Session currentSession = Session.getActiveSession();
if (currentSession == null || currentSession.getState().isClosed()) {
    Session session = new Session.Builder(context).build();
    Session.setActiveSession(session);
    currentSession = session;
}

if (currentSession.isOpened()) {
    Session.openActiveSession(this, true, new Session.StatusCallback() {

    @Override
    public void call(final Session session, SessionState state,
        Exception exception) {

        if (session.isOpened()) {

        Request.executeMeRequestAsync(session,
            new Request.GraphUserCallback() {

                @Override
                public void onCompleted(GraphUser user,
                    Response response) {
                if (user != null) {

                    TextView welcome = (TextView) findViewById(R.id.welcome);
                    TextView access_token_txt = (TextView) findViewById(R.id.access_token);
                    TextView email_txt = (TextView) findViewById(R.id.email);                                           

                    access_token = session.getAccessToken();
                    firstName = user.getFirstName();
                    fb_user_id = user.getId();                                          

                    access_token_txt.setText(access_token);

                    JSONObject graphResponse = response
                        .getGraphObject().getInnerJSONObject();

                    fbEmail = null;
                    try {
                        fbEmail = graphResponse.getString("email");

                        } catch (JSONException e) {
                            e.printStackTrace();
                        }

                    email_txt.setText(fbEmail);                                         
                    }
                }
            });
        }
    }
});
}
}

我已阅读 Facebook Developer 文档,如此处所述 Permissions - Facebook Developers ,我不能要求发布权限和读取权限。

第一个用户必须请求阅读,当用户自动授权时,我们可以请求发布权限。

如何在用户获得读取权限后从 Facebook 登录获得发布权限。

我们将不胜感激任何形式的帮助。

最佳答案

我的问题得到了答案。只需在获得读取权限后打开 session ,然后请求发布权限。这是我所做的:

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions");
private boolean pendingPublishReauthorization = false;

将此添加到您的 onActivityResult 中:

Session session = Session.getActiveSession();

    if (session != null) {

        // Check for publish permissions
        List<String> permissions = session.getPermissions();
        if (!isSubsetOf(PERMISSIONS, permissions)) {
            pendingPublishReauthorization = true;
            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
                    this, PERMISSIONS);
            session.requestNewPublishPermissions(newPermissionsRequest);
            return;
        }
    }

同样把这个方法集成到代码中:

private boolean isSubsetOf(Collection<String> subset,
        Collection<String> superset) {
    for (String string : subset) {
        if (!superset.contains(string)) {
            return false;
        }
    }
    return true;
}

通过执行这些操作,我可以同时获得阅读和发布权限。

希望这对其他人有帮助。

关于android - 从 Facebook 获取读取权限后获取 publish_action 权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17483757/

相关文章:

java - 如何在不滚动或刷新 View 的情况下同时向recycleview添加新的提要?

ios - ABMultiValueGetCount - kABPersonSocialProfileProperty 总是返回 0?如何从地址簿中获取 Facebook 详细信息?

android - 标记 <provider> 属性权限具有无效字符 '$' 。 AndroidManifest.xml/FacebookActivity

android - Facebook SDK 错误 : Session provided to a request in un-opened state

android - 日期选择器,如何在按下取消时恢复之前选择的日期值

android - SwipeRefreshLayout 干扰 setOnScrollListener

android - ListView 中的可点击范围

Facebook (FB.login) 未请求我的许可

android - 请求好友列表时应用程序崩溃

android - 在 Android 中使用 Facebook SDK 一起共享文本和图像