IOS开发入门之当RN https 遇见Android 和 http 遇见IOS 的处理方法
凌雪 2018-10-10 来源 :网络 阅读 1372 评论 0

摘要:本文将带你了解IOS开发入门当RN https 遇见Android 和 http 遇见IOS 的处理方法,希望本文对大家学IOS有所帮助。

本文将带你了解IOS开发入门当RN https 遇见Android 和 http 遇见IOS 的处理方法,希望本文对大家学IOS有所帮助。


       

1   IOS   的请求和加载http的处理


注意:
NSAppTransportSecurity

NSAllowsArbitraryLoads

2.当android   遇到https;

由于RectNative 底层请求网络用的OKhttp默认是无法加载https   的请求
处理稍微复杂:需要修改Android   原生代码处理所有https的协议

?


package com.wx_hcx_rn;

 

import android.app.Application;

 

import com.facebook.react.ReactApplication;

import com.facebook.react.ReactNativeHost;

import com.facebook.react.ReactPackage;

import com.facebook.react.modules.network.OkHttpClientProvider;

import com.facebook.react.shell.MainReactPackage;

import com.facebook.soloader.SoLoader;

 

import java.util.Arrays;

import java.util.List;

 

public class MainApplication extends Application implements ReactApplication {

 

  private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this)   {

    @Override

    public boolean getUseDeveloperSupport() {

      return BuildConfig.DEBUG;

    }

 

    @Override

    protected List<reactpackage>   getPackages() {

      return Arrays.<reactpackage>asList(

          new MainReactPackage()

      );

    }

 

    @Override

    protected String getJSMainModuleName()   {

      return "index";

    }

  };

 

  @Override

  public ReactNativeHost getReactNativeHost()   {

    return mReactNativeHost;

  }

 

  @Override

  public void onCreate() {

    super.onCreate();

//修改okhttpclient

    OkHttpClientProvider.replaceOkHttpClient(HttpsOkHttpClient.initCustomOkHttpClient());

    SoLoader.init(this, /*   native exopackage */ false);

  }

}

</reactpackage></reactpackage>

?下面是自定义的okhttpclient


package com.wx_hcx_rn;

 

import com.facebook.react.modules.network.OkHttpClientProvider;

import com.facebook.react.modules.network.ReactCookieJarContainer;

 

import java.security.SecureRandom;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import java.util.concurrent.TimeUnit;

 

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.KeyManager;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSession;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

 

import okhttp3.OkHttpClient;

 

/**

 * .::::.

 * .::::::::.

 * :::::::::::  FUCK   YOU

 *   ..:::::::::::'

 * '::::::::::::'

 * .::::::::::

 * '::::::::::::::..

 * ..::::::::::::.

 * ``::::::::::::::::

 *   ::::``:::::::::'          .:::.

 * ::::'     ':::::'         .::::::::.

 *   .::::'        ::::       .:::::::'::::.

 * .:::'         :::::  .:::::::::' ':::::.

 *   .::'          :::::.:::::::::'        ':::::.

 *   .::'           ::::::::::::::'           ``::::.

 * …:::             ::::::::::::'                ``::.

 * ````   ':.            ':::::::::'                    ::::..

 *   '.:::::'                      ':'````..

 * * 作者:jiangnanyizhou on 2018/2/6   22:40

 * 邮箱:373654981@qq.com

 */

 

public class   HttpsOkHttpClient   {

    /**

     * react   native默认不支持https请求,这里提供支持https的OKHttpClient

     *   @return

     */

    public static OkHttpClient   initCustomOkHttpClient(){

        OkHttpClient.Builder client =   new   OkHttpClient.Builder()

                .connectTimeout(0, TimeUnit.MILLISECONDS)

                .readTimeout(0, TimeUnit.MILLISECONDS)

                .writeTimeout(0, TimeUnit.MILLISECONDS)

                .cookieJar(new ReactCookieJarContainer());

 

        OkHttpClient.Builder builder =   OkHttpClientProvider.enableTls12OnPreLollipop(client);

        builder.sslSocketFactory(getSSLSocketFactory())

                .hostnameVerifier(new HostnameVerifier() {

                    @Override

                    public boolean verify(String hostname, SSLSession session)   {

                        return true; //忽略所有的认证,直接返回了true

                    }

                });

        return builder.build();

    }

 

    private static SSLSocketFactory getSSLSocketFactory()   {

        TrustManager[] trustAllCerts =   new   TrustManager[]{new X509TrustManager() {

            public void checkClientTrusted(X509Certificate[] chain, String authType) throws

                    CertificateException   {

            }

 

            public void checkServerTrusted(X509Certificate[] chain, String authType)   throws   CertificateException   {

            }

 

            public X509Certificate[] getAcceptedIssuers()   {

                return new X509Certificate[0];

            }

        }};

        SSLSocketFactory sslSocketFactory =   null;

 

        try {

            SSLContext sslContext =   SSLContext.getInstance("TLS");

            sslContext.init((KeyManager[])null, trustAllCerts, new SecureRandom());

            sslSocketFactory = sslContext.getSocketFactory();

        } catch (Exception e) {

            e.printStackTrace();

        }

        return sslSocketFactory;

    }

}


本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标移动开发之IOS频道!


本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程