我正在为我的Android应用设置OAuth。为了测试它,我做了以下几步:
1.将signpost-core-1.2.1.1.jar和signpost-commonshttp4-1.2.1.1.jar添加到我的项目中。
2.添加变量"CommonsHttpOAuthConsumer consumer"和"CommonsHttpOAuthProvider provider"。
3.当按钮被点击时,执行以下操作:
所以,以下是有效的: 1)我得到了一个requestToken和一个requestSecret。 2)我得到了oauthUrl。 3)我被导向浏览器页面授权我的应用程序 4)我被重定向到我的应用程序。 5)我得到了验证器。 但是调用retrieveAccessToken(consumer,verifier)失败,并显示OAuthCommunicationException,指出“与服务提供商的通信失败:null”。
有人知道可能的原因吗?有些人似乎在获取requestToken时遇到问题,但这很好。我想知道是否我的应用程序也包括我需要进行多部分上传的apache-mime4j-0.6.jar和httpmime-4.0.1.jar,这可能是一个问题。
consumer = new CommonsHttpOAuthConsumer("xxx", "yyy");
provider = new CommonsHttpOAuthProvider("https://api.twitter.com/oauth/request_token",
"https://api.twitter.com/oauth/access_token",
"https://api.twitter.com/oauth/authorize");
oauthUrl = provider.retrieveRequestToken(consumer, "myapp://twitterOauth");
persistOAuthData();
this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(oauthUrl)));
persistOAuthData()的功能如下:
protected void persistOAuthData()
{
try
{
FileOutputStream providerFOS = this.openFileOutput("provider.dat", MODE_PRIVATE);
ObjectOutputStream providerOOS = new ObjectOutputStream(providerFOS);
providerOOS.writeObject(this.provider);
providerOOS.close();
FileOutputStream consumerFOS = this.openFileOutput("consumer.dat", MODE_PRIVATE);
ObjectOutputStream consumerOOS = new ObjectOutputStream(consumerFOS);
consumerOOS.writeObject(this.consumer);
consumerOOS.close();
}
catch (Exception e) { }
}
因此,在打开浏览器之前,消费者和提供者都已经保存好了,就像这里所描述的一样。
在onResume()方法中,我加载提供者和消费者数据,并执行以下操作:
Uri uri = this.getIntent().getData();
if (uri != null && uri.getScheme().equals("myapp") && uri.getHost().equals("twitterOauth"))
{
verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
if (!verifier.equals(""))
{
loadOauthData();
try
{
provider.retrieveAccessToken(consumer, verifier);
}
catch (OAuthMessageSignerException e) {
e.printStackTrace();
} catch (OAuthNotAuthorizedException e) {
e.printStackTrace();
} catch (OAuthExpectationFailedException e) {
e.printStackTrace();
} catch (OAuthCommunicationException e) {
e.printStackTrace();
}
}
}
所以,以下是有效的: 1)我得到了一个requestToken和一个requestSecret。 2)我得到了oauthUrl。 3)我被导向浏览器页面授权我的应用程序 4)我被重定向到我的应用程序。 5)我得到了验证器。 但是调用retrieveAccessToken(consumer,verifier)失败,并显示OAuthCommunicationException,指出“与服务提供商的通信失败:null”。
有人知道可能的原因吗?有些人似乎在获取requestToken时遇到问题,但这很好。我想知道是否我的应用程序也包括我需要进行多部分上传的apache-mime4j-0.6.jar和httpmime-4.0.1.jar,这可能是一个问题。
consumer.setOkenWithSecret
中设置的requestToken
是oauthUrl
吗?我能问一下tokenSecret
是什么吗?谢谢 :) - dumbfingersrequestToken
是通过使用consumer.getToken()
检索的吗? - dumbfingers