[решаемым, но я открыт для новых предложений ...]Twitter API возвращает недопустимый обратный вызов - не может разрешить
Я интеграция Twitter в мой Android приложения с помощью twitter4j.
Когда я пытаюсь разрешить с Twitter, я звоню следующую конечную точку с моим OAuth маркер:
https://api.twitter.com/oauth/authenticate?oauth_token=MY_VALID_TOKEN
который должен перенаправить меня:
MY-CALLBACK:///?oauth_token=***&oauth_verifier=***
, но вместо этого он перенаправляет меня на:
https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***
, который, очевидно, не является допустимым URL.
(Кроме того, :
отсутствует - он должен быть MY-CALLBACK:///...
)
Пожалуйста, обратите внимание, я использую WebView для моих звонков
Я мог бы манипулировать эту строку, чтобы все работало, но там должно быть лучший способ ...
Я передаю мой обратный вызов URL в
getOAuthRequestToken("MY-CALLBACK:///");
и уже установили пристальный фильтр для моей деятельности с
<data android:scheme="x-oauthflow-twitter" />
Кроме того, активность имеет android:launchMode="singleInstance"
Что я делаю неправильно?
[править: Более подробно]
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());
БЕЗ Hacky части, этот код приводит к "Веб-страница не доступна" ошибка, потому что URL-адрес является недействительным:
https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***
Если бы URL-адрес был MY-CALLBACK:///?oauth_token=***&oauth_verifier=***
, тогда моя деятельность получила бы намерение, и все было бы нормально ...
С «хакерской частью» мой код работает, но я бы хотел избежать этого фрагмента кода.
Просьба указать более подробную информацию, я не понимаю вашу проблему. –
вам нужно закрыть диалог webView после получения if (url.startsWith (Constants.TWITTER_CALLBACK_URL)). –
Я тоже это пробовал, но даже когда я набираю 'https: //api.twitter.com/oauth/authenticate? Oauth_token = MY_VALID_TOKEN' в моем браузере, авита Twitter возвращает неверный url ... –