[解决了,但我愿意接受新建议...]Twitter的API返回无效的回调 - 不能授权
我使用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=***
这显然不是一个有效的网址。
(此外,:
缺失 - 它应该是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=***
如果网址为MY-CALLBACK:///?oauth_token=***&oauth_verifier=***
那么我的活动会收到一个意图,一切都会好的...
对于“hacky部分”,我的代码有效,但我想避免这段代码。
请给更多的细节,我不明白你的问题。 –
您需要在获取if(url.startsWith(Constants.TWITTER_CALLBACK_URL))条件后关闭webView对话框。 –
我也试过,但即使当我在浏览器中输入'https://api.twitter.com/oauth/authenticate?oauth_token = MY_VALID_TOKEN'时,Twitter api会返回无效的url ... –