有没有办法在旧设备的Picasso库中启用HTTPS连接?

时间:2017-02-09 21:30:42

标签: java android https picasso

我的应用正在使用来自HTTPS来源的图片,他们在使用API​​ 21或更高版本的Android上正常加载,但我无法在API 16的Android版本上加载这些图片(我的最小API)应用)到API 19.有没有办法在较旧的Android版本上启用TLS?它似乎默认在Lollipop和更高版本上启用。帮助将不胜感激!在此先感谢:)

2 个答案:

答案 0 :(得分:0)

  

有没有办法在较旧的Android版本上启用TLS?

自Android 1.0以来,Android已启用TLS。多年来,特定级别的TLS和特定根证书都有所不同(在证书的情况下,甚至可能因旧设备上的制造商而异)。

  

我无法将这些图片从API 16(我的应用程序的最小API)加载到API 19

检查LogCat是否有Picasso记录的异常。或者,在您直接下载图像的地方运行一些测试(例如,OkHttp,HttpURLConnection),以确保您获得例外。

然后,如果您不了解如何解决这些异常,请提出一个单独的Stack Overflow问题,其中提供minimum, complete, and verifiable example,其中包括您的代码,失败的URL以及Java堆栈跟踪与例外有关。

答案 1 :(得分:0)

您可以使用OKHttp。

在预KitKat设备中启用http2
 List<Protocol> protocols = new ArrayList<>();
            protocols.add(Protocol.HTTP_2);
            protocols.add(Protocol.HTTP_1_1);



            SSLContext sc = SSLContext.getInstance("TLSv1.2");
            sc.init(null, null, null);

            ConnectionSpec cs = new ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
                    .tlsVersions(TlsVersion.TLS_1_2)
                    .build();

            List<ConnectionSpec> specs = new ArrayList<>();
            specs.add(cs);
            specs.add(ConnectionSpec.COMPATIBLE_TLS);
            specs.add(ConnectionSpec.CLEARTEXT);

            mClient = new OkHttpClient.Builder()
                    .protocols(protocols)
                    .connectionSpecs(specs)
                    .sslSocketFactory(new Tls12SocketFactory(sc.getSocketFactory()))
                    .build();

将此客户端添加到Picasso

if (android.os.Build.VERSION.SDK_INT <= Build.VERSION_CODES.LOLLIPOP_MR1) {
                Picasso picasso = new Picasso.Builder(getApplicationContext())
                        .downloader(new OkHttp3Downloader(mClient))
                        .build();
                Picasso.setSingletonInstance(picasso);
            }