RN学习5——QDaily iOS app中通信和热修复实践

因为我们还用React Native 0.30版本,以后肯定会换最新版本,所以着急炒炒这份冷饭,总结总结使用经验。

上一篇介绍了Android的一些React Native应用中Native部分的开发,这篇主要在这个基础上继续介绍下iOS部分。iOS坑会少一点。

该文章为系列文章,之前的文章为RN学习1——前奏,app插件化和热更新的探索RN学习2——客户端开发者的一些准备工作RN学习3——集成进现有原生项目RN学习4——QDaily Android app中通信和热修复实践

一、先说针对hot fix的支持

启动时请求JSBundle更新

直接看流程图,此类用来管理JSBundle的位置以及热更新的版本。


阅读更多

RN学习4——QDaily Android app中通信和热修复实践

React Native现在已经到了0.37版本了,在集成RN初期使用的0.30版本还不支持将resources打入bundle实施热更新,0.37版本已经解决了这些问题,如果再不写篇文章,炒炒这份冷饭,那就过气了。

QDaily现在在Android和iOS的版本中都集成了React Native,用其做广告效果页的展示。

本文介绍基于Android平台,在RN进行混合app研发过程中,native部分做过的一些工作和踩过一些坑。

本该双平台一起介绍的,但Android的坑多,先说Android,iOS的对应工作会在下个文章描述。

该文章为系列文章,之前的文章为RN学习1——前奏,app插件化和热更新的探索RN学习2——客户端开发者的一些准备工作RN学习3——集成进现有原生项目

一、Android中RN的View初始化及传参

马上看代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//React相关组件初始化
ReactRootView mReactRootView = new ReactRootView(this);
mReactInstanceManager = ReactInstanceManager.builder()
.setApplication(getApplication())
.setJSBundleFile(getBundleFilePath())
.setJSMainModuleName("index.android")
.addPackage(new MainReactPackage())
.setUseDeveloperSupport(BuildConfig.DEBUG)
.setInitialLifecycleState(LifecycleState.BEFORE_RESUME)
.setUseOldBridge(true)
.build();

//准备参数
Bundle bundle = new Bundle();
bundle.putString("url", "http://www.qdaily.com");
bundle.putFloat("totalSeconds", 12);
bundle.putInt("style", 1);
bundle.putString("extras", "{\"key\" : \"value\"}");
bundle.putStringArray("imagePaths", new String[]{"url1", "url1"});

//组件启动
mReactRootView.startReactApplication(mReactInstanceManager, "adImageLaunch", bundle);

阅读更多

Android M、N适配踩坑

我们上个月才决定开始进行Android M、N的集中适配,发现很多问题,在此一起进行总结。

首先我们把buildToolsVersion和compileSdkVersion都改为24,相关support的lib也都改为24.*,以此放开了适配,遇上了很多坑。

这里不是一个大而全的适配方案,仅仅是一个小app(好奇心日报)的适配总结。

Android N的适配主要为组内同事操刀,所以文内部分内容源于该同事的总结。

ps:此后统一博客文章的路由命名方式,改为文章创见时间命名,如“2016-11-20”,若当天有第二篇则顺序命名为“2016-11-20-1”,以此来统一化,避免未来路由失效问题。

一、权限适配 – Android M

作为一个新闻类app,适配的最主要的部分应该就是权限了。
Android6.0引入了动态权限控制,7.0使用了私有目录被限制访问Strict Mode API 政策
因此权限适配包含app权限获取部分和私有目录访问部分。

阅读更多

QDaily app连续crash处理方案

上周出现了一次MIUI8.0的开机crash情况,在已经提交应用市场审核后通过的前一刻发现并下架,但也惊出了一身冷汗,深刻感觉开机crash的保护方案尤其重要。
以前有crash的保护方案,但只是在连续crash后进行本地缓存清理,而且在Android端一直做的不够,不能够处理很多复杂情况。事实证明,这半年出现过两次打开crash的情况(一次iPad,一次MIUI8.0),之前的保护方案都未能生效。
本文先进行头脑风暴,画出思维导图,然后进行细化和测试。

思维导图

先出梗概,之后慢慢进行两个系统的细化实现。


阅读更多

闲聊计划

看了年初的计划,基本都没完成,基本都做了一些。

以前会要求自己每周列一个计划给自己,下周看完成情况,也是基本上都完不成,但每周很充实,都学了很多。

最近频繁往返京津、京冀,弄得自己好累,也耽误了个人的学习和提高,这样不好,缺少充实感和安全感,弄得这两天竟然怀疑人生。

所以计划还是有用的,就如同三只青蛙的励志段子,起码它告诉我这段时间我最重要的那三只青蛙是什么,一有机会还是会去做的。

这半年,看了几本书,写了几篇文章,学了一点新技术,也推动了组内的分享学习,挺好。
涨了工资,买了房子,办了户口,还有些希望。
也锻炼,也健身,也去咖啡馆研究过技术,不过没坚持,算是低谷吗?

虽然没达标,但起码有些回忆。

以后注意,还是要有点紧迫感。

都是瞎扯,有个博客发泄,还挺好。

QDaily app流量和文章打开速度优化--js和css的加载逻辑

本文属于“好奇心日报app的流量和文章打开速度优化”系列文章第二篇,主要介绍为实现文章尽快的打开速度而进行的js和css的预载和缓存以及重用的逻辑。

整篇代码均为Objective-C,Android可以参考书写。

前言

好奇心日报所有文章都是自产,js和css文件在所有文章中都使用的一套进行逻辑和样式处理。在每次前端同事修改了js或者css代码后,会给该文件直接生成一个64位的hashcode附在其后,以区分不同版本,用于浏览器端更新使用,例如:

http://app3.qdaily.com/assets/app3/common-bc6aa258d92609720eb97f34f86f978367bd3d849c9c0bbc82feeed9e79b6623.js

其中主要包括common.js、show.js、common.css和show.css四个文件。

阅读更多

吐槽《盛世的蝼蚁》


有人还没看过这篇文章,所以文章结尾附上原文

说是吐槽《盛世的蝼蚁》,其实是想表达下朋友圈中的这个病毒分享现象。

每次出现这种群体性分享情况,我的第一印象都是“暴民政治”,这堆暴民!民众懂个屁啊,国家肯定是精英治理。

国家的存在的主要目的是维护秩序,换句话说,维护大多数人的利益。维稳是国家的天然职责,而对穷人的福利却不是。国家和底层群众的基本关系就是,国家一定要避免底层群众揭竿而起。

读过《中国是部金融史》,才知道什么才叫做天地不仁,以万物为刍狗。

阅读更多

微信上最近很火很炫的广告是怎么实现的

首先致敬微信团队,再一次引领了移动互联网产品的发展方向,给手机端广告再开了一扇门!

感谢曾经在微信工作的经历,让我更理解互联网

如果文章有任何不妥的地方,请直接邮件chaisong.cn@gmail.com

如果你喜欢我的文章,可以直接访问我的博客,欢迎批评指正。

一、广告介绍

不清楚的朋友先看微信团队对这个广告的介绍:朋友圈原生推广页广告随奥运上线

阅读更多