我正在嘗試讓推特工作。Twitter OAuth問題:錯誤401
我收到的錯誤是: 授權失敗(服務器回答401)。如果消費者密鑰不正確或簽名不匹配,可能會發生這種情況
我已經在這裏檢查了很多相同的問題,在stackoverflow和這裏我已經嘗試過: 1)檢查消費者密鑰(這是2)在dev.twitter.com上爲我的應用程序添加回調URL 3)更新後的庫到twitter-4j-core-3.0.5.jar 4)檢查我的時間平板電腦是正確的(設置東歐時間)
另外我必須說,在一個月前Twitter的應用程序工作正常。然後不知何故它崩潰了。
這裏是我的代碼:
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();
}
}
}
感謝您的回答,特倫斯。 – zapekankaaa
我試圖用「https://api.twitter.com/1.1/」替換REQUEST_TOKEN_URL,ACCESS_TOKEN_URL和AUTORIZE_URL的路徑開始,但在這種情況下,我甚至無法訪問登錄Twitter頁面。 (之前可能)。還嘗試更改dev.twitter.com上的請求URI(在OAuth工具部分中) - 但它不保存此類設置。只有這樣的請求才能看到oauth簽名。在將URL更改爲「https://api.twitter.com/1.1/」時,我應該做些什麼? – zapekankaaa