22

-編集:解決策が見つかりまし
た- かなりの検索を行った後、それを理解しました-1人(文字通り1人を意味します)は、代わりに onPageLoad(); を使用したと言いました。これは私の目的のために完璧に機能しました。違いは、onPageLoad() が shouldOverrideUrlLoading よりも遅く実行されることですが、コードに違いはありません。

Android アプリ用に OAuth を使用して Twitter 認証を設定しようとしていますが、これまでのところ、ユーザーを認証 URL に正常に送信できますが、今しようとしているのは、コールバックへのリダイレクトをインターセプトすることです (これは単に404 エラーにつながる場合、コールバック URL はサーバー上に関連付けられたページを持ちません)。私がやろうとしているのは、URL がコールバックであるかどうかを確認し、URL から OAuth Verifier を抽出することです。このコードを使用して WebView をセットアップします。

view = (WebView)findViewById(R.id.twitterWbVw);
view.setWebViewClient(new WebViewClient(){
    @Override
    public boolean shouldOverrideUrlLoading(WebView wView, String url)
    {
        String urlHolder;
        String[] verifExtrctr;
        urlHolder = url.substring(0, url.indexOf('?'));
        System.out.println("url");
        if(urlHolder.equalsIgnoreCase(CALLBACK_URL))
        {
            verifExtrctr = urlHolder.split("?");
            verifExtrctr = verifExtrctr[2].split("=");
            if(verifExtrctr[0].equalsIgnoreCase("oauth_verifier"))
            {
                params[5] = verifExtrctr[1];
                return true;
            }
            else
            {
                System.out.println("Inocorrect callback URL format.");
            }
        }
        else    
        {
            wView.loadUrl(url);
        }
        return true;
    }
});
view.loadUrl(urlAuthorize.toExternalForm());

事はSystem.out.println("url"); です。(デバッグに使用しています)実行されません!そのため、私はアイデアがほとんどなく、同様の問題を抱えている人を見つけることができません。認証 URL は問題なく通過し、アプリを正常に認証できますが、何らかの理由でコールバック URL へのリダイレクトが傍受されません。助けていただければ幸いです。これは私の onResume() にあります。

4

3 に答える 3

57

いくつかの調査の後、そこにあるチュートリアルのほとんどが何を言っているかにもかかわらず、shouldOverrideUrlLoading()次の場合には呼び出されないと結論付けました。

  1. 次のような URL をロードします。

    loadUrl("http://www.google.com");
    
  2. ブラウザは、HTTP リダイレクトを介してユーザーを自動的にリダイレクトします。(リダイレクトに関する以下の @hmac からのコメントを参照してください)

ただし、webview 内の web ページ内のリンクをクリックすると呼び出されます。IIRC の Twitter 認証では HTTP リダイレクトが使用されます。残念ながら、すべてのチュートリアルで説明されているように機能した場合、これは役に立ちます。これは非常に古いバージョンの Android API のものだと思います...

onProgressChanged次のようなメソッドをオーバーライドすることを検討することをお勧めしWebChromeClientます: URL の読み込みを終了する WebView をリッスンする方法は? またはonPageFinished()メソッドWebViewClient

于 2011-07-18T20:31:11.043 に答える
15

以前の回答とコメントが正しい方向に向けてくれたおかげで、これを行うための合理的な方法だと思うことがわかりました。

私がしたことは、カスタム WebViewClient で onPageStarted と onPageFinished をオーバーライドすることです。コードは次のようになります...

@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
  if (pendingUrl == null) {
    pendingUrl = url;
  }
}

@Override
public void onPageFinished(WebView view, String url) {
  if (!url.equals(pendingUrl)) {
    Log.d(TAG, "Detected HTTP redirect " + pendingUrl + "->" + url);
    pendingUrl = null;
  }
}

もちろん、Log.d とともに、リダイレクトの検出時に実行する特定のコードを配置します。

于 2012-02-29T03:46:23.997 に答える