0

문제가 생겨서 왜 그런지 모르겠지만 당신이 나를 도울 수 있기를 바랍니다!Facebook 그래프 Api OAuthException하지만 액세스 토큰이 유효합니다

페이스 북 그래프 API를 사용하는 Android 앱을 개발 중입니다. 읽기 허용 "user_likes"를 사용합니다. 이 요청을 할 때 : "me/likes" 모든 것이 잘 동작합니다. 하지만 난이 작업을 수행 할 때? 나를/좋아하는 분야 = 이벤트 {커버}, 이름

나는 OAuthException를 얻을. ERRORMESSAGE은 :

  1. 내가 필요한 모든 권한이있는 유효한 액세스 토큰을 얻을 : 활성 액세스 토큰은 현재 사용자 결론적으로

    에 대한 정보를 조회하는 데 사용되어야합니다.

  2. 저는 페이스 북의 개인 정보 취급 방침이 어떤 역할을해서는 안되는 내 앱 관리자입니다! 이

    me/likes?fields=events

    이 작동하지 않습니다

  3. 요청

me/likes

작동하지만

!

응답 내가 얻을 :

{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}

그래서 난 내 액세스 토큰 디버그하는 :

발행 : 1,420,803,216 (4 시간 전)

만료 : 1,425,987,216 (약 2 개월)

유효 : True

출처 : 모바일 웹 Faceweb

스코프 : public_profile, basic_info, 이메일, user_birthday, USER_LOCATION는, user_likes, 내 액세스 토큰이 너무 많은 범위를 가지고 왜 정말 이해가 안


가 user_friends? 방금 "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); 
     } 
    } 

:

loginBtn.setReadPermissions(Arrays.asList("user_likes")); 

이 내 코드인가? 내 세션이나 권한 요청이 잘못되었다고 생각합니다 ... 누군가가 나를 도울 수 있기를 바랍니다!

종류의 API 호출이 올바른 것으로 보인다는 API Explorer에서 작동 크리스토프

답변

1

에게 간주한다. 오류에 대한 논리적 인 설명은 액세스 토큰이 유효하지 않다는 것입니다.

은 디버거에 토큰을 넣고이 유효한지 확인하고 user_likes 경우로 볼 수 있습니다 : 안드로이드에 대한 페이스 북 SDK에서, 당신은 Bundle로 추가 매개 변수를 전달해야하기 때문이다 https://developers.facebook.com/tools/debug/

+0

... 그것은 약 2 개월 만에 만료가 유효하고 모든 권한을 사용할 수 있습니다! 범위 \t public_profile, user_birthday, user_location, user_likes, user_events – user3490546

+1

호출에서 액세스 토큰을 사용하고 있지 않습니다. 이는 API 탐색기에서 제대로 작동하므로 유일한 설명입니다. – luschn

+0

그래프 탐색기에서 android-app의 액세스 토큰을 시도했는데 성공했습니다! 하지만 내가 안드로이드 애플 리케이션에서 동일한 요청을 할 때, 나는 항상 오류가 발생합니다. [스크린 샷] (http://c50i.imgup.net/GraphApiCa8655.JPG?l=de) – user3490546

2

.

따라서, 귀하의 경우에, 당신은 그래프가 이런 식으로 객체를 호출해야합니다

이미 수행
Bundle bundle = new Bundle(); 
bundle.putString("fields", "events"); 

new GraphRequest(AccessToken.getCurrentAccessToken(), "me/likes", bundle, HttpMethod.GET, new GraphRequest.Callback() { 
    public void onCompleted(GraphResponse response) { 
     // Your stuff here 
    } 
}).executeAsync(); 
관련 문제