Saturday, 15 February 2014

android - How to redirect my application after authentication using twitter -



android - How to redirect my application after authentication using twitter -

i newbie android, , found code allows me authenticate using twitter api, problem here application redirecting web page (the callback url) , it's working fine, want redirect self (after authentication phase).

here code:

package com.androidhive.twitterconnect; import com.androidhive.twitterconnect.r; import twitter4j.twitter; import twitter4j.twitterexception; import twitter4j.twitterfactory; import twitter4j.user; import twitter4j.auth.accesstoken; import twitter4j.auth.requesttoken; import twitter4j.conf.configuration; import twitter4j.conf.configurationbuilder; import android.app.activity; import android.app.progressdialog; import android.content.intent; import android.content.sharedpreferences; import android.content.sharedpreferences.editor; import android.content.pm.activityinfo; import android.net.uri; import android.os.asynctask; import android.os.bundle; import android.os.strictmode; import android.text.html; import android.util.log; import android.view.view; import android.widget.button; import android.widget.edittext; import android.widget.textview; import android.widget.toast; public class mainactivity extends activity { // constants /** * register here app https://dev.twitter.com/apps/new , * consumer key , secret * */ static string twitter_consumer_key = "****************"; static string twitter_consumer_secret = "****************************************"; // preference constants static string preference_name = "twitter_oauth"; static final string pref_key_oauth_token = "oauth_token"; static final string pref_key_oauth_secret = "oauth_token_secret"; static final string pref_key_twitter_login = "istwitterlogedin"; static final string twitter_callback_url = "http://google.com"; // twitter oauth urls static final string url_twitter_auth = "auth_url"; static final string url_twitter_oauth_verifier = "oauth_verifier"; static final string url_twitter_oauth_token = "oauth_token"; // login button button btnlogintwitter; // update status button button btnupdatestatus; // logout button button btnlogouttwitter; // edittext update edittext txtupdate; // lbl update textview lblupdate; textview lblusername; // progress dialog progressdialog pdialog; // twitter private static twitter twitter; private static requesttoken requesttoken; // shared preferences private static sharedpreferences msharedpreferences; // net connection detector private connectiondetector cd; // alert dialog manager alertdialogmanager alert = new alertdialogmanager(); @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); setrequestedorientation(activityinfo.screen_orientation_portrait); strictmode.threadpolicy policy = new strictmode.threadpolicy.builder().permitall().build(); strictmode.setthreadpolicy(policy); cd = new connectiondetector(getapplicationcontext()); // check if net nowadays if (!cd.isconnectingtointernet()) { // net connection not nowadays alert.showalertdialog(mainactivity.this, "internet connection error", "please connect working net connection", false); // stop executing code homecoming return; } // check if twitter keys set if(twitter_consumer_key.trim().length() == 0 || twitter_consumer_secret.trim().length() == 0){ // net connection not nowadays alert.showalertdialog(mainactivity.this, "twitter oauth tokens", "please set twitter oauth tokens first!", false); // stop executing code homecoming return; } // ui elements btnlogintwitter = (button) findviewbyid(r.id.btnlogintwitter); btnupdatestatus = (button) findviewbyid(r.id.btnupdatestatus); btnlogouttwitter = (button) findviewbyid(r.id.btnlogouttwitter); txtupdate = (edittext) findviewbyid(r.id.txtupdatestatus); lblupdate = (textview) findviewbyid(r.id.lblupdate); lblusername = (textview) findviewbyid(r.id.lblusername); // shared preferences msharedpreferences = getapplicationcontext().getsharedpreferences( "mypref", 0); /** * twitter login button click event phone call logintotwitter() function * */ btnlogintwitter.setonclicklistener(new view.onclicklistener() { @override public void onclick(view arg0) { // phone call login twitter function logintotwitter(); } }); /** * button click event update status, phone call updatetwitterstatus() * function * */ btnupdatestatus.setonclicklistener(new view.onclicklistener() { @override public void onclick(view v) { // phone call update status function // status edittext string status = txtupdate.gettext().tostring(); // check blank text if (status.trim().length() > 0) { // update status new updatetwitterstatus().execute(status); } else { // edittext empty toast.maketext(getapplicationcontext(), "please come in status message", toast.length_short) .show(); } } }); /** * button click event logout twitter * */ btnlogouttwitter.setonclicklistener(new view.onclicklistener() { @override public void onclick(view arg0) { // phone call logout twitter function logoutfromtwitter(); } }); /** if conditions tested 1 time * redirected twitter page. parse uri oauth * verifier * */ if (!istwitterloggedinalready()) { uri uri = getintent().getdata(); if (uri != null && uri.tostring().startswith(twitter_callback_url)) { // oauth verifier string verifier = uri .getqueryparameter(url_twitter_oauth_verifier); seek { // access token accesstoken accesstoken = twitter.getoauthaccesstoken( requesttoken, verifier); // shared preferences editor e = msharedpreferences.edit(); // after getting access token, access token secret // store them in application preferences e.putstring(pref_key_oauth_token, accesstoken.gettoken()); e.putstring(pref_key_oauth_secret, accesstoken.gettokensecret()); // store login status - true e.putboolean(pref_key_twitter_login, true); e.commit(); // save changes log.e("twitter oauth token", "> " + accesstoken.gettoken()); // hide login button btnlogintwitter.setvisibility(view.gone); // show update twitter lblupdate.setvisibility(view.visible); txtupdate.setvisibility(view.visible); btnupdatestatus.setvisibility(view.visible); btnlogouttwitter.setvisibility(view.visible); // getting user details twitter // getting name long userid = accesstoken.getuserid(); user user = twitter.showuser(userid); string username = user.getname(); // displaying in xml ui lblusername.settext(html.fromhtml("<b>welcome " + username + "</b>")); } grab (exception e) { // check log login errors log.e("twitter login error", "> " + e.getmessage()); } } } } /** * function login twitter * */ private void logintotwitter() { // check if logged in if (!istwitterloggedinalready()) { configurationbuilder builder = new configurationbuilder(); builder.setoauthconsumerkey(twitter_consumer_key); builder.setoauthconsumersecret(twitter_consumer_secret); configuration configuration = builder.build(); twitterfactory mill = new twitterfactory(configuration); twitter = factory.getinstance(); seek { requesttoken = twitter .getoauthrequesttoken(twitter_callback_url); this.startactivity(new intent(intent.action_view, uri .parse(requesttoken.getauthenticationurl()))); } grab (twitterexception e) { e.printstacktrace(); } } else { // user logged twitter toast.maketext(getapplicationcontext(), "already logged twitter", toast.length_long).show(); } } /** * function update status * */ class updatetwitterstatus extends asynctask<string, string, string> { /** * before starting background thread show progress dialog * */ @override protected void onpreexecute() { super.onpreexecute(); pdialog = new progressdialog(mainactivity.this); pdialog.setmessage("updating twitter..."); pdialog.setindeterminate(false); pdialog.setcancelable(false); pdialog.show(); } /** * getting places json * */ protected string doinbackground(string... args) { log.d("tweet text", "> " + args[0]); string status = args[0]; seek { configurationbuilder builder = new configurationbuilder(); builder.setoauthconsumerkey(twitter_consumer_key); builder.setoauthconsumersecret(twitter_consumer_secret); // access token string access_token = msharedpreferences.getstring(pref_key_oauth_token, ""); // access token secret string access_token_secret = msharedpreferences.getstring(pref_key_oauth_secret, ""); accesstoken accesstoken = new accesstoken(access_token, access_token_secret); twitter twitter = new twitterfactory(builder.build()).getinstance(accesstoken); // update status twitter4j.status response = twitter.updatestatus(status); log.d("status", "> " + response.gettext()); } grab (twitterexception e) { // error in updating status log.d("twitter update error", e.getmessage()); } homecoming null; } /** * after completing background task dismiss progress dialog , show * info in ui utilize runonuithread(new runnable()) update ui * background thread, otherwise error * **/ protected void onpostexecute(string file_url) { // dismiss dialog after getting products pdialog.dismiss(); // updating ui background thread runonuithread(new runnable() { @override public void run() { toast.maketext(getapplicationcontext(), "status tweeted successfully", toast.length_short) .show(); // clearing edittext field txtupdate.settext(""); } }); } } /** * function logout twitter * clear application shared preferences * */ private void logoutfromtwitter() { // clear shared preferences editor e = msharedpreferences.edit(); e.remove(pref_key_oauth_token); e.remove(pref_key_oauth_secret); e.remove(pref_key_twitter_login); e.commit(); // after take appropriate action // showing hiding/showing buttons 1 time again // might not needed code btnlogouttwitter.setvisibility(view.gone); btnupdatestatus.setvisibility(view.gone); txtupdate.setvisibility(view.gone); lblupdate.setvisibility(view.gone); lblusername.settext(""); lblusername.setvisibility(view.gone); btnlogintwitter.setvisibility(view.visible); } /** * check user logged in application using twitter login flag * fetched shared preferences * */ private boolean istwitterloggedinalready() { // homecoming twitter login status shared preferences homecoming msharedpreferences.getboolean(pref_key_twitter_login, false); } protected void onresume() { super.onresume(); } }

thanks in advance.

i hope have set callback url in application page in twitter. did case declaring activity twitteractivity. code snippet twitteractivity

public class twitteractivity extends activity { private webview webview; private progressdialog progressbar; private string url; /** called when activity first created. */ @override public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); requestwindowfeature(window.feature_no_title); setcontentview(r.layout.twitter_activity); intent intent = getintent(); bundle extras = intent.getextras(); url = extras.getstring("authurl"); webview = (webview) findviewbyid(r.id.twitter_webview); webview.setscrollbarstyle(webview.scrollbars_outside_overlay); progressbar = progressdialog.show(twitteractivity.this, "please wait", "loading..."); webview.setwebviewclient(new webviewclient() { @override public boolean shouldoverrideurlloading(webview view, string url) { intent returnintent = new intent(); returnintent.putextra("returnurl", url); setresult(result_ok, returnintent); finish(); homecoming true; } @override public void onpagefinished(webview view, string url) { log.d("tag", "finished loading url: " + url); if (progressbar.isshowing()) { progressbar.dismiss(); } } }); webview.loadurl(url); } }

