Facebook Graph Api OAuthException但访问令牌有效

时间:2015-01-09 08:21:35

标签: facebook facebook-graph-api facebook-android-sdk facebook-graph-api-v2.0 facebook-permissions

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

我正在开发一个使用facebook图形api的Android应用程序。 它使用readpermission" user_likes"。当我这样做时: " me / likes" 一切正常。但是当我这样做时: 的我/喜欢?字段=事件{盖},名称

我收到了 OAuthException errorMessage:必须使用活动访问令牌来查询有关当前用户的信息

总结:

  1. 我获得了一个具有所有必需权限的有效访问令牌。
  2. 我是我的应用程序的管理员,所以facebook隐私政策不应该扮演任何角色!
  3. 请求
  4.   

    我/喜欢

    有效,但

      

    我/喜欢?字段=事件

    不起作用!

    我得到的回应:

      

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

    所以我对我的Access-Token进行了调试:

    发布:1420803216(4小时前)

    到期日:1425987216(约2个月)

    有效:正确

    原产地:Mobile Web 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);
            }
        }
    

    我做错了什么?我想我的会话或许可请求的内容是错误的...我希望有人可以帮助我!

    亲切的问候 克里斯托弗

2 个答案:

答案 0 :(得分:2)

这是因为,在Facebook SDK for Android中,您必须将额外参数作为image.Source = new WriteableBitmap( 300, 300, 300, 300, PixelFormats.Bgra32, null ); 传递。

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

Bundle

答案 1 :(得分:1)

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

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