Android Facebook SDK,请求发布权限" manage_pages"没有更新会话权限列表

时间:2014-05-20 20:11:26

标签: java android facebook parse-platform

我在Android上使用Parse和Facebook SDK。我试图请求获得许可" manage_pages"在Facebook帐户链接后。但每当我发出请求时,它都不会添加到Session.getPermissions()中的权限列表中。但是,Facebook对话框弹出窗口要求" manage_pages"权限出现,并在facebook.com上的我的Facebook应用程序设置中列出。

在MainActivity中:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.e(TAG, "Receiving activity result with requestCode: " + requestCode + " resultcode: " + resultCode);
    if (requestCode == 32665) // Code for when facebook is NOT linked
        ParseFacebookUtils.finishAuthentication(requestCode, resultCode,
                data);
    super.onActivityResult(requestCode, resultCode, data);
    Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}

在FacebookFragment的onCreateView()

        connectBtn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (user == null) {
                    Log.d(TAG, "User is null.");
                    return;
                }
                if (!ParseFacebookUtils.isLinked(user)) {
                    ParseFacebookUtils.link(user,
                            FacebookFragment.this.getActivity(),
                            new SaveCallback() {
                                @Override
                                public void done(ParseException ex) {
                                    if (ParseFacebookUtils.isLinked(user)) {
                                        Log.d(TAG,
                                                "Woohoo, user logged in with Facebook!");
                                        user.add(ParseConstants.USER_ARRAY_NETWORKS, ParseConstants.NETWORK_CODE_FACEBOOK);
                                        user.saveInBackground();

                                        Session session = Session.getActiveSession();
                                        // Check for publish permissions
                                        List<String> permissions = session.getPermissions();
                                        if (!permissions
                                                .contains(Permissions.Page.MANAGE_PAGES)) {
                                            Log.e(TAG, "We don't have hte permission: " + Permissions.Page.MANAGE_PAGES + "... we have " + Arrays.toString(permissions.toArray()));
                                            Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(
                                                    getActivity(),
                                                    "manage_pages");
                                            newPermissionsRequest.setRequestCode(23232);
                                            newPermissionsRequest.setCallback(new StatusCallback() {

                                                @Override
                                                public void call(
                                                        Session session,
                                                        SessionState state,
                                                        Exception exception) {
                                                    List<String> permissions = session.getPermissions();

                                                    Log.e(TAG, "CALLBACK Permissions: " + Arrays.toString(permissions.toArray()));
                                                    if (exception != null)
                                                        Log.e(TAG, "EXCEPTION: " + exception.getMessage());
                                                }

                                            });
                                            session.requestNewPublishPermissions(newPermissionsRequest);
//                                          ParseFacebookUtils.saveLatestSessionData(ParseUser.getCurrentUser());
                                        }

                                        showMessages();
                                    } else {
                                        Log.e(TAG, "Uhh user is not linked");
                                    }
                                }
                            });
                } else
                    Log.e(TAG, "User is already linked!");
            }
        });

FacebookFragment&#39; onStart

@Override
public void onStart() {
    super.onStart();
    if (ParseFacebookUtils.isLinked(user)) {
        showMessages();


        Session session = ParseFacebookUtils.getSession();
        // Check for publish permissions
        List<String> permissions = session.getPermissions();

        Log.e(TAG, "Permissions: " + Arrays.toString(permissions.toArray()));
        Log.e(TAG, "Permissions: " + Arrays.toString(Session.getActiveSession().getPermissions().toArray()));

    }
}

这是logCat中出现的内容:

05-20 15:55:53.077: E/FacebookFragment(1887): We don't have hte permission: manage_pages... we have [public_profile]
05-20 15:55:53.337: E/FacebookFragment(1887): CALLBACK Permissions: []
05-20 15:55:54.228: E/MainActivity(1887): Receiving activity result with requestCode: 23232 resultcode: -1
05-20 15:55:54.228: E/FacebookFragment(1887): Permissions: [public_profile]
05-20 15:55:54.228: E/FacebookFragment(1887): Permissions: [public_profile]

2 个答案:

答案 0 :(得分:0)

我遇到与您相同的问题,遗憾的是Sessions.getPermissions()非常无用,您必须在应用程序中注销并再次登录才能更新会话对象。 我尝试了一切。

我最终做的是完全放弃session.getPermissions(),只是在线发送 / me / permissions 图谱API。

它是唯一可靠的,无需登录/退出。

答案 1 :(得分:0)

您是否尝试过Session.isPublishPermission("manage_pages")功能? 我遇到了和你一样的问题,但是通过使用这个函数,它返回了一个正确的boolean值。