3

Twitter との統合に成功した以前の Android アプリのコードがあります。このコードを新しいアプリにコピーし、新しいアプリの と を変更しcallback-urlましconsumer-keyconsumer-secret

twitter4jライブラリを使用して、RequestToken次のように認証 URLを取得できます。

Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(myConsumerKey, myConsumerSecret);
RequestToken requestToken = twitter.getOAuthRequestToken(myCallbackUrl);
String authenticationUrl = requestToken.getAuthenticationURL()

RequestTokenは、nulltoken以外の値、null 以外のtokenSecret値、および null 値がありsecretKeySpecます。認証 URL の形式は次のとおりです。

http://api.twitter.com/oauth/authenticate?oauth_token=...

この URL を my にロードするWebViewと、次のページが表示されます。

サインインページ

ここで私は立ち往生しています。ボタンをクリックするとSign In、この同じページが読み込まれ続けます。他には何もありません。ただし、ボタンをクリックするとCancel、次のページが表示されます。

ここに画像の説明を入力

Return to Fan League Beko BBLボタンをクリックすると、このページでのみ、値としてmy を持つパラメーターを使用してcallback-url呼び出されます。以前にこのようなことを見て、サインイン要求の処理を妨げている原因を知っている人はいますか?deniedoauth_token

更新 1:デスクトップ ブラウザーから認証 URL とボタンを試してみましたが、Sign In期待どおりに動作し、応答を処理してからコールバック URL を呼び出します。WebViewAndroidアプリで試してみると失敗します。複数の Android デバイスとタブレットで試しました。私もJavaScriptが有効になっているWebViewので、そうではありません。アイデアは大歓迎です。私はアイデアがありません!

更新 2:でデバッグ モードのコード トレースを行ったWebViewところ、ボタンWebViewClientをクリックするとメソッドが呼び出されず、次の 3 つのメソッドが (順番に) 呼び出されることがわかりました。、。これらのメソッドの値は次のとおりです: 、つまり、パラメーターは認証 URL から取り除かれています。おそらく、これはリクエストとして扱われているリクエストであり、この同じページがロードされ続けるのはなぜですか? このボタンの押下を適切に処理するために私ができることはありますか?Sign InshouldOverrideUrlLoading(WebView webView, String url)onPageStarted(WebView view, String url, Bitmap favicon)onLoadResource(WebView view, String url)onPageFinished(WebView view, String url)urlhttps://api.twitter.com/oauth/authenticateoauth_tokenPOSTGETSign In

4

5 に答える 5

2

Twitter アプリのコントロール パネルからコールバック URL を設定するのを忘れていたようです。

Twitter API セクションにログインし、アプリを選択して設定タブに移動します。

ここに画像の説明を入力

そうしないと、ユーザーがログインを押したときにリダイレクトが行われないため、ベリファイアをキャッチできません。

一方、コールバック URL を設定すると、WebView はリダイレクトをインターセプトできます。

注: 任意の URL を設定できます。重要なことは、リダイレクト URL に渡される oauth_verifier パラメータをキャッチすることです。

その場合、あなたの

shouldOverrideUrlLoading

トリガーする必要があります。

于 2013-02-14T22:29:02.230 に答える
1

最近、Twitterでの共有をアプリケーションに統合しました。その完璧に動作します。

最新のtwitter4j-core-3.0.3.jarを使用しました

簡単なデモアプリケーションを作成しました。次のリンクからダウンロードして、徹底的に確認できます。 http://santhoshkumaar.blogspot.in/2013/02/posting-message-on-twitter.html https://github.com/santhoshkumaar/ShareOnTwitter/

これはあなたに役立つかもしれません。

于 2013-02-20T07:29:37.000 に答える
1

奇妙なことに、私の Twitter 統合が機能し始めました。アプリケーション コードやアプリケーションの Twitter 設定を変更していません。Twitter の認証ページにはSign In以前は青いボタンがありましたが、現在は青いAuthenticate appボタンになっています。それで、Twitter側で何かが変更/修正されたと思います。

于 2013-03-12T15:09:12.367 に答える
1

WebViewClient からオーバーライドし、onResume() およびonCreate() でonLoadResource(WebView view, String url)使用する Authorization アクティビティ内でこのコードを使用します。webView.loadUrl(authenticationUrl)webView.setWebViewClient(webViewClient)

private WebViewClient webViewClient = new WebViewClient() {
    @Override
    public void onLoadResource(WebView view, String url) {
        // the URL we're looking for looks like this:
        // callbackurl?oauth_token=1234567890qwertyuiop
        Uri uri = Uri.parse(url);
        if (uri.getHost().equals("callbackurlhost")) {
            String token = uri.getQueryParameter("oauth_token");
            if (null != token) {
                webView.setVisibility(View.INVISIBLE);
                AccessToken accessToken = twitter.getOAuthAccessToken();
                // TODO store access token
                finish();
            } else {
                // TODO tell user to try again 
            }
        } else {
            super.onLoadResource(view, url);
        }
    }
};
于 2013-02-18T19:59:41.527 に答える
0

コールバック URL を入力しましたか?

public static final String CALLBACK_URL = "twitterapp://connect";

認証方法を確認してください:

mHttpOauthConsumer = new CommonsHttpOAuthConsumer(mConsumerKey, mSecretKey);
mHttpOauthprovider = new DefaultOAuthProvider("http://twitter.com/oauth/request_token",
                                                     "http://twitter.com/oauth/access_token",
                                                     "http://twitter.com/oauth/authorize");

public void authorize() 
{
        mProgressDlg.setMessage("Initializing ...");
        mProgressDlg.show();

        new Thread() {
            @Override
            public void run() {
                String authUrl = "";
                int what = 1;

                try {
                    authUrl = mHttpOauthprovider.retrieveRequestToken(mHttpOauthConsumer, CALLBACK_URL);    

                    what = 0;

                    Log.d(TAG, "Request token url " + authUrl);
                } catch (Exception e) {
                    Log.d(TAG, "Failed to get request token");

                    e.printStackTrace();
                }

                mHandler.sendMessage(mHandler.obtainMessage(what, 1, 0, authUrl));
            }
        }.start();
    }

twitter.authorize(); を呼び出します。 お役に立てれば

于 2013-02-19T07:39:11.597 に答える