2012-10-17 2 views
1

나는 Facebook에 통합 된 응용 프로그램입니다. 게시 대화없이 벽에 게시하고 싶습니다. 이 코드오류 OAuthException 2500 facebook graph api로 게시하는 중

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

제발, 내가 잘못 뭐하는 거지 설명해과 사용자 로그인 나는 code from this answer을 사용하려고하지만 오류

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

있어?

[ADDED]

나는 그것이 작동 mFacebook.dialog(currentActivity, "stream.publish", params, new UpdateStatusListener());에 게시하려고하면

. 도와주세요!

+0

아마 다른 어떤 권한이 필요합니다
코드 변경을 다음과 같이 내가 코드를 변경할 수 있도록 유효하지 않은 두 번 추가된다? – ziwert

답변

1

오, 해냈어. 그러나 로그 캣 권한 부여 방법 (페이스 북의 로그가 활성화되어)

Facebook-authorize: Login Success! access_token=AAAHL4f6XMS0BAHNJKpoGAUAeGDlynRt1s5XPdBPRWGfILGOTZB4OSEGi4HBPLZBXDWqK2RIO8disDtzxHBYSvL3bZAnHkU5hAVK9oqWhAZDZD expires=1356040438476 

후 ... 버그 마법처럼 보인다 그러나 나는 Facebook.java에서

String response = mFacebook.request("me/feed", parameters, "POST"); 

기능의 요청에 게시물을 시도해보십시오

내가 디버거에서 볼
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); 
} 

, 페이스 북의 기능 isSessionValid() 반환 falsemAccessToken = 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); 
} 
+0

'if (! mFacebook.isSessionValid())'내부에 작성한 코드는 'onCreate' 메소드입니다. –

+0

아, 또 다시 =) 나는 왜 'mAccessToken'이 나중에'null '이 아닌지 이해했습니다 : 다른 일부 함수에서 설정했습니다 ... 내 버그를 아주 잘 숨겼습니다! =) – ziwert

1

승인이 성공하면 앱에 액세스 토큰이 반환되어 앱을 사용하여 Facebook API에 대한 작업을 수행 할 수 있습니다. 표시된 오류 메시지는 유효한 액세스 토큰이 없다는 것을 의미합니다. 즉, 앱을 올바르게 인증하지 않았 음을 의미합니다. 어떤 문제가 있는지 확인하기 위해 onFacebookErroronError 메서드에 일부 로깅을 넣을 것입니다.

+0

조언 해 주셔서 감사 드리겠습니다. 하지만 내가 "표준"페이스 북 대화 상자를 사용하여 벽에 게시 할 수있는 이유는 정확하게 응용 프로그램을 인증하지 않았다면? – ziwert

+0

당신이 옳았습니다. 그러나 나는 이해하지 못한다. 나는 정확한 액세스 토큰을 받고, 왜 널 (null)인지, 그 다음에는 게시하려고 시도한다 ... – ziwert

1

내가 같은 문제가 있었다 (그냥 다시 세트 토큰에 액세스) 내 문제를 해결했다. 나는 내 access_token을 facebook debugger을 통해 테스트했는데 그것은 유효했다. 그럼 난이 오류를 발견, com.facebook.android.Util.openUrl(...)의 최종 URL을했다 :
잘못된-URL1 :
https : //로 graph.facebook.com//me/albums?fields=id,name,cover_photo,type,count? access_token은 = {... 토큰 ..} & 형식 = JSON & 메타 데이터 = 1
이 있어야 할 곳에 :
유효한 - URL2 :
https : //로 graph.facebook.com//me/albums? fields = id, name, cover_photo, type, count & access_token = {... 토큰 ..} & 형식 = json & 메타 데이터 = 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); 
     } 
    } 
관련 문제