1

Facebookと統合したアプリを書いています。投稿ダイアログなしで壁に投稿したい。この回答のコードを使用しようとしましたが、エラーが発生しました

{"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() {}
    });
}

何が間違っているのか説明してください。

[追加した]

私がそれで投稿しようとするmFacebook.dialog(currentActivity, "stream.publish", params, new UpdateStatusListener());とうまくいきます。私を助けてください!

4

3 に答える 3

1

承認が成功すると、アプリにアクセストークンが返され、これを使用してFacebookAPIへのアクションを実行できます。表示されるエラーメッセージは、有効なアクセストークンがないことを意味します。これは、アプリが正しく認証されていない可能性があることを意味します。問題が何であるかを確認するために、メソッドonFacebookErrorとメソッドにログを記録します。onError

于 2012-10-17T19:54:51.953 に答える
1

ああ、やった。しかし、それはバグまたは魔法のように見えます...認証メソッドの後の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()返すことがわかります。なぜそうなのか、そしてなぜその後に戻ってくるのかはわかりません(そうです、それは不可能だと理解しています)。知っていれば説明してください。falsemAccessToken = nulltrue

このコードは私の問題を解決しました(アクセストークンをリセットするだけです)

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);
}
于 2012-10-22T13:25:28.520 に答える
1

Facebookからアルバムを取得するときにも同じ問題が発生しました。Facebookデバッガーを介してaccess_tokenをテストしましたが、有効でした。次に、エラーを見つけました。最終的なURLcom.facebook.android.Util.openUrl(...)は次
のとおりです。Invalid-URL1:
https: //graph.facebook.com//me/albums?fields = id、name、cover_photo、type、count?access_token = {... token ..}&format = json&metadata = 1
必要な場所:
有効-URL2:
https://graph.facebook.com//me/albums?fields = id、name、cover_photo、type、count&access_token ={...token。 。}&format = json&metadata = 1

URL1では?は2回追加されますが、これは無効なので、次のようにコードを変更しました
。コードの変更: 前へ

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);
        }
    }
于 2012-12-17T20:05:27.587 に答える