[解決しましたが、新しい提案を受け付けています...]
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());
ハッキーな部分がないと、URLが無効であるため、このコードは「Webページが利用できません」というエラーになります。
https://api.twitter.comMY-CALLBACK///?oauth_token=***&oauth_verifier=***
URLがその場合、MY-CALLBACK:///?oauth_token=***&oauth_verifier=***
私のアクティビティはインテントを受け取り、すべてがOKになります...
「ハッキーな部分」を使用すると、私のコードは機能しますが、そのコードは避けたいと思います。