weex 不支持HTTPS

本文介绍了如何在Android和iOS平台上解决Weex不支持HTTPS的问题。在Android上,通过扩展并注册自定义的HTTP适配器来处理HTTPS请求。在iOS上,继承`WXResourceRequestHandlerDefaultImpl`并实现`NSURLSessionDataDelegate`,在`URLSession:didReceiveChallenge:completionHandler:`方法中处理证书信任,从而支持HTTPS连接。

在android上
扩展一个Adapter,继承DefaultWXHttpAdapter

public class BingoWXHttpAdapter extends DefaultWXHttpAdapter {

    @Override
    protected HttpURLConnection createConnection(URL url) throws IOException {
        HttpURLConnection conn = null;
        if (url.getProtocol().toLowerCase().equals("https")) {
            trustAllHosts();
            HttpsURLConnection httpsCon = (HttpsURLConnection) url.openConnection();
            httpsCon.setHostnameVerifier(DO_NOT_VERIFY);
            conn = httpsCon;
        } else {
            conn = (HttpURLConnection) url.openConnection();
        }
        return conn;
    }

    //host不验证
    private HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
            return true;
        }
    };

    //信任所有证书
    private static void trustAllHosts() {
        final String TAG = "trustAllHosts";
        TrustManager[] trustAllCerts = new TrustManager[]{new X509TrustManager() {
            public java.security.cert.X509Certificate[] getAcceptedIssuers() {
                return new java.security.cert.X509Certificate[]{};
            }

            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                Log.i(TAG, "checkClientTrusted");
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
                Log.i(TAG, "checkServerTrusted");
            }
        }};

        try {
            SSLContext sc = SSLContext.getInstance("TLS");
            sc.init(null, trustAllCerts, new java.security.SecureRandom());
            HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

之后在初始化Engine的时候注册它:

setHttpAdapter(new BingoWXHttpAdapter())


 

在iOS上
继承WXResourceRequestHandlerDefaultImpl实现didReceiveChallenge,具体代码如下:

#import <Foundation/Foundation.h>
#import "WXResourceRequestHandlerDefaultImpl.h"
#import "WXResourceRequestHandler.h"

@interface BingoWXNetworkImpl : WXResourceRequestHandlerDefaultImpl <WXResourceRequestHandler,NSURLSessionDataDelegate>

@end

#import "BingoWXNetworkImpl.h"

@implementation BingoWXNetworkImpl

- (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge
 completionHandler:(void (^)(NSURLSessionAuthChallengeDisposition disposition, NSURLCredential * __nullable credential))completionHandler {
    
    //    NSURLSessionAuthChallengeUseCredential = 0, 使用(信任)证书
    //    NSURLSessionAuthChallengePerformDefaultHandling = 1, 默认,忽略
    //    NSURLSessionAuthChallengeCancelAuthenticationChallenge = 2,   取消
    //    NSURLSessionAuthChallengeRejectProtectionSpace = 3,      这次取消,下载次还来问
    
    NSLog(@"%@>>>>>>>>>>>>>>>>>>>>>>>>",challenge.protectionSpace);
    // 如果是请求证书信任,我们再来处理,其他的不需要处理
    if (challenge.protectionSpace.authenticationMethod == NSURLAuthenticationMethodServerTrust) {
        NSURLCredential *cre = [NSURLCredential credentialForTrust:challenge.protectionSpace.serverTrust];
        // 调用block
        completionHandler(NSURLSessionAuthChallengeUseCredential,cre);
    }
}
@end


 

 
### Weex 框架使用指南及开发文档 Weex 是一个由阿里巴巴开源的跨平台开发框架,旨在通过一套代码实现多端(iOS、Android 和 Web)运行的应用程序。以下是关于 Weex 框架的相关信息和使用方法的详细介绍。 #### 1. Weex Toolkit 的功能与优势 Weex Toolkit 是为 Weex 开发者提供的强大工具集,能够帮助开发者更高效地进行应用开发和部署。无论是新手还是经验丰富的开发者,都可以从中受益。它提供了从项目初始化到调试、打包等一系列功能,极大简化了开发流程[^1]。 #### 2. Weex SDK 技术特点 Weex SDK 是 Weex 框架的核心组件之一,支持开发者构建跨平台应用程序。其技术特点包括高性能渲染、轻量级设计以及良好的兼容性。对于 iOS 应用的开发,Weex SDK 提供了详细的文档指导,帮助开发者快速上手[^2]。 #### 3. 学习 Weex 的步骤 对于初学者而言,学习 Weex 的最佳方式是先浏览官方文档,获取对框架的基本了解。随后可以通过运行 Playground 示例代码来加深理解。以下是一个简单的学习路径: - 浏览官方文档,了解 Weex 的基本概念和架构。 - 在本地环境中运行官方提供的 Playground 示例代码。 - 结合实际项目需求,逐步扩展知识面[^3]。 #### 4. Android 平台上的 Weex 容器使用 在 Android 平台上,推荐使用 EMAS-WEEX 而不是官方的 Weex SDK。EMAS-WEEX 提供了更为完善的依赖管理和初始化操作,能够更好地支持开发者的实际需求。此外,EMAS-WEEX 还提供了一些额外的功能和优化,有助于提升开发效率[^4]。 #### 5. 混合应用开发中的 Weex Weex 框架非常适合用于混合应用开发,因为它可以将原生代码与前端技术相结合,从而实现性能和开发效率的平衡。然而,初学者可能会遇到一些配置上的困难,建议按照以下步骤进行: - 确保环境搭建正确,包括 Node.js、npm 或 yarn 的安装。 - 使用 Weex Toolkit 初始化项目。 - 参考官方文档和社区资源解决常见问题[^5]。 ```javascript // 示例:创建一个简单的 Weex 页面 <template> <div class="container"> <text class="title">Hello Weex!</text> </div> </template> <style> .container { flex-direction: column; justify-content: center; align-items: center; background-color: #ffffff; } .title { font-size: 40px; color: #000000; } </style> <script> module.exports = { data: function() { return {}; } }; </script> ``` #### 6. 官方文档与社区资源 为了更好地掌握 Weex 框架,建议参考以下资源: - 官方文档:[https://weex.apache.org/cn/](https://weex.apache.org/cn/) - GitHub 仓库:[https://github.com/apache/weex](https://github.com/apache/weex) - 社区论坛:参与讨论并解决问题 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值