Twitter的API返回无效的回调 - 无法授权(Twitter API returns inva

2019-06-25 11:04发布

[解决了,但我愿意接受新建议...]

我使用twitter4j整合Twitter的到我的Android应用程序。

当我试图与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());

没有哈克的一部分,该代码会导致“网页不可用”错误,因为该网址是无效的:

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

如果URL是MY-CALLBACK:///?oauth_token=***&oauth_verifier=*** ,然后我的活动将收到的意图,一切都会好起来......

随着“哈克部分”,我的代码工作,但我想避免的一段代码。

Answer 1:

我发现我不能让它这样下面我已经在网上看到了导游后工作。

最后我用我自己的自定义WebViewClient的代码:

if ( url.contains( "MY-CALLBACK:///" ) )
{
    final int start = url.indexOf( '?' ) + 1;
    final String params = url.substring( start );
    final String verifierToken = "oauth_verifier=";
    if ( params.contains( verifierToken ) )
    {
        final int value = params.indexOf( verifierToken ) + verifierToken.length();
        final String token = params.substring( value );
        view.stopLoading();                  
        authoriseNewUser( token );
    }
    else if ( params.contains( "denied" ) )
    {
        view.stopLoading();
        finish();
    }
}
else
{
    view.loadUrl( url );
}
return true;


Answer 2:

使用下面CallBack_URI对于这一点,它可以帮助你。

public static final String  OAUTH_CALLBACK_SCHEME = "x-oauthflow-twitter";
public static final String  OAUTH_CALLBACK_HOST = "callback";
public static final String  CALLBACK_URL = OAUTH_CALLBACK_SCHEME + "://" + OAUTH_CALLBACK_HOST;


Answer 3:

我想有什么不对您的代码。 昨天我得到相同的结果,但今天它就像一个魅力。 这可能是一个服务器端的问题。 你可以尝试再次原来的(没有哈克部分)解决方案,请?



Answer 4:

public static final String OAUTH_CALLBACK_SCHEME = "x-oauthflow-twitter";
public static final String OAUTH_CALLBACK_HOST = "litestcalback";
public static final String OAUTH_CALLBACK_URL = OAUTH_CALLBACK_SCHEME+ "://" +OAUTH_CALLBACK_HOST;

使用代码和清单文件这类callback_url的...



文章来源: Twitter API returns invalid callback - Cannot authorize