0

当我尝试通过 facebook 对话框登录后请求发布权限(未安装 fb 应用程序)时,我被要求再次登录,之后一切正常运行。有没有办法避免这个问题?这是我的代码:

private void login() {
        Session.Builder builder = new Session.Builder(activity);
        builder.setApplicationId(activity.getString(R.string.app_id));
        builder.setTokenCachingStrategy(new SharedPreferencesTokenCachingStrategy(activity));
        Session session = builder.build();

        Session.setActiveSession(session);
        Session.OpenRequest request = new Session.OpenRequest(activity).setCallback(new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState state, Exception exception) {
                if (exception!=null) {
                    Toast.makeText(activity, exception.getMessage(), Toast.LENGTH_SHORT).show();
                    return;
                }
                if (session.isOpened())
                    checkAndRequestPermissions();
            }
        });
        session.openForRead(request);
    }

private void checkAndRequestPermissions() {
        Session session = Session.getActiveSession();
        List<String> permissionsList = new ArrayList<String>();
        if (!session.getPermissions().contains(USER_PHOTOS_PERMISSION))
            permissionsList.add(USER_PHOTOS_PERMISSION);
        if (!session.getPermissions().contains(PUBLISH_ACTIONS_PERMISSION))
            permissionsList.add(PUBLISH_ACTIONS_PERMISSION);
        if (permissionsList.size()>0) {
            Session.NewPermissionsRequest request = new Session.NewPermissionsRequest(activity, permissionsList);
            session.requestNewPublishPermissions(request);
        }
        else {
            publishOnFacebook(filesToPublish);
        }
    }
4

1 回答 1

0

好的,我已经弄清楚如何请求读取和发布权限。您应该使用 Session.openForPublish 方法:

        Session.Builder builder = new Session.Builder(activity);
        builder.setApplicationId(activity.getString(R.string.app_id));
        builder.setTokenCachingStrategy(new SharedPreferencesTokenCachingStrategy(activity));
        Session session = builder.build();

        List<String> permissionsList = new ArrayList<String>();
        if (!session.getPermissions().contains(USER_PHOTOS_PERMISSION))
            permissionsList.add(USER_PHOTOS_PERMISSION);
        if (!session.getPermissions().contains(PUBLISH_ACTIONS_PERMISSION))
            permissionsList.add(PUBLISH_ACTIONS_PERMISSION);

        Session.OpenRequest request = new Session.OpenRequest(activity).setCallback(new Session.StatusCallback() {
            @Override
            public void call(Session session, SessionState state, Exception exception) {
                if (exception!=null) {
                    Toast.makeText(activity, exception.getMessage(), Toast.LENGTH_SHORT).show();
                    return;
                }
                if (session.isOpened())
                    checkAndRequestPermissions();
            }
        });
        request.setPermissions(permissionsList);
        request.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
        session.openForPublish(request);

一切对我来说都很好

于 2013-04-16T12:40:42.010 回答