native react 更新机制_react-native-xupdate-new 一键实现react-native应用版本更新-程序员宅基地

技术标签: native react 更新机制  

自2018年我开源了XUpdate之后,至今已迭代了14个版本,月下载量达4k+,Github的star量也已经有800+.

目前XUpdate的生态已包含Android原生SDK、Flutter插件、版本更新后台服务、版本更新管理系统. 为了能够更加丰富它的生态,我决定再写一个React-Native插件。

演示

默认更新

支持后台更新

屏幕宽高比限制显示更新

强制更新

自定义更新提示弹窗样式

快速集成指南

> 注意:这里尴尬的是,react-native-xupdate已经被别人给抢先发布了,我只能修改发布名为react-native-xupdate-new

添加依赖

npm install react-native-xupdate-new --save

链接

react-native link react-native-xupdate-new

初始化

调用XUpdate.init方法进行初始化.

调用XUpdate.addErrorListener方法设置错误监听.

import {XUpdate} from 'react-native-xupdate-new';

///初始化

initXUpdate() {

///设置初始化参数

let args = new InitArgs();

///是否输出日志

args.debug = true;

///post请求是否是上传json

args.isPostJson = false;

///是否只在wifi下才能进行更新

args.isWifiOnly = false;

///是否开启自动模式

args.isAutoMode = false;

///是否支持静默安装,这个需要设备有root权限

args.supportSilentInstall = false;

///在下载过程中,如果点击了取消的话,是否弹出切换下载方式的重试提示弹窗

args.enableRetry = false;

///初始化SDK

XUpdate.init(args).then(result => {

this.setState({

_message: '初始化成功:' + JSON.stringify(result),

});

}).catch(error => {

console.log(error);

this.setState({

_message: '初始化失败:' + error,

});

});

//设置自定义解析

XUpdate.setCustomParser({parseJson: this.customParser});

//设置错误监听

XUpdate.addErrorListener(this.errorListener);

}

使用说明

版本更新返回的Json格式

{

"Code": 0, //0代表请求成功,非0代表失败

"Msg": "", //请求出错的信息

"UpdateStatus": 1, //0代表不更新,1代表有版本更新,不需要强制升级,2代表有版本更新,需要强制升级

"VersionCode": 3, //编译版本号(唯一)

"VersionName": "1.0.2", //版本名(用于展示)

"ModifyContent": "1、优化api接口。\r\n2、添加使用demo演示。\r\n3、新增自定义更新服务API接口。\r\n4、优化更新提示界面。", //更新内容

"DownloadUrl": "https://raw.githubusercontent.com/xuexiangjys/XUpdate/master/apk/xupdate_demo_1.0.2.apk",// 文件下载地址

"ApkSize": 2048, //文件的大小(单位:kb)

"ApkMd5": "..." //md5值没有的话,就无法保证apk是否完整,每次都会重新下载。框架默认使用的是md5加密。

}

版本更新

默认更新

checkUpdateDefault() {

let args = new UpdateArgs(_updateUrl);

XUpdate.update(args);

}

默认App更新 + 支持后台更新

checkUpdateSupportBackground() {

let args = new UpdateArgs(_updateUrl);

args.supportBackgroundUpdate = true;

XUpdate.update(args);

}

调整宽高比显示的版本更新

checkUpdateRatio() {

let args = new UpdateArgs(_updateUrl);

args.widthRatio = 0.6;

XUpdate.update(args);

}

自动模式下版本更新, 如果需要完全无人干预,自动更新,需要root权限【静默安装需要】

checkUpdateAutoMode() {

let args = new UpdateArgs(_updateUrl);

args.isAutoMode = true;

XUpdate.update(args);

}

下载时点击取消允许切换下载方式

enableChangeDownLoadType() {

let args = new UpdateArgs(_updateUrl);

args.overrideGlobalRetryStrategy = true;

args.enableRetry = true;

args.retryContent = 'Github下载速度太慢了,是否考虑切换蒲公英下载?';

args.retryUrl = 'https://www.pgyer.com/flutter_learn';

XUpdate.update(args);

}

自定义Json解析

1.定义一个自定义的版本更新解析器

//设置自定义解析

