devrait overrideurloading dans WebView pour Android ne fonctionne pas

-Edit: Solution Trouvée-

Une personne (je veux dire littéralement une personne) a dit qu'ils ont utilisé à la place onPageLoad (); qui a fonctionné parfaitement pour mes fins. La différence est que onPageLoad () tourne plus tard que shouldoverrideurloading, mais cela ne fait pas de différence dans mon code.

j'essaie de configurer L'autorisation Twitter avec OAuth pour une application Android, et jusqu'à présent je peux envoyer avec succès l'utilisateur à la URL d'autorisation, cependant, ce que j'essaie de faire maintenant est d'intercepter la redirection vers le rappel (ce qui mènerait juste à une erreur 404, notre URL de rappel ne va pas avoir une page associée sur nos serveurs). Ce que je tente de faire est de vérifier si L'URL est notre callback, puis d'extraire le vérificateur OAuth à partir de l'URL. J'ai configuré mon WebView avec ce code:

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());

chose est système Pair.hors.println ("url"); (que j'utilise pour déboguer) ne court pas! donc je suis assez sec sur les idées, et ne peux pas trouver quelqu'un avec un problème similaire. L'URL d'autorisation passe par fine, et je peux Autoriser avec succès l'application, cependant la redirection vers L'URL de rappel pour une raison quelconque ne jamais obtenir intercepté. Toute aide serait appréciée, ceci est dans mon onResume () si cela compte.

21
demandé sur erdemlal 2011-07-18 23:31:03

2 réponses

après quelques recherches je conclus que malgré ce que la plupart des tutoriels là-bas disent, shouldOverrideUrlLoading() ne se fait pas appelé quand:

  1. vous chargez une URL comme

    loadUrl("http://www.google.com");
    
  2. le navigateur redirige automatiquement l'utilisateur via une redirection HTTP. (voir le commentaire de @hmac ci-dessous concernant les redirections)

Il cependant , appelée lorsque vous cliquez sur un lien à l'intérieur d'une page web à l'intérieur de la webview. IIRC l'autorisation twitter utilise une redirection HTTP.. Dommage, ce serait utile si ça marchait comme tous les tutoriels le disent. Je pense que c'est une version très ancienne de L'API Android...

vous pourriez vouloir envisager de passer outre la méthode onProgressChanged d'un WebChromeClient comme ici: Comment écouter pour un WebView finissant le chargement d'un URL? ou le onPageFinished() méthode de la WebViewClient .

49
répondu citizen conn 2017-12-01 15:03:04

j'ai trouvé ce que je pense être une façon raisonnable de le faire grâce à la réponse précédente et les commentaires qui m'indiquent dans la bonne direction.

ce que j'ai fait est de surcharger onPageStarted et onPageFinished dans un WebViewClient personnalisé. Le code fait quelque chose comme ça...

@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;
  }
}

Et bien sûr avec le Journal.d vous mettriez n'importe quel code spécifique que vous voulez exécuter en détectant la redirection.

13
répondu Maks 2017-02-26 12:44:04