Twitter API gibt ungültigen Rückruf zurück - Autorisierung nicht möglich

[Gelöst, aber ich bin offen für neue Vorschläge ...]

Ich binde Twitter mit twitter4j in meine Android-App ein.

Wenn ich versuche, mit Twitter zu autorisieren, rufe ich mit meinem oauth-Token den folgenden Endpunkt an:

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

welchesollte leite mich weiter zu:

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

stattdessen leitet es mich weiter zu:

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

Das ist natürlich keine gültige URL.
(Auch die: fehlt - es sollte seinMY-CALLBACK:///...)

Bitte beachten Sie, dass ich für meine Anrufe WebView verwende


Ich könnte diese Saite manipulieren, damit alles funktioniert, aber es muss einen besseren Weg geben ...



Ich übergebe meine Rückruf-URL an

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

und habe bereits den Intent-Filter für meine Aktivität mit gesetzt

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

Auch die Aktivität hatandroid:launchMode="singleInstance"



Was mache ich falsch?


[Bearbeiten: Weitere Details]

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());

OHNE den Hacky-Teil führt dieser Code zu dem Fehler "Webseite nicht verfügbar", da die URL ungültig ist:

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

Wenn die URL warMY-CALLBACK:///?oauth_token=***&oauth_verifier=*** dann würde meine Aktivität eine Absicht erhalten, und alles wäre in Ordnung ...

Mit dem "Hacky Part" funktioniert mein Code, aber ich möchte diesen Teil des Codes vermeiden.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage