API Twitter возвращает неверный обратный вызов - не удается авторизоваться

[Решено, но я открыт для новых предложений ...]

Я интегрирую Twitter в свое приложение для Android с помощью twitter4j.

Когда я пытаюсь авторизоваться через Twitter, я вызываю следующую конечную точку с моим токеном oauth:

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

которыйshould перенаправить меня на:

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

БЕЗ хакерской части, этот код приводит к тому, что «веб-страница недоступна» ошибка, потому что URL недействителен:

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

Если URL былMY-CALLBACK:///?oauth_token=***&oauth_verifier=*** тогда моя деятельность получит намерение, и все будет хорошо ...

С «хакерской частью» мой код работает, но я бы хотел избежать этого куска кода.

Ответы на вопрос(4)

Ваш ответ на вопрос