La API de Twitter devuelve una devolución de llamada no válida. No se puede autorizar

[SOLUCIONADO, pero estoy abierto a nuevas sugerencias ...]

Estoy integrando Twitter en mi aplicación de Android usando twitter4j.

Cuando trato de autorizar con Twitter, llamo al siguiente punto final con mi touth auth:

https://api.twitter.com/oauth/authenticate?oauth_token=MY_VALID_TOKEN

cualdebería redirigirme a:

MY-CALLBACK:///?oauth_token=***&oauth_verifier=***

pero en cambio, me redirige a:

https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***

que obviamente no es una url válida.
(También el: falta - debe serMY-CALLBACK:///...)

Tenga en cuenta que estoy usando WebView para mis llamadas


Podría manipular esta cadena para que todo funcione, pero tiene que haber una mejor manera ...



Estoy pasando mi URL de devolución de llamada a

getOAuthRequestToken("MY-CALLBACK:///");

y ya he establecido el filtro de intención para mi actividad con

<data android:scheme="x-oauthflow-twitter" />

Además, la actividad tieneandroid:launchMode="singleInstance"



¿Qué estoy haciendo mal?


[editar: más detalles]

mTwitter = new TwitterFactory().getInstance();
mTwitter.setOAuthConsumer(Constants.TWITTER_CONSUMER_KEY, Constants.TWITTER_CONSUMER_SECRET);

twitterWebView = new WebView(ActivityTwitterAuthorize.this);

twitterWebView.setWebViewClient(new WebViewClient() {

    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        if (url.startsWith(Constants.TWITTER_CALLBACK_URL)) {
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);

        // HACKY PART!
        // I added the following code to force it to work, but this is a dirty hack...
        // String TWITTER_CALLBACK_INVALID_PREFIX = "https://api.twitter.comx-oauthflow-twitter///";
        // TWITTER_CALLBACK_URL = "MY-CALLBACK:///";
        // BEGIN
        } else if (url.startsWith(TWITTER_CALLBACK_INVALID_PREFIX)) {
            url = url.substring(TWITTER_CALLBACK_INVALID_PREFIX.length());
            url = Constants.TWITTER_CALLBACK_URL + url;
            Intent intent = new Intent(Intent.ACTION_VIEW);
            intent.setData(Uri.parse(url));
            startActivity(intent);
        // END

        } else {
            view.loadUrl(url);
        }
        return true;
    }

});

mTwitterReqToken = mTwitter.getOAuthRequestToken(Constants.TWITTER_CALLBACK_URL);

twitterWebView.loadUrl(mTwitterReqToken.getAuthenticationURL());

SIN la parte hacky, este código da como resultado el error "La página web no está disponible", porque la URL no es válida:

https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***

Si la url fueraMY-CALLBACK:///?oauth_token=***&oauth_verifier=*** entonces mi actividad recibiría una Intención, y todo estaría bien ...

CON la "parte hacky", mi código funciona, pero me gustaría evitar esa pieza de código.

Respuestas a la pregunta(4)

Su respuesta a la pregunta