XUpdate.setCustomParser({parseJson: this.customParser});

///Resolve the custom JSON content to the UpdateEntity entity class

customParser = (json) => {

let appInfo = JSON.parse(json);

return {

//必填

hasUpdate: appInfo['hasUpdate'],

versionCode: appInfo['versionCode'],

versionName: appInfo['versionName'],

updateContent: appInfo['updateLog'],

downloadUrl: appInfo['apkUrl'],

//选填

isIgnorable: appInfo['isIgnorable'],

apkSize: appInfo['apkSize'],

};

};

2.设置isCustomParse参数为true.

///使用自定义json解析

customJsonParse() {

let args = new UpdateArgs(_updateUrl3);

args.isCustomParse = true;

XUpdate.update(args);

}

直接传入UpdateEntity进行更新

///直接传入UpdateEntity进行更新提示

checkUpdateByUpdateEntity() {

let args = new UpdateArgs();

args.supportBackgroundUpdate = true;

XUpdate.updateByInfo(args, {

hasUpdate: AppInfo['hasUpdate'],

versionCode: AppInfo['versionCode'],

versionName: AppInfo['versionName'],

updateContent: AppInfo['updateLog'],

downloadUrl: AppInfo['apkUrl'],

//选填

isIgnorable: AppInfo['isIgnorable'],

apkSize: AppInfo['apkSize'],

});

}

自定义版本更新提示弹窗样式

> 目前只支持主题色和顶部图片的自定义

1.配置顶部图片的资源路径, 路径: android/app/src/main/res/values/drawable, 千万不要放到mipmap文件下,否则资源将找不到。例如:

2.设置themeColor 和 topImageRes参数。

///自定义更新弹窗样式

customPromptDialog() {

let args = new UpdateArgs(_updateUrl);

args.themeColor = '#FFFFAC5D';

args.topImageRes = 'bg_update_top';

XUpdate.update(args);

}

关联链接

微信公众号

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_39897505/article/details/111746778

智能推荐

python collections_collections.abc' is deprecated since python 3.3,an-程序员宅基地

文章浏览阅读60次。判断一个对象是否可迭代在py3.8中使用from collections import Iterable引入,提示在3.9中将会被废弃。改成from collections.abcimport Iterable引入Iterable模块>>> from collections import Iterable<stdin>:1: DeprecationWarning: Using or importing the ABCs from 'collections' in._collections.abc' is deprecated since python 3.3,and in 3.9 it will stop working

vscode插件安装_vscode安装hadoop插件-程序员宅基地

文章浏览阅读161次。参考:https://www.cnblogs.com/yihr/p/8747044.html_vscode安装hadoop插件

类模板template <class T>_template<class t>-程序员宅基地

