Created
February 21, 2014 04:55
-
-
Save garethpaul/9128995 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package com.garethpaul.teethy; | |
import org.json.JSONException; | |
import org.json.JSONObject; | |
import org.scribe.builder.ServiceBuilder; | |
import org.scribe.builder.api.TwitterApi; | |
import org.scribe.model.OAuthRequest; | |
import org.scribe.model.Response; | |
import org.scribe.model.Token; | |
import org.scribe.model.Verb; | |
import org.scribe.model.Verifier; | |
import org.scribe.oauth.OAuthService; | |
import android.os.StrictMode; | |
import android.app.Activity; | |
import android.net.Uri; | |
import android.os.Bundle; | |
import android.view.View; | |
import android.webkit.WebView; | |
import android.webkit.WebViewClient; | |
import android.widget.TextView; | |
/** | |
*Demonstrates how to use the scribe library to login with twitter. | |
* | |
*/ | |
public class MainActivity extends Activity { | |
final static String APIKEY = Null; | |
final static String APISECRET = Null; | |
final static String CALLBACK = "oauth://twitter"; | |
@Override | |
public void onCreate(Bundle savedInstanceState) { | |
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build(); | |
StrictMode.setThreadPolicy(policy); | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_main); | |
final TextView textView = (TextView)findViewById(R.id.textview); | |
final WebView webview = (WebView) findViewById(R.id.webview); | |
if(APIKEY == null || APISECRET == null){ | |
textView.setText("You must enter your own APIKEY and SECRET to use this demo. dev.twitter.com"); | |
webview.setVisibility(View.GONE); | |
return; | |
} | |
MainActivity.this.runOnUiThread(new Runnable() { | |
public void run() { | |
// | |
// | |
//set up service and get request token as seen on scribe website | |
//https://github.com/fernandezpablo85/scribe-java/wiki/Getting-Started | |
final OAuthService s = new ServiceBuilder() | |
.provider(TwitterApi.SSL.class) | |
.apiKey(APIKEY) | |
.apiSecret(APISECRET) | |
.callback(CALLBACK) | |
.build(); | |
final Token requestToken = s.getRequestToken(); | |
final String authURL = s.getAuthorizationUrl(requestToken); | |
//attach WebViewClient to intercept the callback url | |
webview.setWebViewClient(new WebViewClient(){ | |
@Override | |
public boolean shouldOverrideUrlLoading(WebView view, String url) { | |
//check for our custom callback protocol otherwise use default behavior | |
if(url.startsWith("oauth")){ | |
//authorization complete hide webview for now. | |
webview.setVisibility(View.GONE); | |
Uri uri = Uri.parse(url); | |
String verifier = uri.getQueryParameter("oauth_verifier"); | |
Verifier v = new Verifier(verifier); | |
//save this token for practical use. | |
Token accessToken = s.getAccessToken(requestToken, v); | |
//host twitter detected from callback oauth://twitter | |
if(uri.getHost().equals("twitter")){ | |
OAuthRequest req = new OAuthRequest(Verb.GET, "https://api.twitter.com/1.1/search/tweets.json?q=manutd"); | |
s.signRequest(accessToken, req); | |
Response response = req.send(); | |
try { | |
JSONObject json = new JSONObject(response.getBody()); | |
textView.setText(json.toString(3)); | |
} catch (JSONException e) { | |
e.printStackTrace(); | |
} | |
} | |
return true; | |
} | |
return super.shouldOverrideUrlLoading(view, url); | |
} | |
}); | |
//send user to authorization page | |
webview.loadUrl(authURL); | |
} | |
}); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment