Jimliu


一只刚上路的前端程序猿


纯react-native开发App的心酸😭

📱背景

公司主要做toB的酒店业务,大量的业务是桌面web,当前一共有七名前端,大家都没有Native App的相关经验。
有一个15年上线的只是用来展示数据的APP,那当时也是交给外包团队做的。

📱起因

从用户使用系统的便利性出发,公司层面决定将当前产品部分模块移动化。

📱开始

移动化我们会有好几个选择 Native App、微信小程序、移动Web、类Ionic、跨平台技术栈:React Native,Flutter;

1、团队内没有IOS或者Android工程师,所以首先就pass掉了Native App。

2、因为产品的主要诉求是通过推送来提高活跃率,推送成为了必要的功能,考虑到这一点,就淘汰了移动端web和微信小程序。

3、关于Flutter,Flutter在我调研的时候 还处于没有发正式版的状态,而且Flutter国内的生态并没有很完善。

所以最终选择当前已经相对成熟的React Native技术栈,有问题便于查找和请教。

📱坑点

1.Android Studio升级

我们基础工程是基于React Native 0.59.4 init出来的。ios开发使用Xcode 10。android开发使用 Android Studio使用3.0

刚一开始的时候团队另外两位小伙伴使用ios模拟器进行预览开发,我个人使用android模拟器进行预览开发。各自相安无事。

开发到中期的时候,团队新入职小伙伴,公司给新员工配的windows电脑,所以他只能来使用Android Studio进行预览开发。然后他开发一天,提交代码。我更新完代码后发现,我跑不起来了。。好尴尬。然后我提交代码后 他也跑不起来了。。更尴尬。我就开始找问题,通过报错信息搜索解决方案(报错信息没有留存,没办法贴出来),然后也去问其他部门安卓开发的同事,他们看报错信息去解决jcenter的问题,后来发现问题是升级Android Studio的问题,Android Stutio 推荐使用 androidx 替换android support v4 所以安装的node modules里面安卓包里的以来的android support v4报错,所以将所有的依赖都换成androidx,问题解决。

没事不要升级Android Studio!!

2.Android 日期NaN

1
2
let startTimeStr = '2020-01-01 10:00:08';
let startTime = new Date(startTimeStr);

在release模式下 日期计算出问题,并不能得到正确的日期

原因是:不同系统的时间格式支持问题。 yyyy/mm/dd hh:mm 最通用

3.Android HTTPS请求失败

使用node写了一套api提供给App使用,测试环境正常运行。交给运维部署。运维部署了只开443端口 使用HTTPS访问。然后我们将配置文件中的链接改为线上链接。Android fetch报错 XHR requst failed。ios没有问题。

然后就开始搜索为什么RN Andorid使用HTTPS报错,得到的答案是需要去改android okhttp包。

img

但之前我们请求其他后台服务的HTTPS接口是正常的,所以我就在测试环境部署了一套HTTPS服务,然后也正常。看起来这个锅一定是运维的了。让运维把他们的nginx配置文件发给我。逐一排查,找到了问题

1
2
3
4
ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 223.5.5.5 valid=300s;
resolver_timeout 5s;

OCSP Stapling在验证ssl时出现问题。
在屈屈的博客找到答案

从无法开启 OCSP Stapling 说起

开发到现在能记得的问题暂时只有这三个。。

接下来会记录一下 关于RN 纯前端怎么来升级init出来的项目架构。

最近的文章

再谈跨域

之前有写过什么样情况下是跨域和一般跨域的解决方案。 之前状态我在工作中 一般遇到跨域会通过jsonp或者同域代理来解决。一般情况下不需要使用其他的技术方案。 需求场景前端: 各个独立域名的系统需要统一公共头及导航。对接统一的用户中心及导航权限。 后端: 使用node像前端下发,需要当前用户权限。 开 …

于  js 继续阅读
更早的文章

JavaScript 如何工作:V8引擎内部+关于如何编写优化代码的5个技巧

原文地址 几周之前,我们开始了一系列旨在深入挖掘JavaScript及其实际工作原理的系列:我们认为通过了解JavaScript的构建块以及它们如何共同发挥作用,您将能够编写更好的代码和应用程序。 本系列的第一篇文章重点介绍了引擎,运行时和调用堆栈的概述。 第二篇文章将深入探讨谷歌V8 JavaSc …

于  js, 翻译 继续阅读