我有一個問題,我不知道爲什麼,我希望你能幫助我!Facebook Graph API OAuthException但訪問令牌有效
我正在開發一個使用facebook圖形API的Android應用程序。 它使用readpermission「user_likes」。當我這樣做的請求: 「我/喜歡」一切工作正常。但是,當我做到這一點? 我/喜歡欄= {事件}蓋,名字
我得到一個OAuthException。 的errorMessage:激活的訪問令牌必須用於查詢當前用戶
總之信息:
- 我得到了所有必需的權限有效的訪問令牌。
- 我是我的應用程序的管理員,所以facebook隱私政策不應該扮演任何角色!
- 請求
me/likes
作品,但
me/likes?fields=events
不起作用!
響應我得到:
{Response: responseCode: 400, graphObject: null, error: {HttpStatus: 400, errorCode: 2500, errorType: OAuthException, errorMessage: An active access token must be used to query information about the current user.}, isFromCache:false}
所以我debuged我的訪問令牌:
發行:1420803216(1小時前)
過期:1425987216(在約2個月)
有效期限:真
產地:Mobile Web Faceweb
個作用域:public_profile,basic_info,電子郵件,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個月到期,它是有效的,所有權限都可以! 作用域\t public_profile,user_birthday,user_location,user_likes,user_events – user3490546
然後你在調用中沒有使用訪問令牌,這將是唯一的解釋,因爲它在API瀏覽器中工作正常。 – luschn
我嘗試了圖表explorere中android-app的訪問令牌,它工作正常!但是當我在android應用程序中做同樣的請求時,我總是得到一個錯誤。 [截圖](http://c50i.imgup.net/GraphApiCa8655.JPG?l=de) – user3490546