Search code examples
androidtwittertwitter4j

Can I get Twitter API response in my Android app any other way than with onNewIntent() method?


I don't have much experience with development in Android. I am working on app, which can communicate with Facebook, Twitter, LinkedIn and Google+.

Every social network has own wrapper, which handles communication between Android app and social network. Facebook communication is already done. I have problems with Twitter communication. Implemetations, which I have found on internet use twitter4j library and internet browser for logging. Then you must read response data from browser.

For example this: Twitter Test App

My issue is reading this response data from browser. Logging and authorizing in browser goes without problems. Tutorials like I mentioned above use usually onNewIntent() Activity method for dealing with browser response. But I cannot use this method, because it is used for different purposes. I don't know if it's posible to do this without any other Activity apart from MainActivity or I need to create another Activity in wrapper, which will handle whole Twitter communication.

Thanks for any help.


Solution

  • I'm really not sure why so many examples for twitter4j on the internet go through intents and custom schemes to handle the callback URL. I find this awkward for most scenarios. I also dislike leaving the application to go to the browser to login.

    Instead, try using a WebView to load the page. Then you can attach a WebViewClient which can detect the callback URL. You won't have to deal with changing the manifest, etc. too. You might do something like this, perhaps inside onCreateView in a DialogFragment:

    mWebView = new WebView(context);
    mWebView.setWebViewClient(new WebViewClient() {
        @Override
        public void onLoadResource(WebView view, String url) {
            if (url.startsWith(CALLBACK_URL)) {
                Uri uri = Uri.parse(url);
                String denied = uri.getQueryParameter("denied");
                if (denied != null) {
                    // handle denied
                } else {
                    // handle authenticated
                }
            }
            super.onLoadResource(view, url);
        }
    });
    

    and then you can load the authentication URL in onViewCreated (if you're doing this in a DialogFragment):

        Twitter twitter = new TwitterFactory().getInstance();
        twitter.setOAuthConsumer(CONSUMER_KEY, CONSUMER_SECRET);
        RequestToken reqToken = twitter.getOAuthRequestToken();
        mWebView.loadUrl(reqToken.getAuthenticationURL());