文章浏览阅读5.6k次,点赞9次,收藏36次。类模板template <class T>类模板:类模板是对一批仅仅成员数据类型不同的类的抽象,使用类模板可以极大地提高编程的效率。例如对于以下这个类:typedef unsigned long Item;class Stack{private: enum {MAX=10};//作用域内枚举,这里使用枚举的MAX只是一个符号名称,在作用域为整个类的代码中遇到时,将用10来代替 //注意在此处使用const int MAX = 10;是不行的,因为声明类只是描述了对象的形式,并没有创建对_template

【QT】笔记(三)_painterevent和eventfilter-程序员宅基地

文章浏览阅读183次。1 自定义控件封装1.1 添加新文件 Qt- 设计师界面类 .h .cpp .ui1.2 使用自定义控件,拖拽Widget 右键Widget提升为 -> 添加提升类名->提升1.3 对外提供公共接口 set get 信号和槽2 QLabel鼠标事件2.1 鼠标进入 Enterevent 鼠标离开 LeaveEvent2.2 鼠标按下 mousePr_painterevent和eventfilter

svg滤镜和渐变-程序员宅基地

文章浏览阅读311次。svg滤镜和渐变

黑盒和白盒测试方法详解_正交矩阵法属于黑盒测试吗-程序员宅基地

文章浏览阅读2.2w次,点赞19次,收藏137次。1. 黑盒测试黑盒测试也称功能测试,测试中把被测的软件当成一个黑盒子,不关心盒子的内部结构是什么,只关心软件的输入数据与输出数据。黑盒测试的方法有7个, 分别是: 基于需求的设计方法, 等价类划分, 边界值, 因果图, 正交矩阵法, 场景设计法, 错误推测法黑盒测试方法, 详见https://blog.csdn.net/asdx1020/article/details/10487091..._正交矩阵法属于黑盒测试吗

随便推点

STM32 串口中断服务函数(学习笔记:2)_串口中断函数-程序员宅基地

文章浏览阅读1.1w次,点赞7次,收藏36次。参考教程:野火以串口1为例,在利用串口进行接受数据时,我们要对STM32进行串口的中断配置。先对进行宏定义(起个别名),方便移植:#define DEBUG_USART_IRQ USART1_IRQn //串口中断的中断源#define DEBUG_USART_IRQHandler USART1_IRQHandler若要调用相关的中断功能,在NVIC中配置相关的中断优先级和中断号。以下是中断函数(有每一步操作的详细备._串口中断函数

python任意矩阵,求转置_python中矩阵转置的运算符-程序员宅基地

文章浏览阅读1.6k次。扫描第一行,在tm的第一列从上至下附加,然后再第二列附加举例:扫描第一行1,2,3,加入到tm的第一列,然后扫描第二行4,5,6,追加到tm的第二列过程演示:#定义一个矩阵,不考虑稀疏矩阵# 1 2 3 1 4# 4 5 6 ==>> 2 5# 3 6#任意矩阵转置import datetimestart = dateti..._python中矩阵转置的运算符

mysql myisam b 树_浅析b-树 b+树 以及Mysql的Innodb,Myisam引擎-程序员宅基地

文章浏览阅读787次。B-树性质B-树可以看作是对2-3查找树的一种扩展,即他允许每个节点有M-1个子节点。1根节点至少有两个子节点2每个节点有M-1个key,并且以升序排列3位于M-1和M key的子节点的值位于M-1和M key对应的Value之间其它节点至少有M/2个子节点下图是一个M=3 阶的B树这里简单说明下图中的小黑方块表示对应关键字所代表的文件的存储位置,实际上可以看做是一个地址,比如根节点中17旁边的小..._myisam是b-树吗

【OpenFOAM学前预备3——安装OpenFOAM-v8】_openfoam安装教程-程序员宅基地

文章浏览阅读8.6k次,点赞10次,收藏75次。OpenFOAM有两家版本,我安装的是OpenFOAM-v8,后续会安装OpenFOAM 2206,并实现多版本共存。这个通过编译的方式安装OpenFOAM-v8的过程,最早是参考东岳流体网站的,我一共给三台机子组双系统,安装了三遍都是没问题的。..._openfoam安装教程

c语言函数声明大全及详解,C语言之函数的声明详解-程序员宅基地

文章浏览阅读8.1k次,点赞3次,收藏16次。函数的声明1.函数只能定义在函数外,不能定义在函数内2.函数不允许重名,C语言中函数没有重载3.函数只要一经定义,就可以在任意函数中调用注意:如果函数定义在它调用之后,那么必须在调用之前,先声明这个函数声明的语法:返回值类型 函数名(参数列表);tips:声明函数其实只要复制函数头,打个分号就可以了再注意: 1、函数定义的时候函数头是什么样子,那么声明的时候也必须是这个样子的2、如果有参数的函数,..._c 声明

2020年最热门的 10 个 Java 微服务框架_java 高大上的服务组件-程序员宅基地

文章浏览阅读179次。1、Spring BootJava 构建 Spring 应用程序已经有很长一段时间了,Spring Boot 是 Spring 的一个特定版本,它通过对配置细节的处理,使微服务构建更加简便。创建 Spring Boot 旨在自启动任何类型的 Spring 项目,而不仅仅是微服务。应用程序完成后,Spring Boot 将在 web 服务器中混合,并输出一个 JAR 文件,JVM 除外。你可以将其视为原始 Docker 容器。这也是许多负责构建微服务的开发者都非常喜欢 Spring Boot 的原因。_java 高大上的服务组件

推荐文章

热门文章

相关标签