0

[解決しましたが、新しい提案を受け付けています...]

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になります...

「ハッキーな部分」を使用すると、私のコードは機能しますが、そのコードは避けたいと思います。

4

4 に答える 4

3

オンラインで見たガイドに従った後、このように機能させることができなかったことがわかりました。

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;
于 2012-06-13T11:22:44.797 に答える
0

そのために以下の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;
于 2012-06-13T11:40:32.713 に答える
0
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を使用します...

于 2012-06-13T11:48:01.773 に答える
0

私はあなたのコードに何も問題はないと思います。昨日も同じ結果になりましたが、今日はお守りのようです。これはおそらくサーバー側の問題です。元の(ハッキーな部分がない)ソリューションをもう一度試していただけますか?

于 2012-06-15T13:43:21.223 に答える