web-dev-qa-db-fra.com

WebView montrant ERR_CLEARTEXT_NOT_PERMITTED bien que le site soit HTTPS

Je commence à travailler sur une application sur Android, alors je n'ai pas grand chose. Tout ce que j'ai, c'est juste une WebView jusqu'à présent. J'ai créé le projet dans Android Studio et mon projet a été défini en tant que Android InstantApp. Je ne sais pas pourquoi ni comment, mais je suppose que j'ai oublié une option pour cela lors de la création du projet.

La WebView affichait une erreur indiquant net :: ERR_CLEARTEXT_NOT_PERMITTED. Lorsque j'ai cherché l'erreur sur Google, j'ai constaté que lorsqu'une application est une InstantApp, WebViews peut uniquement charger des sites au format HTTPS et ne peut pas charger un site HTTP.

Le but de cette application est d'être un lecteur Flash extrêmement simple pour un seul site. C'est pour avoir de meilleures performances en exécutant un jeu qui nécessite Flash. Ce jeu est à darkorbit.com, qui est HTTPS.

MainActivity.Java:

package com.tylerr147.darkorbit;

import Android.content.ComponentName;
import Android.content.Intent;
import Android.support.v7.app.AppCompatActivity;
import Android.os.Bundle;
import Android.view.View;
import Android.webkit.WebSettings;
import Android.webkit.WebView;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WebView wv = findViewById(R.id.webView1);
        wv.loadUrl("https://darkorbit.com/");
        wv.setWebViewClient(new CustomWebViewClient());
        WebSettings webSettings = wv.getSettings();
        webSettings.setJavaScriptEnabled(true);
        webSettings.setPluginState(WebSettings.PluginState.ON);

    }
}

et CustomWebViewClient.Java

package com.tylerr147.darkorbit;

import Android.webkit.WebView;
import Android.webkit.WebViewClient;

public class CustomWebViewClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }
}

Ma question: comment puis-je désactiver mon application en tant qu'application instantanée ou comment puis-je obtenir cette WebView pour afficher le site?

Je pense qu’il est important de mentionner quelques autres détails: dans l’application où l’application WebView est affichée, il est également indiqué "La page Web à l'adresse http://darkorbit.com/ " ne peut pas être chargé parce que: net :: ERR_CLEARTEXT_NOT_PERMITTED

Notez que cela dit "... site à http://darkorbit.com/ ..." "et non" ... site à https://darkorbit.com/ ... "même si la chaîne de l'URL est codée en dur et indique" https://darkorbit.com/ ". En outre, je teste l'application sur un émulateur configuré en tant que Google Pixel 2 sous Android 9.

Toute aide serait appréciée. Je vous remercie.

56
tylerr147

Solution:

Ajoutez la ligne ci-dessous dans votre tag application:

Android:usesCleartextTraffic="true"

Comme indiqué ci-dessous:

<application
    ....
    Android:usesCleartextTraffic="true"
    ....>

J'espère que ça aide.

156

Lorsque vous appelez " https://darkorbit.com/ ", votre serveur estime qu'il manque "www". Il redirige donc l'appel vers " http://www.darkorbit.com/ "et ensuite" https://www.darkorbit.com/ ", votre appel WebView est bloqué lors de la première redirection car il s'agit d'un appel" http ". Vous pouvez appeler " https://www.darkorbit.com/ " à la place et le problème sera résolu.

6
Gordon