Hir*_*ral 6 android login twitter4j twitter-oauth
我试过的:
我已经在twitter上注册了一个应用程序并获得了Consumer Key和Secret.Even我有各种代码可以通过twitter登录.这些是我试过的:
http://thetechnib.blogspot.com/2011/01/android-sign-in-with-twitter.html
[此链接已死,您可以在此处查看存档]
http://www.android10.org/index.php/articleslibraries/291-twitter-integration-in-your-android-application
我遇到的问题:
直到现在,上面的代码带我到twitter登录,让我登录并有一个PIN来完成登录过程.但我不知道如何使用它来让我的应用程序工作.我检查了整个代码,但没有发现任何相关的销.
其次,当我在Twitter上注册我的应用程序时,它要求回拨URL但是因为它写的是它真的不需要,我跳过指定.(即使我不知道应该是什么!)
因此,我在我的应用程序中将null作为CallbackURL.
任何人都可以建议我,我如何使用此PIN完成登录过程并让用户回到我的应用程序的主要活动?它是引起问题的回调网址还是我做错了的其他事情?
请回复.任何帮助appriciated!谢谢.
编辑:
正如Frankenstein建议的那样,我在github.com/ddewaele/AndroidTwitterSample/downloads上尝试了代码
我添加了我的消费者密钥和消费者密钥以及回调网址:
public static final String OAUTH_CALLBACK_SCHEME= "x-oauthflow-twitter";
public static final String OAUTH_CALLBACK_HOST= "callback";
public static final String OAUTH_CALLBACK_URL= OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;
Run Code Online (Sandbox Code Playgroud)
但它给了我这个错误:
logcat的:
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): Error during OAUth retrieve request token
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): oauth.signpost.exception.OAuthNotAuthorizedException: Authorization failed (server replied with a 401). This can happen if the consumer key was not correct or the signatures did not match.
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.handleUnexpectedResponse(AbstractOAuthProvider.java:239)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.retrieveToken(AbstractOAuthProvider.java:189)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at oauth.signpost.AbstractOAuthProvider.retrieveRequestToken(AbstractOAuthProvider.java:69)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at com.ecs.android.sample.twitter.OAuthRequestTokenTask.doInBackground(OAuthRequestTokenTask.java:55)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at com.ecs.android.sample.twitter.OAuthRequestTokenTask.doInBackground(OAuthRequestTokenTask.java:1)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at android.os.AsyncTask$2.call(AsyncTask.java:185)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.FutureTask.run(FutureTask.java:137)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
11-29 11:56:56.249: E/com.ecs.android.sample.twitter.OAuthRequestTokenTask(3081): at java.lang.Thread.run(Thread.java:1096)
Run Code Online (Sandbox Code Playgroud)
当我点击TWEET按钮时,也会显示黑屏,而不是让我登录twitter的屏幕.
哦,我会疯了......两天以来一直在努力!:( 请帮忙.
这是因为您的应用已注册为桌面客户端.要覆盖回调URL,您的应用需要注册为浏览器客户端.
尝试在https://dev.twitter.com/apps/[appid]/settings>回调网址上配置虚拟回调网址(http://example.com/或其他任何内容),您的应用将被识别为浏览器客户.
然后尝试@Frankenstein或@jackn224代码.
首先,您需要正确进行身份验证:
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);
startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl)));
}catch(Exception e){
Log.e(TAG,e+"");
}
Run Code Online (Sandbox Code Playgroud)
需要在Manifest文件中设置CALLBACK_URL的必需项(请参阅Frankenstein的答案).上面的代码开始意图在Twitter的服务器上执行授权.回调信息是必需的,因此意图知道授权程序后要返回的应用程序.
然后我们需要在Twitter上进行身份验证后处理应用程序的返回:
@Override
public void onResume(){
super.onResume();
if (this.getIntent()!=null && this.getIntent().getData()!=null){
Uri uri = this.getIntent().getData();
//handle returning from authenticating the user
if (uri != null && uri.toString().startsWith(CALLBACK_URL)) {
String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER);
String token = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_TOKEN);
try {
Twitter t = new TwitterFactory().getInstance();
t.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
// Get Access Token and store it
rToken = new RequestToken(token, CONSUMER_SECRET);
AccessToken aToken = t.getOAuthAccessToken(rToken);
storeAccessToken(aToken);
//send to checkLoginState again since we have authorization now!
checkLoginState();
} catch (Exception e) {
Log.e(TAG, e+"");
}
}
}
}//end onResume
Run Code Online (Sandbox Code Playgroud)
此代码从返回的意图中获取数据,其中包括获取授权令牌的信息."storeAccessToken(aToken)"是我写的一个简短的方法,它将令牌存储在应用程序的首选项中,这样我们就不需要在每次打开应用程序时重新授权.
现在我们有了一个授权令牌,我们可以用它来授权一个Twitter实例:
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
twitter.setOAuthAccessToken(aToken);
Run Code Online (Sandbox Code Playgroud)
上面的变量"twitter"现在已经过授权,可以做到.
你应该在你的活动清单中写回调
<activity android:name="com.apps.twitter.PrepareRequestTokenActivity"
android:launchMode="singleTask" android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:screenOrientation="portrait">
<intent-filter>
<category android:name="android.intent.category.LAUNCHER" />
</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="x-oauthflow-twitter" android:host="callback" />
</intent-filter>
</activity>
Run Code Online (Sandbox Code Playgroud)
并在常量文件中
final public static String CALLBACK_SCHEME = "x-oauthflow-twitter";
final public static String CALLBACK_URL = CALLBACK_SCHEME + "://callback";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17490 次 |
| 最近记录: |