http://blog.blundell-apps.com/sending-a-tweet/
... I set up Twitter user authentication as in the tutorial above such that the
Activity doing the Twitter authentication has its content view changed to a WebView, the Activity is declared in the manifest file containing an intent-filter to catch the Twitter callback and, on callback, the response is processed and the Activity's content view is changed back to whatever it was.I got it working but in doing so I found (what I think is) an easier way and such that the
WebView doesn't ever kick off the phone's web browser app (thereby leaving your app, which you don't really want), as follows:(1) Remove the
Activity singleInstance and intent-filter declarations you added to the manifest file (in following the tutorial above). Don't need that anymore!(2) Add a
WebView to your Activity layout file and set its initial visibility to "gone" and its position, height, width etc however you want it. I set its properties so that it covers the whole screen when visible, as follows:
<WebView
android:id="@+id/myWebView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:visibility="gone" />
(3) Get a handle to your WebView in your Activity and set its WebViewClient to pick up the Twitter callback (and not to kick off the web browser app at any time), as follows...
myWebView = (WebView)findViewById(R.id.myWebView);
myWebView.setWebViewClient(new WebViewClient()
{
@Override
public boolean shouldOverrideUrlLoading(WebView webView, String url)
{
if (url != null
&& url.startsWith("myapptwittercallback:///myapp"))
handleTwitterCallback(url);
else
webView.loadUrl(url);
return true;
}
});
... Here you might also want to enable other settings of your WebView like saving form data and javascript execution (e.g. myWebView.getSettings().setJavaScriptEnabled(true);)(4) Make your
WebView visible and focused at the point you need to do Twitter authentication, as follows:
try
{
twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(
myTwitterConsumerKey,
myTwitterConsumerSecret);
twitterRequestToken = twitter.getOAuthRequestToken(
"myapptwittercallback:///myapp");
myWebView.loadUrl(
twitterRequestToken.getAuthenticationURL());
myWebView.setVisibility(View.VISIBLE);
myWebView.requestFocus(View.FOCUS_DOWN);
}
catch (TwitterException ex)
{
Toast.makeText(
this,
"Login failed. Please try again.",
Toast.LENGTH_SHORT).show();
}
... Remember to clear your WebView's history (i.e. myWebView.clearHistory() and set its visibility to "gone" in your handleTwitterCallback(String) method.(5) Lastly, override your
Activity's onBackPressed() method so that your WebView handles presses of the back button if its visible, as follows...
@Override
public void onBackPressed()
{
if (myWebView.getVisibility() == View.VISIBLE)
{
if (myWebView.canGoBack())
{
myWebView.goBack();
return;
}
else
{
myWebView.setVisibility(View.GONE);
return;
}
}
super.onBackPressed();
}
That's it! You should now have Twitter integration in your app and the user should never leave your app in doing Twitter authentication.