[solved, mais je suis ouvert à de nouvelles suggestions ...]API Twitter retourne rappel invalide - ne peut pas autoriser
J'intégration Twitter dans mon application Android en utilisant twitter4j.
Lorsque je tente d'autoriser avec Twitter, je vous appelle le point final suivant avec mon jeton OAuth:
https://api.twitter.com/oauth/authenticate?oauth_token=MY_VALID_TOKEN
qui devrait me rediriger vers:
MY-CALLBACK:///?oauth_token=***&oauth_verifier=***
mais à la place, il me redirige vers:
https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***
qui est évidemment pas une URL valide.
(En outre, le :
manque - il devrait être MY-CALLBACK:///...
)
S'il vous plaît noter que je utilise WebView pour mes appels
je pouvais manipuler cette chaîne pour faire fonctionner le tout, mais il doit être une meilleure façon ...
Je passe mon URL de rappel à
getOAuthRequestToken("MY-CALLBACK:///");
et ont déjà défini le filtre intention de mon activité avec
<data android:scheme="x-oauthflow-twitter" />
En outre, l'activité a android:launchMode="singleInstance"
Qu'est-ce que je fais mal?
[modifier: plus de détails]
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());
sans la partie aki, ce code entraîne d'erreur "page Web non disponible", parce que l'URL est invalide:
https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***
Si l'url était MY-CALLBACK:///?oauth_token=***&oauth_verifier=***
alors mon activité recevrait une Intention, et tout irait bien ...
AVEC la partie "hacky", mon code fonctionne, mais je voudrais éviter ce morceau de code.
S'il vous plaît donner plus de détails, je ne comprends pas votre problème. –
vous devez fermer la boîte de dialogue WebView après avoir obtenu la condition if (url.startsWith (Constants.TWITTER_CALLBACK_URL)). –
J'ai essayé cela aussi, mais même lorsque je tape 'https: //api.twitter.com/oauth/authenticate? Oauth_token = MY_VALID_TOKEN' dans mon navigateur, l'API Twitter retourne une adresse invalide ... –