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.