Android, Webkit and oAuth

Put problem concerning Views, Layouts and other XML-Resources (like AndroidManifest) here.

Android, Webkit and oAuth

Postby digitalspaghetti » Sat Jan 10, 2009 4:14 pm

Hi there,

I'm writing an android app for Brightkite and I would like to use their oAuth service to authorise the application.

I've successfully got the application to load up a webview to the site, however when I try log in, it instead invokes the browser on login and takes me to the mobile site.

Within my view, I have set the UA as a desktop browser, so if I can keep it within this it may work. Below are my two classes for the app, and any help would be appreciated.

Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package org.ifies.brightroid;
  3.  
  4.  
  5.  
  6. import android.app.Activity;
  7.  
  8. import android.content.Intent;
  9.  
  10. import android.os.Bundle;
  11.  
  12. import android.util.Log;
  13.  
  14. import android.view.View;
  15.  
  16. import android.widget.Button;
  17.  
  18.  
  19.  
  20. import java.net.URL;
  21.  
  22. import net.oauth.OAuth;
  23.  
  24. import net.oauth.OAuthAccessor;
  25.  
  26. import net.oauth.OAuthConsumer;
  27.  
  28. import net.oauth.OAuthMessage;
  29.  
  30. import net.oauth.OAuthServiceProvider;
  31.  
  32. import net.oauth.client.OAuthClient;
  33.  
  34. import net.oauth.client.httpclient4.HttpClient4;
  35.  
  36.  
  37.  
  38. import org.ifies.brightroid.oAuthAuth;
  39.  
  40.  
  41.  
  42. public class BrightRoid extends Activity {
  43.  
  44.     /** Called when the activity is first created. */
  45.  
  46.         private static final String BRIGHTKITE_AUTHORIZE_URL = "http://brightkite.com/oauth/authorize?oauth_token=";
  47.  
  48.        
  49.  
  50.         private static final String OAUTH_REQUEST = "http://brightkite.com/oauth/request_token";
  51.  
  52.         private static final String OAUTH_AUTHORIZE = "http://brightkite.com/oauth/authorize";
  53.  
  54.         private static final String OAUTH_ACCESS = "http://brightkite.com/oauth/access_token";
  55.  
  56.  
  57.  
  58.         private static String CONSUMER_KEY = "";
  59.  
  60.         private static String CONSUMER_SECRET = "";
  61.  
  62.  
  63.  
  64.         private OAuthClient httpClient;
  65.  
  66.        
  67.  
  68.         private static Button exitButton;
  69.  
  70.         private static Button loginButton;
  71.  
  72.        
  73.  
  74.         /** Called when the activity is first created. */
  75.  
  76.     @Override
  77.  
  78.     public void onCreate(Bundle savedInstanceState) {
  79.  
  80.         super.onCreate(savedInstanceState);
  81.  
  82.         setContentView(R.layout.loginscreen);
  83.  
  84.        
  85.  
  86.         exitButton = (Button) findViewById(R.id.button_exit);
  87.  
  88.         exitButton.setOnClickListener(new View.OnClickListener(){
  89.  
  90.                         @Override
  91.  
  92.                         public void onClick(View v) {
  93.  
  94.                                 finish();
  95.  
  96.                         }
  97.  
  98.         });
  99.  
  100.        
  101.  
  102.         loginButton = (Button) findViewById(R.id.button_login);
  103.  
  104.         loginButton.setOnClickListener(new View.OnClickListener(){
  105.  
  106.                 @Override
  107.  
  108.                 public void onClick(View v) {
  109.  
  110.                         try {
  111.  
  112.                                 doLoginAuth();
  113.  
  114.                         } catch (Exception e) {
  115.  
  116.                                 Log.e("Error", e.getMessage().toString());
  117.  
  118.                         }
  119.  
  120.                 }
  121.  
  122.         });
  123.  
  124.     }
  125.  
  126.    
  127.  
  128.     @Override
  129.  
  130.     protected void onResume() {
  131.  
  132.         super.onResume();
  133.  
  134.     }
  135.  
  136.  
  137.  
  138.     @Override
  139.  
  140.     protected void onPause() {
  141.  
  142.         super.onPause();
  143.  
  144.     }
  145.  
  146.    
  147.  
  148.     public void doLoginAuth() throws Exception {
  149.  
  150.         final OAuthServiceProvider provider = new OAuthServiceProvider(
  151.  
  152.                         OAUTH_REQUEST,
  153.  
  154.                         OAUTH_AUTHORIZE,
  155.  
  156.                         OAUTH_ACCESS);
  157.  
  158.         final OAuthConsumer consumer = new OAuthConsumer(null // callback URL
  159.  
  160.                 , CONSUMER_KEY // consumer key
  161.  
  162.                 , CONSUMER_SECRET // consumer secret
  163.  
  164.                 , provider);
  165.  
  166.         final OAuthAccessor accessor = new OAuthAccessor(consumer);
  167.  
  168.        
  169.  
  170.         httpClient = new OAuthClient(new HttpClient4() {
  171.  
  172.  
  173.  
  174.                         public HttpClient4 getHttpClient(URL server) {
  175.  
  176.                                 return new HttpClient4();
  177.  
  178.                         }
  179.  
  180.                 });
  181.  
  182.        
  183.  
  184.         try {
  185.  
  186.                         httpClient.getRequestToken(accessor);
  187.  
  188.                         // manually set the access token to the request token...not sure
  189.  
  190.                         // why
  191.  
  192.                         accessor.accessToken = accessor.requestToken;
  193.  
  194.  
  195.  
  196.                         if (accessor.accessToken != "") {
  197.  
  198.                                 Intent i = new Intent(BrightRoid.this, oAuthAuth.class);
  199.  
  200.                                 i.putExtra("BRIGHTKITE_AUTHORIZE_URL", BRIGHTKITE_AUTHORIZE_URL);
  201.  
  202.                                 i.putExtra("request_token", accessor.requestToken.toString());
  203.  
  204.                                 BrightRoid.this.startActivity(i);                              
  205.  
  206.                         }
  207.  
  208.                        
  209.  
  210.                 } catch (Exception e) {
  211.  
  212.                         Log.e("oAuth Error", e.getMessage().toString());
  213.  
  214.                 }      
  215.  
  216.     }
  217.  
  218. }
