【发布时间】:2012-08-29 00:46:14
【问题描述】:
[已解决,但我愿意接受新的建议...]
我正在使用 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());
没有 hacky 部分,此代码会导致“网页不可用”错误,因为 url 无效:
https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***
如果 url 是 MY-CALLBACK:///?oauth_token=***&oauth_verifier=***,那么我的活动将收到一个 Intent,一切都会好起来的......
有了“hacky 部分”,我的代码可以工作,但我想避免使用那段代码。
【问题讨论】:
-
请提供更多细节,我不明白您的问题。
-
获取 if (url.startsWith(Constants.TWITTER_CALLBACK_URL)) 条件后需要关闭 webView 对话框。
-
我也试过了,但即使我在浏览器中输入
https://api.twitter.com/oauth/authenticate?oauth_token=MY_VALID_TOKEN,Twitter api 也会返回无效的 url...
标签: android twitter twitter-oauth twitter4j