我正在撰写与facebook集成的应用。我想在没有帖子对话的情况下发布到墙上。我尝试使用code from this answer,但我收到了错误
{"error":
{"message":"An active access token must be used to query information about the current user.",
"type":"OAuthException",
"code":2500
}
}
我使用此代码登录用户
public void authorize() {
mFacebook.authorize(mActivity, new String[] { "publish_stream" }, new DialogListener() {
@Override
public void onComplete(Bundle values) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", mFacebook.getAccessToken());
editor.putLong("access_expires", mFacebook.getAccessExpires());
editor.commit();
mLoginStateView.setImageResource(mAuthorizedDrawableRes);
}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
}
请解释一下我做错了什么?
[ADDED]
如果我尝试使用mFacebook.dialog(currentActivity, "stream.publish", params, new UpdateStatusListener());
发帖,那就有效了。拜托,帮助我!
答案 0 :(得分:1)
成功授权会向您的应用返回访问令牌,然后您可以使用该令牌对Facebook API执行操作。显示的错误消息表示您没有有效的访问令牌,这意味着您可能没有正确验证应用程序。我会对onFacebookError
和onError
方法进行一些登录,以查看问题所在。
答案 1 :(得分:1)
哦,我已经完成了。但它看起来像一个bug或魔法...... 授权方法后的LogCat(Facebook的日志已启用)
Facebook-authorize: Login Success! access_token=AAAHL4f6XMS0BAHNJKpoGAUAeGDlynRt1s5XPdBPRWGfILGOTZB4OSEGi4HBPLZBXDWqK2RIO8disDtzxHBYSvL3bZAnHkU5hAVK9oqWhAZDZD expires=1356040438476
然后我尝试用
发帖String response = mFacebook.request("me/feed", parameters, "POST");
来自Facebook.java的功能请求:
public String request(String graphPath, Bundle params, String httpMethod)
throws FileNotFoundException, MalformedURLException, IOException {
params.putString("format", "json");
if (isSessionValid()) {
params.putString(TOKEN, getAccessToken());
}
String url = (graphPath != null) ? GRAPH_BASE_URL + graphPath : RESTSERVER_URL;
return Util.openUrl(url, httpMethod, params);
}
我在调试器中看到Facebook的函数isSessionValid()
返回false
和mAccessToken = null
。我不知道为什么会这样,为什么它有时会返回true
(是的,我明白这是不可能的)。如果你知道的话,请解释我。
此代码解决了我的问题(它只是重新设置了访问令牌)
if (!mFacebook.isSessionValid()){
String token = mPrefs.getString("access_token", null);
long expires = mPrefs.getLong("access_expires", 0);
mFacebook.setAccessToken(token);
mFacebook.setAccessExpires(expires);
}
Bundle parameters = new Bundle();
parameters.putString("message", msg);
parameters.putString("description", "test test test");
String response = mFacebook.request("me/feed", parameters, "POST");
if (response == null || response.equals("") || response.equals("false")) {
Log.e(Const.LOG_TAG, "Blank response");
} else {
Log.d(Const.LOG_TAG, response);
}
答案 2 :(得分:1)
从facebook上检索专辑时我也遇到了同样的问题。我通过facebook debugger测试了我的access_token,它是有效的。然后我发现了错误,com.facebook.android.Util.openUrl(...)
中的最终网址是:
无效-URL1:
https:// graph.facebook.com//me/albums?fields=id,name,cover_photo,type,count?access_token={...token..}&format=json&metadata=1
它应该在哪里:
有效 - 网址2:
https:// graph.facebook.com//me/albums?fields=id,name,cover_photo,type,count&access_token = {... token ..}& format = json& metadata = 1
请注意,在URL1中?添加两次无效,所以我按如下方式更改了代码 代码更改: 上一页
com.facebook.android.Util.openUrl(...)
if (method.equals("GET")) {
url = url + "?" + encodeUrl(params);
}
立即强>
com.facebook.android.Util.openUrl(...)
if (method.equals("GET")) {
if(url.contains ( "?" )==false)
{
url = url + "?" + encodeUrl(params);
}
else
{
url = url + "&" + encodeUrl(params);
}
}