Parsed in 0.046 seconds, using GeSHi 1.0.8.4


Syntax: [ Download ] [ Hide ]
Using java Syntax Highlighting
  1.  
  2. package org.ifies.brightroid;
  3.  
  4.  
  5.  
  6. import android.app.Activity;
  7.  
  8. import android.os.Bundle;
  9.  
  10. import android.view.View;
  11.  
  12. import android.webkit.WebView;
  13.  
  14. import android.webkit.WebSettings;
  15.  
  16. import android.widget.Button;
  17.  
  18. import android.util.Log;
  19.  
  20.  
  21.  
  22. public class oAuthAuth extends Activity {
  23.  
  24.        
  25.  
  26.         private String url;
  27.  
  28.         private String request_token;
  29.  
  30.        
  31.  
  32.         private Button closeAuth;
  33.  
  34.        
  35.  
  36.         @Override
  37.  
  38.         public void onCreate(Bundle savedInstanceState) {
  39.  
  40.         super.onCreate(savedInstanceState);
  41.  
  42.        
  43.  
  44.         setContentView(R.layout.oauth_auth);
  45.  
  46.        
  47.  
  48.         closeAuth = (Button) findViewById(R.id.button_close_auth);
  49.  
  50.         closeAuth.setOnClickListener(new View.OnClickListener(){
  51.  
  52.                         @Override
  53.  
  54.                         public void onClick(View v) {
  55.  
  56.                                 finish();
  57.  
  58.                         }
  59.  
  60.         });
  61.  
  62.        
  63.  
  64.         Bundle extras = getIntent().getExtras();
  65.  
  66.                 if(extras != null) {
  67.  
  68.                         url = (String) extras.getString("BRIGHTKITE_AUTHORIZE_URL");
  69.  
  70.                         request_token = (String) extras.getString("request_token");
  71.  
  72.                 }
  73.  
  74.        
  75.  
  76.         WebView wv;
  77.  
  78.         wv = (WebView) findViewById(R.id.wv1);
  79.  
  80.         WebSettings wv_settings = (WebSettings) wv.getSettings();
  81.  
  82.         wv_settings.setSavePassword(false);
  83.  
  84.         wv_settings.setSaveFormData(false);
  85.  
  86.                 wv_settings.setJavaScriptEnabled(true);
  87.  
  88.                 wv_settings.setSupportZoom(true);
  89.  
  90.                 wv_settings.setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
  91.  
  92.  
  93.  
  94.         wv_settings.setUserAgent(1);
  95.  
  96.         wv_settings.setSupportMultipleWindows(false);
  97.  
  98.         String request_url = url + request_token;
  99.  
  100.         Log.i("oAuth Request URL", request_url);
  101.  
  102.         wv.loadUrl(request_url);
  103.  
  104.         }
  105.  
  106. }
  107.  
  108.  
Parsed in 0.037 seconds, using GeSHi 1.0.8.4
digitalspaghetti
Freshman
Freshman
 
Posts: 6
Joined: Sun Jan 04, 2009 11:52 pm

Top

Postby digitalspaghetti » Sat Jan 10, 2009 5:21 pm

Hah, I found a solution on these very forums:

http://www.anddev.org/force_browsing_ac ... t2530.html

Seems to work well enough.
digitalspaghetti
Freshman
Freshman
 
Posts: 6
Joined: Sun Jan 04, 2009 11:52 pm

Top

Return to View, Layout & Resource Problems

Who is online

Users browsing this forum: No registered users and 8 guests