【问题标题】:I get the following error: "message": "Malformed access token我收到以下错误:“消息”:“访问令牌格式错误
【发布时间】:2015-11-02 21:26:53
【问题描述】:

我在 facebook 有一个应用程序,我正在尝试获取长期令牌,

为此,我调用了以下链接:

https://graph.facebook.com/oauth/authorize?client_id=xxxxxx&redirect_uri=http%3A%2F%2Flocalhost%3A8080%2Faccesstokforfacebook%2Ffbaccess&scope=read_stream,read_insights,user_religion_politics,user_relationship_details,user_hometown,user_location,user_likes,user_activities,user_interests,user_education_history,user_work_history,user_website,user_groups,user_events,user_photos,user_videos,user_about_me,user_status,user_games_activity,user_tagged_places,user_actions.books,user_actions.video,user_actions.news

并且返回的 url 是一个带有以下代码的 servlet:

response.setContentType("text/html");       
    PrintWriter out = response.getWriter();

    String accessCode = request.getParameter("code");
    System.out.println("dddd  "+accessCode);
    //print SUCCESS if code is found
    /*if (accessCode!=null){*/
        out.print("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\"\"http://www.w3.org/TR/html4/strict.dtd\"><html><head><title>Facebook Access Granted</title></head><body>");
        out.print("<p>SUCCESS!</p><p>"+accessCode+"</p></body></html>");

这个 servlet 会收到这样的很长的代码:

AQCY244eMOhxEVu3e6UEIl-qK974wTh-p0Il1ZdG9VEAYl5GdrjxxxxxxxxxxxxxxxxxxxxxxxxxxxxxQcJeUmeXFU56cbWbmXJdLQvEyIT7JWCxxu6tChkr9oCL1DVYxxv4v-j4Y_vaWGD7dYcxxxxxxxxxxxxxxxxxxTvZPHLU-tU5ySHrQrVgpo_i8minM73cyWxxxxxxxxxxxxxxdZvnrIhQXQ-B_3LAFzDcWe2NbCW7WSgmQ-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxMkJ55M0wHHbLmL4D-g_wLIwhpz4W_8Hz0h7v_ZL

现在,当我使用此令牌获取页面的所有信息时,出现错误:

这是我使用的链接:

https://graph.facebook.com/v2.0/khalatbari.hooman/feed?access_token=THE以上代码

错误是:

现在我认为我得到的代码不是访问令牌,但我不知道如何使用此代码来获取访问令牌!!!

谁能帮忙

【问题讨论】:

  • 在 url 中使用访问令牌之前是否对访问令牌进行了 urlencode?​​span>
  • 是的,您可以在第一个链接中看到它。即使在使用第一个链接之后,也会返回一个长代码,但是当我使用它时,它会显示格式错误的令牌,尽管我使用的是 facebook 返回的内容
  • 在将访问令牌添加到第二个 url 之前,您是否对访问令牌进行了 urlencode?访问令牌末尾的 #= 看起来很奇怪
  • 感谢您的评论。实际上不,我没有,但在你说我用这个网站做了之后:url-encode-decode.com 并且网址没有改变。我上面发布的令牌也是出于安全原因而被操纵,但真正的令牌以 0wHHbLmL4D-g_wLIwhpz4W_8Hz0h7v_ZL 结尾。我仍然得到同样的错误
  • 如果它不起作用,我建议在developers.facebook.com/bugs 提交错误并包含确切的访问令牌。您可以将错误标记为机密,这样其他人就不会看到它

标签: facebook facebook-graph-api


【解决方案1】:

终于为 Facebook SDK 4.6.0 找到了获得 feed 的有限评论列表的解决方案:

1> 首先在Activity的oncreate()中调用commentInfo() :

private boolean isLoadMoreCalled;

    commentInfo("", "true");

2> 也将加载更多方法放在那里,例如:

        listViewCommentList.setOnScrollListener(new AbsListView.OnScrollListener() {

            @Override
            public void onScrollStateChanged(AbsListView view, int scrollState) {
                Log.d("scrollState", ""+scrollState);
            }

            @Override
            public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {


                int last_visible_in_screen = firstVisibleItem + visibleItemCount;

                if(last_visible_in_screen == totalItemCount && isLoadMoreCalled) {
                    Toast.makeText(getApplicationContext(), "Loading more Items 10", Toast.LENGTH_SHORT).show();
                    commentInfo(nextFeedUrl, "false");
                    isLoadMoreCalled  = false;
                }
            }
        });

3>在onCreate()之外创建commentInfo():

    public void commentInfo (String fields, final String isFirst) {

                /**     Festival Feed Comments Details @Facebook       */
                Bundle params = new Bundle();
                params.putString("fields", "message,created_time,from");
                params.putString("limit", "10");


                if(isFirst.equals("false")) {
                    params.putString("after", fields);
                }

                showProgressBar();
                /* make the API call */
                //refreshCurrentAccessTokenAsync();
                System.out.println("Acees Token Comment>>>"+ AccessToken.getCurrentAccessToken());

                new GraphRequest(AccessToken.getCurrentAccessToken(), "/"+ feedId +"/comments", params, HttpMethod.GET,
                        new GraphRequest.Callback() {
                            public void onCompleted(GraphResponse response) {
                                /* handle the result */
                                System.out.println("Festival feed Comments response::" + String.valueOf(response.getJSONObject()));

                                try {
                                    JSONObject jObjResponse = new JSONObject(String.valueOf(response.getJSONObject()));

                                    JSONObject jObjPaging = jObjResponse.getJSONObject("paging");

                                    JSONObject jObjCursor = jObjPaging.getJSONObject("cursors");

                                    nextFeedUrl = "";
                                    nextFeedUrl = jObjCursor.getString("after");

                                    System.out.println("nextFeedUrl>>"+ nextFeedUrl);

                                        JSONArray jArrayData = jObjResponse.getJSONArray("data");
                                        for(int i = 0; i< jArrayData.length(); i++) {

Getting comments info & store into Data-Structure(Array-List)

    }

                                        if(isFirst.equals("true")) {
                                            fbFeedCommentAdapter = new FbFeedCommentAdapter();
                                            listViewCommentList.setAdapter(fbFeedCommentAdapter);
                                        }
                                        else {
                                            fbFeedCommentAdapter.notifyDataSetChanged();
                                        }

                                        if(!jObjPaging.has("next")) {
                                            isLoadMoreCalled = false;
                                        }
                                        else {
                                            isLoadMoreCalled = true;
                                        }

                                    dismissProgressBar();
                                }
                                catch (Exception e) {
                                    e.printStackTrace();
                                    dismissProgressBar();
                                }
                            }
                        }
                ).executeAsync();

            }

这里,

fbFeedCommentAdapter -> BaseAdapter

listViewCommentList -> Listview

另请参阅How to use the Facebook Graph Api Cursor-based Pagination

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多