the method logintotwitter() given below,

private void logintotwitter() { // check if logged in if (!istwitterloggedinalready()) { new twitterloginmanager().execute(this); } else { // user logged twitter toast.maketext(getapplicationcontext(), "already logged twitter", toast.length_long).show(); tweet(); // logged in, can tweet } }

in mainactivity utilize asynctask fetching request token . because getoauthrequesttoken(twitter_callback_url) method makes http request. calling ui thread makes unexpected error. here goes asynctask class used purpose.

class twitterloginmanager extends asynctask<activity, void, void> { string authurl; activity caller; /** * before starting background thread show progress dialog * */ @override protected void onpreexecute() { super.onpreexecute(); pdialog = new progressdialog(mainactivity.this); pdialog.setmessage("please wait..."); pdialog.setindeterminate(false); pdialog.setcancelable(false); pdialog.show(); } @override protected void doinbackground(activity... params) { // todo auto-generated method stub caller = params[0]; configurationbuilder builder = new configurationbuilder(); builder.setoauthconsumerkey(twitter_consumer_key); builder.setoauthconsumersecret(twitter_consumer_secret); configuration configuration = builder.build(); twitterfactory mill = new twitterfactory(configuration); twitter = factory.getinstance(); seek { requesttoken = twitter .getoauthrequesttoken(twitter_callback_url); authurl = requesttoken.getauthenticationurl(); } grab (twitterexception e) { log.d("tag", "twitter exception: " + e.getmessage()); } homecoming null; } /** * after completing background task dismiss progress dialog , show * info in ui utilize runonuithread(new runnable()) update ui * background thread, otherwise error * **/ protected void onpostexecute(void ignorethis) { pdialog.dismiss(); intent intent = new intent(caller, twitteractivity.class); intent.putextra("authurl", authurl); caller.startactivityforresult(intent, 1); } }

also add together callback given below in mainactivity,

@override protected void onactivityresult(int requestcode, int resultcode, intent data) { if (requestcode == 1) { if(resultcode == result_ok){ string url=data.getstringextra("returnurl"); log.d("tag","return: "+url); getaccesstokenfortwitter(uri.parse(url)); } } }

for getting accesstoken twitter, method given below,

private void getaccesstokenfortwitter(uri uri) { if (!istwitterloggedinalready()) { log.d("msg", "uri: " + uri); if (uri != null && uri.tostring().startswith(twitter_callback_url)) { // oauth verifier string verifier = uri .getqueryparameter(url_twitter_oauth_verifier); seek { // access token accesstoken = twitter.getoauthaccesstoken(requesttoken, verifier); log.d("msg", "access token: " + accesstoken); // shared preferences editor e = logininfosharedpreferences.edit(); // after getting access token, access token secret // store them in application preferences e.putstring(pref_key_oauth_token, accesstoken.gettoken()); e.putstring(pref_key_oauth_secret, accesstoken.gettokensecret()); // store login status - true e.putboolean(pref_key_twitter_login, true); e.commit(); // save changes log.d("msg", "token > " + accesstoken.gettoken()); // getting user details twitter // getting name long userid = accesstoken.getuserid(); user user = twitter.showuser(userid); string username = user.getname(); log.d("tag", "user name: " + username); tweet(); } grab (exception e) { // check log login errors log.d("tag", "login error > " + e.getcause().tostring()); } } } }

from tweet() method, update status twitter using updatetwitterstatus class,

private void tweet() { string status = "your tweet"; // check blank text if (status.trim().length() > 0) { // update status new updatetwitterstatus().execute(status); } else { /* in case if utilize edittext, status might necessary checking empty tweet. */ toast.maketext(getapplicationcontext(), "please come in status", toast.length_short).show(); } }

android twitter

No comments:

Post a Comment