6

我已经使用了这个确切的代码和其他在一定程度上起作用的代码,但我不断收到以下错误:

{"error":{"type":"OAuthException","message":"An active access token must be used to query information about the current user."}}

这是代码:我使用了我返回的 access_token 并验证了它是否可以将其插入我的浏览器,并且效果很好。但是这段代码似乎要么没有使用我返回的访问令牌,要么我没有设置它。我什至尝试过 FB.setAccessToken() 方法以及 params.putString("access_token", MY_ACCESS_TOKEN)。

我想知道,因为我不需要更改网站 url 的访问令牌才能工作,所以我认为我不需要对 access_token 做任何特殊的事情,比如像在 url 中编码它一样?

谢谢你的帮助。我已经在网上搜索了几个小时的答案,但似乎没有任何答案。

Bundle params = new Bundle();

params.putString("message", "Test");
params.putString("name", "American Virgin");
params.putString("link", "http://bit.ly/12345");
params.putString("description", "A Freshman College Girl on a scholarship from an ...");
params.putString("picture", "http://xxx/MOV1026.jpg");

mAsyncRunner.request("me/feed", params, "POST", new TestRequestListener());
4

4 回答 4

4

您是否尝试包含以下代码?

@Override  
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
        mFacebook.authorizeCallback(requestCode, resultCode, data);  
}  

根据文档,这必须包括在内,否则身份验证将无法正常运行,这反过来可能会导致您遇到的错误。我有同样的问题,但后来意识到我错过了这个。

于 2011-05-10T04:28:13.937 回答
2

现在它工作正常。我刚刚将代码放在评论中。

 public void authorize(Activity activity, String[] permissions,
        int activityCode, final DialogListener listener) {

    boolean singleSignOnStarted = false;

    mAuthDialogListener = listener;

    // Prefer single sign-on, where available.
    //if (activityCode >= 0) {
    //      singleSignOnStarted = startSingleSignOn(activity, mAppId,
    //             permissions, activityCode);
    //  }
    // Otherwise fall back to traditional dialog.
    if (!singleSignOnStarted) {
        startDialogAuth(activity, permissions);
    }
} 
于 2012-03-15T07:06:49.357 回答
1

您收到的访问令牌需要进行 URL 解码。我
用过URLDecoder.decode()MultiPartEntity(HttpMultipartMode.STRICT);

于 2011-02-28T22:11:32.353 回答
0

我刚刚从不同的原因遇到此错误消息。AsyncFacebookRunner 似乎在传入 Facebook 对象时从 Facebook 对象中提取值,而不是持有对它的引用。因此,这样的事情是行不通的:

    

    Facebook fb = new Facebook("appid");
    AsyncFacebookRunner runner = new AsyncFacebookRunner(fb);
    fb.setAccessToken(access_token);
    fb.setAccessExpires(expires);
    runner.request("me", new FbRequestListener());

但是这样的事情会起作用:

    

    Facebook fb = new Facebook("appid");
    fb.setAccessToken(access_token);
    fb.setAccessExpires(expires);
    AsyncFacebookRunner runner = new AsyncFacebookRunner(fb);
    runner.request("me", new FbRequestListener());

于 2012-08-04T16:44:39.820 回答