我正在为twitter oauth尝试以下示例应用程序。
http://www.androidsdkforum.com/android-sdk-development/3-oauth-twitter.html
private void askOAuth() {
try {
consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
provider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
"http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize");
String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
} catch (Exception e) {
Log.e(APP, e.getMessage());
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
当我运行以下代码时,它会产生以下异常
“oauth.signpost.exception.OAuthNotAuthorizedException:授权失败(服务器回复401)。如果使用者密钥不正确或签名不匹配,就会发生这种情况。”
在此行String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
我提供了正确的“密钥”和“秘密”,Twitter是否给了我错误的密钥和秘密?
答案 0 :(得分:14)
我花了几个小时的时间。似乎您必须在Twitter应用程序开发人员面板的“设置”选项卡中为回调URL设置任何值。保持默认的空值会禁用动态回调网址。
我在网上找到的所有教程和所有信息都是空的。 Twitter长期删除了“客户端/网站”单选按钮。
此外,OAuth会检查时钟偏差。
答案 1 :(得分:8)
答案 2 :(得分:4)
** 1)**将日期和时间设置为正确的值, 这有助于解决这个问题。****
<强> 2)强>
private OAuthConsumer consumer;
private OAuthProvider provider;
...
...
...
provider = new CommonsHttpOAuthProvider (
TWITTER_REQUEST_TOKEN_URL,
TWITTER_ACCESS_TOKEN_URL,
TWITTER_AUTHORIZE_URL);
private void askOAuth() {
try {
consumer = new CommonsHttpOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
provider = new CommonsHttpOAuthProvider("http://twitter.com/oauth/request_token",
"http://twitter.com/oauth/access_token",
"http://twitter.com/oauth/authorize");
provider.setOAuth10a(true);
String authUrl = provider.retrieveRequestToken(consumer, CALLBACK_URL);
Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
} catch (Exception e) {
Log.e(APP, e.getMessage());
Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show();
}
}
3)您的Twitter应用是否配置为浏览器? 尝试使用此键:
sdOjEI2cOxzTLHMCCMmuQ
biI3oxIBX2QMzUIVaW1wVAXygbynuS80pqSliSDTc
答案 3 :(得分:2)
使用https代替提供商中的http
答案 4 :(得分:1)
终于完成了,看看以下帖子
答案 5 :(得分:1)
是的totramon是正确的...如果您只在身份验证问题时遇到问题,则可能需要设置设备时间。我遇到了同样的问题,只用这个解决方案解决了。此外,如果您使用旧的twitter api,则需要将其更改为稳定版api(2.1.4)。您可以从以下链接中找到:
http://twitter4j.org/en/index.html
享受..