无法获得成功的Twitter登录(使用Twitter4J库)重定向回我的Android应用程序

时间:2011-12-22 22:42:03

标签: android twitter twitter-oauth twitter4j android-twitter

首先让我描述一下我的工作......

(1)我在Twitter开发者网站上注册了我的应用程序并获得了一些OAuth凭证(消费者密钥,消费者密钥,请求令牌URL等)。我尝试在此处输入回调网址作为“callback:// tweeter”(以及其他非Http网址)但页面验证失败,我收到“不是有效的网址格式”错误消息,所以我离开了这个空白。

(2)接下来,我使用我的OAuth凭据设置了我的'CommonsHttpOAuthConsumer'和'OAuthProvider'对象,并清空了回调网址,并启动了以下网络活动:

CommonsHttpOAuthConsumer consumer = new
CommonsHttpOAuthConsumer(myTwitterConsumerKey,
myTwitterConsumerSecret);
OAuthProvider provider = new
DefaultOAuthProvider(myTwitterRequestTokenUrl,
myTwitterAccessTokenUrl, myTwitterAuthorizeUrl);
String authUrl =
provider.retrieveRequestToken(consumer, "");
startActivity(new
Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));

(3)接下来,我关注已启动的网络活动(来自我的应用)并登录我的Twitter帐户(从而确认我允许该应用访问我的Twitter帐户)。

(4)最后,提交我的请求后,我被重定向到一个页面(仍然在网络活动中),祝贺我已经授权我的应用程序访问我的Twitter帐户,并在必要时给我一个引脚。

现在我想要的是,在成功授权后,我被重定向回我的应用程序(启动网络活动的活动),我在那里处理成功的授权。

我尝试了很多东西(下面介绍了几个),但每次都会变得很短暂,并且我会陷入困境。如果有人可以帮助我,让我知道我做错了什么,我将感激不尽!

以下是我尝试的两件主要内容:

(1)我尝试将我的代码中的Callback Url设置为“callback:// tweeter”(尽管在我的应用程序的Twitter注册OAuth设置中它是空白的)但是,这次,当我进行以下方法调用时...

provider.retrieveRequestToken(consumer, "callback://tweeter");

...抛出OAuthCommunicationException(包含消息:“与服务提供商的通信失败......”)。

(2)我尝试在我的应用的Twitter注册OAuth设置中将回调网址设置为Http Url(例如“http://myhost.com”)并在我的活动清单中指定intent-filter以捕获回调为如下...

<intent-filter>
<action android:name = "android.intent.action.VIEW" />
<category android:name ="android.intent.category.DEFAULT" />
<category android:name ="android.intent.category.BROWSABLE" />
<data android:scheme="http" android:host="myhost.com" />
</intent-filter>

...但在成功授权后,我会在网络活动(互联网浏览器)中重定向到 myhost.com ,而不是返回我的活动。

3 个答案:

答案 0 :(得分:3)

很高兴你在我的Twitter教程中找到答案:http://www.anddev.org/advanced-tutorials-f21/sending-a-tweet-t54389.html

对于其他人:

我将回调网址指定为“callback:// tweeter”(2个正斜杠),它应该是“callback:/// tweeter”(即3个正斜杠)。


事实上,为简化起见,它只需要“callback:///”,然后意图过滤数据节点就是:

 <data android:scheme="callback"/>

我会建议简化,因为你必须记住,如果另一个应用程序也使用它,你的应用程序会把它拿起来,所有地狱都会破坏!

答案 1 :(得分:2)

我遇到了同样的问题。解决我的问题的方法是确保在清单中设置intent过滤器时,确保你在android:scheme中使用的名称都是没有下划线的小写字母,尽管破折号很好,如下所示:

<data android:scheme="your-callback-here" />

作为一名新开发者,我偶然发现了一些事情!

答案 2 :(得分:0)

您可能会被重定向到您的应用程序

尝试解决这个问题 如果您错误地将回调URL错误地提交给您的应用程序

你必须把它放在twitter创建的应用程序回调网址:http://twitter.com/oauth/authorize?oauth_token=actualtokenhere&oauth_callback=myapp:///

它有希望对你有用:)