react native 差异热更新js&apk,我感觉好多人需要



  • 中文网自己写了一个,我也写了一个,我楼下那个也写了一个(反正我觉得我写的是最好的,大牛读下代码就知道了),啥都不说先上项目地址
    https://github.com/shenzhenjinma/react-native-horse-push
    具体原理看优酷视频第46分钟开始 http://v.youku.com/v_show/id_XMTUxOTE5MzQwNA==.html

    流程图这样的
    alt text

    集成了灰度部署,但是需要再后端实现,这里因为没有时间就先写差异更新, 文档肯定写的不好,我有空再写详细点,有啥问题加qq群389969823 就不装逼写那么多英文了,给国人看的都中文吧 这是一个中国式的react native更新 他包含 apk 与 js的差异更新 并且支持灰度部署,需要通过后端实现。 这个插件已经在app端实现了所有需要的功能了,后端我还在写,如果你很急可以根据你的业务逻辑写下你的后端,到时候后端会放出。 这里我会给你后端如何返回数据的一个简单demo。

    业务流程图

    把这个项目下载下来,在你的程序引入这个依赖包

    在安卓的assets文件夹下面放置你的js bundle文件,文件名一定要为 horse.push.js,就是我们的基础,因为我们的差异更新必须有一个基础包,在你发布到时候的时候你可以内嵌一个最新的jsbundle包就可以了
    创建安卓程序的application (in Application.java)
    public void onCreate() {
    HorsePush.getInstance(getApplicationContext(), "http://you.server/horsepush", "you_channel");// <------ 加入这个代码
    }
    修改 MainActivity (in MainActivity.java)
    protected void onCreate(Bundle savedInstanceState) {
    startActivity(new Intent().setClass(getApplicationContext(), HorsePushStartPage.class));// <------ 加入这个代码,使用启动屏
    }

    protected String getJSBundleFile() {
        return HorsePush.getJSBundleFile(this); // <------ 加入这个代码告诉rn通过本地启动
    } 
    
    protected void onResume() {
        HorsePush.reCheckUpdate();//<------每次从后台返回都会尝试更新
    }
    

    }
    生成差异文件

    通过 bsdiff生成,这两天没空,我会更新的,很简单的你自己研究下bsdiff的用法
    Usage

    每次打开app的时候都会请求你在application里面写的接口,由接口返回更新数据,数据格式如下,
    每次会吧自己的app版本号和渠道号和js的md5传送给服务器,由服务器返回的数据决定是差异更新还是完整更新,
    如果差异更新里面字段有内容就用差异更新进行更新,

    {
    "code": 200,
    "msg": "获取成功",
    "data": {
    "javaVersionCode": 0,
    "javaVersionInfo": "发现新的apk版本",
    "javaForceUpdate": false,
    "javaPatchDownlink": "http://you.server/patch.apk",
    "javaDownlink": "http://you.server/newversion.apk",
    "javaDownlinkMd5": "you apk md5",
    "jsVersionInfo": "欢迎使用xxx,点击确定进入最新版",
    "jsForceUpdate": false,
    "jsPatchDownlink": "http://you.server/patch.js",
    "jsDownlink": "http://you.server/newversion.js",
    "jsDownlinkMd5": "you js md5",
    "startpageimg": "http://you.server/startpageimg.jpg",
    }
    }



  • 顶起来,真的要顶起来



  • 顶!!!!!!!!!!!!!!!!!!!!!!!!!!!



  • 我觉得在发送md5给服务器那里的流程处理的不是很好,比如设想这么一种情况:

    发现了更新,然后下载差异文件,下载完毕,然后执行启动。

    那么,如果在网路阻塞或并不是很理想的情况下,那就直接启动不起来了。
    所以,我觉得可以这么优化:首先启动APP,然后后台异步判断更新,有更新,直接进入下载替换流程,没有则跳过。
    这时候,应用在下次启动的时候,就是最新版本了。

    还有一点就是资源文件大可以不必自己搭建一个服务器,既浪费money也维护麻烦,还担心是否会被hack而导致用户客户端安全问题。
    所以可以把资源文件放在github或其他私人仓库中,开个page服务(可以不需要)即可



  • @FB 你没看过我的代码,网络那块有优化的



  • 先mark,到学习打包的时候再来看



  • 这个必须要顶了,谢谢分享。



  • mark一下,以后留着看


登录后回复