Hi All, Twitter4j OAuth for Android example by Mukesh,this example would help you to understand the usage of Intent after succesfully authentication using OAuth in Android.
make use of it and enjoy.. About : OAuth OAuth is an open protocol that allows users to hand out tokens instead of usernames and passwords to their data hosted by a given service provider. With Twitter finally deciding to deprecate the existing Basic Authentication by June, most of the apps would have to implement OAuth for Twitter. While implementing OAuth for Twitter on Android platform, I came across hell of out of tutorials and blogs, some might gives different ways of using OAuth. below is the example where i have tried the easiest way to implement Twitter4j and the challenges you may face. Step 1: First step for creating the solution is registering an app with Twitter. You can do that by filling in details at this URL: Twitter. Some basic info like Application icon, App name etc are needed. The two most important details to be provided are, type of Application and Callback URL. Select type of application as "Browser". Now callback url could be any valid url. Default Action should be : Select as "Read and Write" Once you successfully fill up all the details, you would get "Consumer Key" and "Consumer Secret" from Twitter. These are the keys Twitter uses for identifying your app so note it down carefully. Step 2: Download signpost-commonshttp4-1.2.jar , signpost-core-1.2.jar, twitter4j-core-2.1.0.jar file and add your project libs. I'm using "signpost-commonshttp4" and "signpost-core" open-source libraries for implementation. Step3: Create a Android Application, Add the above downloaded jar files into your projects, add internet permissions to your project manifest file. Below is the code which can be reuse. package com.sogeti.msl; import java.sql.Date; import oauth.signpost.OAuthProvider; import oauth.signpost.basic.DefaultOAuthProvider; import oauth.signpost.commonshttp.CommonsHttpOAuthConsume r; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.widget.Toast; import twitter4j.Twitter; import twitter4j.TwitterFactory; import twitter4j.http.AccessToken; import android.widget.Button; import android.widget.TextView; import com.sogeti.msl.R; public class OAuthForTwitter extends Activity { private CommonsHttpOAuthConsumer httpOauthConsumer; private OAuthProvider httpOauthprovider; publicfinalstatic String consumerKey = "sdOjEI2cOxzTLHMCCMmuQ"; publicfinalstatic String consumerSecret = "biI3oxIBX2QMzUIVaW1wVAXygbynuS80pqSliSDTc"; privatefinal String CALLBACKURL = "myapp://mainactivity"; private Twitter twitter; private TextView tweetTextView; private Button buttonLogin; // static Twitter jtwit; /* * * OnCreate method for class */ @Override publicvoid onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); tweetTextView = (TextView)findViewById(R.id.tweet); buttonLogin = (Button)findViewById(R.id.ButtonLogin); setContentView(R.layout.main); doOauth(); } /** * Opens the browser using signpost jar with application specific * consumerkey and consumerSecret. */ privatevoid doOauth() { try { httpOauthConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret); httpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/ request_token", "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); String authUrl = httpOauthprovider.retrieveRequestToken(httpOauthConsumer, CALLBACKURL); this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); } catch (Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } } /** * After use authorizes this is the function where we get back callbac with * user specific token and secret token. You might want to store this token * for future use. */ /* @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); Uri uri = intent.getData(); //Check if you got NewIntent event due to Twitter Call back only if (uri != null && uri.toString().startsWith(CALLBACKURL)) { String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_V ERIFIER); Toast.makeText(this, verifier, Toast.LENGTH_LONG).show(); try { // this will populate token and token_secret in consumer httpOauthprovider.retrieveAccessToken(httpOauthCon sumer, verifier); String userKey = httpOauthConsumer.getToken(); String userSecret = httpOauthConsumer.getConsumerSecret(); Toast.makeText(this, userKey, Toast.LENGTH_LONG).show(); Toast.makeText(this, userSecret, Toast.LENGTH_LONG).show(); AccessToken accessToken = new AccessToken(httpOauthConsumer.getToken(), httpOauthConsumer.getConsumerSecret()); twitter = new TwitterFactory().getInstance(); twitter.setOAuthConsumer(consumerKey, consumerSecret); twitter.setOAuthAccessToken(accessToken); // create a tweet Date d = new Date(System.currentTimeMillis()); String tweet = "#OAuth working! " + d.toLocaleString(); // send the tweet twitter.updateStatus(tweet); // feedback for the user... Toast.makeText(this, tweet, Toast.LENGTH_LONG).show(); //twitter.updateStatus("From My Android..."); /* List<Status> statuses = twitter.getHomeTimeline(); System.out.println("Friend Status Updates"); for (Status status : statuses) { System.out.println(status.getUser().getName() + " said " + status.getText()); Toast.makeText(this, status.getUser().getName() + " said " + status.getText(), Toast.LENGTH_LONG).show(); } } catch(Exception e){ Log.d("", e.getMessage()); Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } } } */ @Override protectedvoid onNewIntent(Intent intent) { super.onNewIntent(intent); Uri uri = intent.getData(); if (uri != null && uri.toString().startsWith(CALLBACKURL)) { String verifier = uri.getQueryParameter(oauth.signpost.OAuth.OAUTH_VERIFIER); try { // this will populate token and token_secret in consumer httpOauthprovider.retrieveAccessToken(httpOauthConsumer, verifier); // TODO: you might want to store token and token_secret in you app settings!!!!!!!! AccessToken a = new AccessToken(httpOauthConsumer.getToken(), httpOauthConsumer.getTokenSecret()); // initialize Twitter4J twitter = new TwitterFactory().getInstance(); twitter.setOAuthConsumer(consumerKey, consumerSecret); twitter.setOAuthAccessToken(a); // create a tweet Date d = new Date(System.currentTimeMillis()); String tweet = "#OAuth working! " + d.toLocaleString(); // send the tweet twitter.updateStatus(tweet); // feedback for the user... tweetTextView.setText(tweet); Toast.makeText(this, tweet, Toast.LENGTH_LONG).show(); buttonLogin.setVisibility(Button.GONE); } catch (Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } } } privatevoid askOAuth() { try { httpOauthConsumer = new CommonsHttpOAuthConsumer(consumerKey, consumerSecret); httpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/ request_token", "http://twitter.com/oauth/access_token", "http://twitter.com/oauth/authorize"); String authUrl = httpOauthprovider.retrieveRequestToken(httpOauthConsumer, CALLBACKURL); Toast.makeText(this, "Please authorize this app!", Toast.LENGTH_LONG).show(); this.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(authUrl))); } catch (Exception e) { Toast.makeText(this, e.getMessage(), Toast.LENGTH_LONG).show(); } } } Your Android.mainfest.xml file should looks like this. <? xmlversion="1.0"encoding="utf-8"?> <manifestxmlns:android="http://schemas.android.com/apk/res/android" package="com.sogeti.msl" android:versionCode="1" android:versionName="1.0"> <applicationandroid:icon="@drawable/icon"android:label="@string/ app_name"android:debuggable = "true"> <activityandroid:name=".OAuthForTwitter" android:label="@string/app_name"android:launchMode="singleInstance"> <intent-filter> <actionandroid:name="android.intent.action.MAIN"/> <categoryandroid:name="android.intent.category.LAUNCHER"/> </intent-filter> <intent-filter> <actionandroid:name="android.intent.action.VIEW"/> <categoryandroid:name="android.intent.category.DEFAULT"/> <categoryandroid:name="android.intent.category.BROWSABLE"/> <dataandroid:scheme="myapp"android:host="mainactivity"/> </intent-filter> </activity> </application> <uses-sdkandroid:minSdkVersion="7"/> <uses-permissionandroid:name="android.permission.INTERNET"></uses- permission> </manifest> Common Errors: You may get the Userlogin/Password is incorrect, this is due to the wrong way of creating the ConsumerKey. log on to https://twitter.com/apps/new and get it corrected or create a new key.make sure you follow the above instuctions. Please get back to me for any furhter information. -- Twitter developer documentation and resources: http://dev.twitter.com/doc API updates via Twitter: http://twitter.com/twitterapi Issues/Enhancements Tracker: http://code.google.com/p/twitter-api/issues/list Change your membership to this group: http://groups.google.com/group/twitter-development-talk