트위터 작업을하려고합니다.Twitter OAuth 문제 : 오류 401
수신 오류 : 인증에 실패했습니다 (서버가 401로 응답 함). 이것은 소비자 키가 올바르지 않거나 서명이 일치하지 않는 경우에 발생할 수 있습니다.
이미 많은 문제가 여기 stackoverflow에서 이미 확인되었습니다. 여기에서 이미 시도한 내용 : 1) 소비자 키 확인 dev.twitter.com에서 내 앱용 콜백 URL을 추가했습니다. 3) 업데이트 된 라이브러리를 twitter-4j-core-3.0.5.jar 에 업데이트했습니다. 4) 내 시간 타블렛이 맞음 (동유럽 시간 설정)
또한 나는 지난 몇 달 전에 응용 프로그램의 트위터가 제대로 작동했다고 말해야합니다. 그럼 어떻게 든 부서졌습니다.
여기 내 코드입니다 : 지난 달에
class GetOAuthVerifierTask extends AsyncTask<Void, Void, String> {
private Context context;
public GetOAuthVerifierTask(Context context) {
this.context = context;
dialog = ProgressDialog.show(TwitterActivity.this, getString(CANNOT_GET_REQUEST_TOKEN), null);
}
@Override
protected String doInBackground(Void... params) {
TwitterUtils twitterUtils = TwitterUtils.getInstance();
OAuthConsumer consumer = twitterUtils.createConsumer();
OAuthProvider provider = twitterUtils.createProvider();
try {
final String url = provider.retrieveRequestToken(consumer,
twitterUtils.getCallbackURL(context));
twitterUtils.setConsumerToken(context, consumer.getToken());
twitterUtils.setConsumerSekretToken(context, consumer.getTokenSecret());
return url;
} catch (Exception e) {
Logger.debug("Can not retrieve request token");
Logger.error(e.getMessage(), e);
return null;
}
}
@Override
protected void onPostExecute(String url) {
dialog.dismiss();
if (url != null){
// HERE IT WORKS CORRECT
web.loadUrl(url);
}
else{
Toast.makeText(TwitterActivity.this, getString(DOWNLOAD_WAIT_MESSAGE),
Toast.LENGTH_LONG).show();
}
}
}
class GetAccessTokenTask extends AsyncTask<Uri, Void, Boolean> {
@Override
protected void onPreExecute() {
dialog = ProgressDialog.show(TwitterActivity.this, getString(CANNOT_GET_REQUEST_TOKEN), null);
}
@Override
protected Boolean doInBackground(Uri... params) {
TwitterUtils twitterUtils = TwitterUtils.getInstance();
String oauthVerifier = params[0].getQueryParameter(OAuth.OAUTH_VERIFIER);
OAuthConsumer consumer = twitterUtils.createConsumer();
consumer.setTokenWithSecret(twitterUtils.getConsumerToken(TwitterActivity.this),
twitterUtils.getConsumerSekretToken(TwitterActivity.this));
OAuthProvider provider = twitterUtils.createProvider();
try {
provider.retrieveAccessToken(consumer, oauthVerifier);
twitterUtils.setAccessToken(TwitterActivity.this, consumer.getToken());
twitterUtils.setAccessTokenSecret(TwitterActivity.this, consumer.getTokenSecret());
} catch (Exception e) {
Logger.debug("Can not retrieve access token");
Logger.error(e.getMessage(), e);
return false;
}
return true;
}
@Override
protected void onPostExecute(Boolean result) {
dialog.dismiss();
if (result) {
TwitterActivity.this.sendMessage();
TwitterActivity.this.finish();
} else {
// HERE I GET 401
Toast.makeText(TwitterActivity.this, getString(DOWNLOAD_WAIT_MESSAGE),
Toast.LENGTH_LONG).show();
}
}
}
답변 해 주신 Terence. – zapekankaaa
REQUEST_TOKEN_URL, ACCESS_TOKEN_URL 및 AUTORIZE_URL의 경로 시작 부분을 "https://api.twitter.com/1.1/"로 바꾸려고했지만이 경우 로그인 트위터 페이지에도 액세스 할 수 없습니다. (전에 가능했다). 또한 dev.twitter.com의 요청 URI (OAuth 도구 부분)를 변경하려고 시도했지만 이러한 설정은 저장하지 않습니다. 이러한 요청에 대해 oauth 서명 만 볼 수 있습니다. URL을 "https://api.twitter.com/1.1/"로 변경할 때 추가해야합니까? – zapekankaaa