0

我有一个问题,我不知道为什么,我希望你能帮助我!

我正在开发一个使用 facebook graph api 的 android 应用程序。它使用读取权限“user_likes”。当我提出这个要求时: “我/喜欢”一切正常。但是当我这样做时: me/likes?fields=events{cover},name

我得到一个OAuthExceptionerrorMessage:必须使用活动访问令牌来查询有关当前用户的信息

综上所述:

  1. 我获得了具有所有必需权限的有效访问令牌。
  2. 我是我的应用程序的管理员,因此 Facebook 隐私政策不应发挥任何作用!
  3. 要求

我/喜欢

有效,但是

我/喜欢?字段=事件

不工作!

我得到的回应:

{Response: responseCode: 400, graphObject: null, error: {HttpStatus: 400, errorCode: 2500, errorType: OAuthException, errorMessage: 必须使用活动访问令牌来查询当前用户的信息。}, isFromCache:false}

所以我调试了我的访问令牌:

发布:1420803216(4小时前)

过期:1425987216(约2个月)

有效:真

来源:移动网络 Faceweb

范围:public_profile、basic_info、email、user_birthday、user_location、user_likes、user_friends


我真的不明白为什么我的访问令牌有这么多范围?我刚刚设置了“user_likes”!

loginBtn.setReadPermissions(Arrays.asList("user_likes"));

这是我的代码:

 private LoginButton loginBtn;
    private TextView username;
    private UiLifecycleHelper uiHelper;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        uiHelper = new UiLifecycleHelper(this, statusCallback);
        uiHelper.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

        username = (TextView) findViewById(R.id.username);
        loginBtn = (LoginButton) findViewById(R.id.fb_login_button);
        loginBtn.setReadPermissions(Arrays.asList("user_likes"));
        loginBtn.setUserInfoChangedCallback(new UserInfoChangedCallback() {
            public void onUserInfoFetched(GraphUser user) {
                if (user != null) {
                    username.setText("You are currently logged in as "
                            + user.getName());
                } else {
                    username.setText("You are not logged in.");
                }
            }
        });
    }

    private Session.StatusCallback statusCallback = new Session.StatusCallback() {
        public void call(Session session, SessionState state,
                Exception exception) {
            if (state.isOpened()) {
                Log.d("MainActivity", "Facebook session opened.");
            } else if (state.isClosed()) {
                Log.d("MainActivity", "Facebook session closed.");
            }
        }
    };

    @Override
    public void onResume() {
        super.onResume();
        Session session = Session.getActiveSession();
        if (session != null && (session.isOpened() || session.isClosed())) {
            onSessionStateChange(session, session.getState(), null);
        }
        uiHelper.onResume();
    }

    private void onSessionStateChange(final Session session,
            SessionState state, Exception exception) {

        if (state.isOpened()) {
            // userInfoTextView.setVisibility(View.VISIBLE);
            String token = session.getAccessToken();
            Log.d("SESSION_TOKEN", token);
            new Request(session, "me/likes?fields=events", null, HttpMethod.GET,
                    new Request.Callback() {
                        public void onCompleted(Response response) {
                            Log.i("INFO", response.toString());
                            // new
                            // GetResponses(userInfoTextView).execute(response);
                        }
                    }).executeAsync();

        } else if (state.isClosed()) {
            // userInfoTextView.setVisibility(View.INVISIBLE);
        }
    }

我在做什么错?我猜我的会话或权限请求有问题...我希望有人可以帮助我!

亲切的问候克里斯托夫

4

2 回答 2

2

这是因为,在 Android 版 Facebook SDK 中,您必须将额外参数作为Bundle.

因此,对于您的情况,您应该以这种方式调用 Graph 对象:

Bundle bundle = new Bundle();
bundle.putString("fields", "events");

new GraphRequest(AccessToken.getCurrentAccessToken(), "me/likes", bundle, HttpMethod.GET, new GraphRequest.Callback() {
    public void onCompleted(GraphResponse response) {
        // Your stuff here
    }
}).executeAsync();
于 2015-07-26T19:56:08.457 回答
1

API 调用似乎是正确的,并且可以在 API Explorer 中使用。该错误的唯一合乎逻辑的解释是访问令牌无效。

将令牌放入调试器中,查看它是否有效以及是否user_likes可用:https ://developers.facebook.com/tools/debug/

于 2015-01-09T09:02:49.613 回答