diff --git a/docs/api/location/map.md b/docs/api/location/map.md index fc6dfa25af7b4e630d79e760bf2ccc53df29563c..e08544fe83e8082cd95afe6e43068b26091ef3ed 100644 --- a/docs/api/location/map.md +++ b/docs/api/location/map.md @@ -229,6 +229,17 @@ mapContext |center |LatLng |聚合簇的坐标 | |markerIds |Array&lt;Number&gt;|该聚合簇内的点标记数据数组 | +`initMarkerCluster(OBJECT)` 结构 + +|属性 |类型 |默认值 |必填 |说明 | +|:-|:-|:-|:-|:-| +|enableDefaultStyle |boolean |true |否 |启用默认的聚合样式 | +|zoomOnClick |boolean |true |否 |点击已经聚合的标记点时是否实现聚合分离 | +|gridSize |boolean |60 |否 |聚合算法的可聚合距离,即距离小于该值的点会聚合至一起,以像素为单位 | +|success |function | |否 |接口调用成功的回调函数 | +|fail |function | |否 |接口调用失败的回调函数 | +|complete |function | |否 |接口调用结束的回调函数(调用成功、失败都会执行) | + 示例代码 diff --git a/docs/api/plugins/payment.md b/docs/api/plugins/payment.md index e1a0d9ba842a1a744c9240581274910e04d5a943..f096925fd3040f768bc14631d5536e207a818bf8 100644 --- a/docs/api/plugins/payment.md +++ b/docs/api/plugins/payment.md @@ -28,7 +28,7 @@ uni.requestPayment是一个统一各平台的客户端支付API,不管是在 |timeStamp|String|微信小程序必填|时间戳从1970年1月1日至今的秒数,即当前的时间。|微信小程序| |nonceStr|String|微信小程序必填|随机字符串,长度为32个字符以下。|微信小程序| |package|String|微信小程序必填|统一下单接口返回的 prepay_id 参数值,提交格式如:prepay_id=xx。|微信小程序| -|signType|String|微信小程序必填|签名算法,暂支持 MD5。|微信小程序| +|signType|String|微信小程序必填|签名算法,应与后台下单时的值一致|微信小程序| |paySign|String|微信小程序必填|签名,具体签名方案参见 [微信小程序支付文档](https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=3)|微信小程序| |bannedChannels|Array<String>|否|需要隐藏的支付方式,详见 [百度小程序支付文档](https://smartprogram.baidu.com/docs/develop/api/open_payment/#requestPolymerPayment/)|百度小程序| |service|Number|字节跳动小程序必填|固定值:1(拉起小程序收银台)开发者如果不希望使用字节跳动小程序收银台,service设置为3/4时,可以直接拉起微信/支付宝进行支付:service=3: 微信API支付,不拉起小程序收银台;service=4: 支付宝API支付,不拉起小程序收银台。其中service=3、4,仅在1.35.0.1+基础库(头条743+)支持|字节跳动小程序| @@ -38,6 +38,14 @@ uni.requestPayment是一个统一各平台的客户端支付API,不管是在 |fail|Function|否|接口调用失败的回调函数|| |complete|Function|否|接口调用结束的回调函数(调用成功、失败都会执行)| | +微信小程序 `signType` 说明 + +|合法值 |说明 | +|:-|:-| +|MD5 |仅在 v2 版本接口适用 | +|HMAC-SHA256|仅在 v2 版本接口适用 | +|RSA |仅在 v3 版本接口适用 | + #### 注意事项 - APP端,如果你的应用在用户完成支付后;立即给支付的用户push消息通知。会与前端支付回调相互冲突,请延迟执行推送。 @@ -192,7 +200,7 @@ uni.requestPayment({ "partnerid": "148*****52", // 微信支付商户号 "prepayid": "wx202254********************fbe90000", // 统一下单订单号 "timestamp": 1597935292, // 时间戳(单位:秒) - "sign": "A842B45937F6EFF60DEC7A2EAA52D5A0" // 签名,这里用的 MD5 签名 + "sign": "A842B45937F6EFF60DEC7A2EAA52D5A0" // 签名,这里用的 MD5/RSA 签名 }, success(res) {}, fail(e) {} diff --git a/docs/api/storage/storage.md b/docs/api/storage/storage.md index 9673e795503f0de33a43a73f1ab632d958678a08..32bccfff55ccf67b44f7a4525616fe9eac72a843 100644 --- a/docs/api/storage/storage.md +++ b/docs/api/storage/storage.md @@ -1,4 +1,4 @@ -#### uni.setStorage(OBJECT) +#### uni.setStorage(OBJECT) @setstorage 将数据存储在本地缓存中指定的 key 中,会覆盖掉原来该 key 对应的内容,这是一个异步接口。 **OBJECT 参数说明** diff --git a/docs/app-android-abifilters.md b/docs/app-android-abifilters.md new file mode 100644 index 0000000000000000000000000000000000000000..f0cff5e9d08bb0bf7d5f8377506842a50dcd290d --- /dev/null +++ b/docs/app-android-abifilters.md @@ -0,0 +1,129 @@ +Android平台配置CPU类型针对的是为了提高运行效率使用C/C++语言开发生成的so库,需要为各cpu类型平台单独编译生成对应指令的so库。Java语言开发的代码运行在虚拟机中,由虚拟机适配CPU类型,不涉及到此问题。 + +HBuilder/HBuilderX中使用so库的功能(模块) +- Audio(录音):支持mp3格式 +- Geolocation(定位):百度 +- LivePush(直播推流) +- Maps(地图):高德、百度 +- OAuth(登录鉴权):新浪微博 +- Push(消息推送):个推、UniPush +- Share(分享):新浪微博 +- Speech(语音输入):百度,**注意:讯飞不支持64位** +- Weex(原生渲染):uni-app(自定义组件模式、nvue页面), **注意:HBuilderX2.1.5及以上版本支持** + +> HBuilderX2.7.0+ 调整 云端打包默认不再包含 x86 CPU类型库,减少apk包体积[详情](id=nox86) +> HBuilderX2.1.5+ 开始支持Android平台的新增适配64位CPU类型,云端打包支持配置App支持的CPU类型 +> 满足Google Play从2019年8月1日起上传的App必需支持64位CPU的要求。 + + + +### CPU类型 +HBulderX已适配支持以下主流CPU类型: +- armeabi-v7a +第7代及以上的ARM处理器(ARM32位),市面上大多数手机使用此CPU类型。 +- arm64-v8a +第8代、64位ARM处理器(ARM64位),最近两年新发的设备使用此CPU类型,可以兼容使用armeabi-v7a的so库。 +- x86 +少部分平板使用x86,AS模拟器中选了intel x86时使用x86处理器,以及其它常用三方模拟器通常使用x86 + +**注意:不勾选x86在模拟器上可能无法正常运行,以下是常见模拟器是否需要包含x86的情况** +- 雷电模拟器: + 3.x必须包含x86,否则无法正常运行;4.x无需包含x86。 +- 夜神模拟器: + 必须包含x86,否则无法正常运行 +- MuMu模拟器: + 无需包含x86 +- 逍遥模拟器: + 无需包含x86 +- BlueStacks(蓝叠模拟器): + 无需包含x86 +- 腾讯模拟器(手游助手): + 必须包含x86,否则无法正常运行 +- 其它模拟器: + 未测试验证,建议包含x86,确保在模拟器正常运行 + + +### 配置支持的CPU类型 +**可视化界面配置** +打开项目的manifest.json文件,在 “App常用其它设置” -> “Android设置” -> “支持CPU类型” 项中勾选需要支持的CPU类型: +![](https://native-res.dcloud.net.cn/images/uniapp/others/abifilters-manifest.png) + +**源码视图配置** +打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置 + +- uni-app项目 +在 "app-plus"->"distribute"->"android" 节点的 abiFilters 属性配置支持的CPU类型,示例如下: +``` js + "app-plus": { + "distribute": { + "android": { + "abiFilters": [ + "armeabi-v7a", + "arm64-v8a" + ] + //... + }, + //... + }, + //... + }, + //.. +``` + + +#### 离线打包配置 +使用Android studio打开Android原生项目,打开对应项目的build.gradle文件。 +在Android -> defaultConfig下添加支持的CPU类型,如下示例: +``` +defaultConfig{ + ndk { + abiFilters 'arm64-v8a','armeabi-v7a' + } +} +``` + +**注意:离线打包仅支持arm64-v8a、armeabi-v7a、x86三种类型,建议根据自己需求选择打包的CPU类型** + + +### CPU类型选择建议 +ARM64位(arm64-v8a)CPU可以兼容ARM32的指令,也就是说只选择armeabi-v7a类型的so库也可以在64位手机上运行,只是没有完全发挥CPU的性能。 +选择支持的CPU类型时请参考以下建议: +- 如果不在意apk大小,三种CPU类型都勾选 +- 如果在意apk大小,选择ARM32位即可(几乎在所有ARM指令的所有设备上都可正常运行) +- 如果要兼容一些平板和模拟器,选择ARM32位和X86 +不是所有模拟都仅支持x86指令,如雷电(4.x)、MuMu等模拟器也是支持ARM指令。 + + +### 查看apk支持的CPU类型 +使用解压工具打开apk,在lib目录下可以查看到支持的CPU类型,如下图所示: +![](https://native-res.dcloud.net.cn/images/uniapp/others/abifilters-apk.png) + + +### 常见问题 +#### 上架Google Play市场对CPU类型的要求 +提交Google Play时要求支持64位,建议选择"armeabi-v7a"和"arm64-v8a"两个即可,也可以只选择"arm64-v8a"。 + +**注意:不要勾选"x86"** + +#### CPU类型错误安装提示 +如果打包选择的CPU类型与设备不兼容,会导致无法正常安装。 +通过adb命令安装通常会提示如下错误: +``` +Performing Streamed Install +adb: failed to install android_debug.apk: Failure [INSTALL_FAILED_NO_MATCHING_ABIS: Failed to extract native libraries, res=-113] +``` + +使用Android Studio自带的x86模拟器,将不包含x86 cpu类型的apk拖到模拟器安装时会弹出如下提示框: +![](https://native-res.dcloud.net.cn/images/uniapp/others/abifilters-error.png) + + + +#### HBuilderx2.7.0+ 云端打包默认CPU类型不再包含x86 +目前市面上常见的手机都是使用ARM处理器,很少有设备使用x86处理器,因此从HBuilderX2.7.0开始云端打包调整为默认不再包含x86的CPU类型,减少apk包大小: +- uni-app项目 + 基础功能apk减少5M+,使用的三方SDK及uni原生插件越多,减少的包尺寸越大,具体值取决于其包含的x86类型的so库大小 +- 5+App、Wap2App项目 + 基础功能apk减少100K+,如果使用的三方SDK中存在so库则减少的尺寸较大,具体值取决于其包含的x86类型的so库大小 + +**注意:大多数模拟器(如夜神)必须包含x86,否则应用启动时可能会白屏,请根据上面教程进行配置** + diff --git a/docs/app-android-minsdkversion.md b/docs/app-android-minsdkversion.md new file mode 100644 index 0000000000000000000000000000000000000000..501b2207795fd9d45e5eeccf3e548b87d76b3a7a --- /dev/null +++ b/docs/app-android-minsdkversion.md @@ -0,0 +1,66 @@ +minSdkVersion用于指定应用兼容的最低Android版本(API等级),默认值为19(即最低支持Android4.4)。 +如果APP某些功能无法支持低版本Android系统的设备,可以配置minSdkVersion确保APP只能安装到指定Android版本及以上的设备。HBuilderX中可在manifest.json中进行配置minSdkVersion。 + +**️注意: App升级时 minSdkVersion 只能增加不能降低,也就是说 minSdkVersion 高的App无法被 minSdkVersion 低的App覆盖安装,开发者需要注意!** + +### 设置minSdkVersion +minSdkVersion值为Number类型,且必须为正整数,取值范围参考`Android版本列表`中的`API等级`。 + +**可视化界面配置** +打开项目的manifest.json文件,在 “App常用其它设置” -> “Android设置” -> “minSdkVersion” 项中进行设置: +![](https://native-res.dcloud.net.cn/images/uniapp/others/minsdkversion.png) + +**源码视图配置** +打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置。 + +- uni-app项目 +在 "app-plus" -> "distribute" -> "android" 节点的 minSdkVersion 属性配置,示例如下: +``` js + "app-plus": { + "distribute": { + "android":{ + "minSdkVersion": 21 + } + } + } +``` + +- 5+App/Wap2App项目项目 +在 "plus" -> "distribute" -> "google" 节点的 minSdkVersion 属性配置,示例如下: +```javascript + "plus": { + "distribute": { + "google":{ + "minSdkVersion": 21 + } + } + } +``` + +#### 注意事项 +配置minSdkVersion后保存提交App云端打包后才能生效,并注意以下问题: +- App模块配置中部分功能使用了三方SDK,三方SDK可能对minSdkVersion有要求,这时会取最大的minSdkVersion值 +- uni原生插件也可能对minSdkVersion有要求,这时会取最大的minSdkVersion值 + +**注意:云端打包时如果其他模块或插件设置了minSdkVersion,最终最大的minSdkVersion值生效** + + +### Android版本列表 +API等级与Android版本对应列表如下: + +| API等级 | Android版本号 | Android版本名称 | +| --:-- | --:-- | --:-- | +| 19 | Android4.4 | Kitkat | +| 20 | Android4.4W | Kitkat Watch | +| 21 | Android5.0 | Lollipop | +| 22 | Android5.1 | Lollipop | +| 23 | Android6.0 | Marshmallow | +| 24 | Android7.0 | Nougat | +| 25 | Android7.1 | Nougat | +| 26 | Android8.0 | Oreo | +| 27 | Android8.1 | Oreo | +| 28 | Android9.0 | Pie | +| 29 | Android10.0 | Android Q | +| 30 | Android11.0 | Android R | +| 31 | Android12.0 | Android S | + diff --git a/docs/app-android-schemes.md b/docs/app-android-schemes.md new file mode 100644 index 0000000000000000000000000000000000000000..3bbf35c96f05573f64669dfe069c8fc3ae9d26a5 --- /dev/null +++ b/docs/app-android-schemes.md @@ -0,0 +1,96 @@ +Android中的url scheme是一种页面跳转协议,通过定义自己的scheme协议,可以非常方便的实现其它三方App调用你的App。 + +**HBuilderX自带标准真机运行基座的UrlSchemes为"hbuilder://"**,方便开发者调测。 + +### 设置UrlSchemes + +**可视化界面配置** +打开项目的manifest.json文件,在 “App常用其它设置” -> “Android设置” -> “UrlSchemes” 项中进行设置: +![](https://native-res.dcloud.net.cn/images/uniapp/others/urlschemes-android.png) + +>注意: +>字符串建议使用小写字母(不要使用特殊字符、中文等),如设置为"test",那么其他App呼起你的app的scheme协议就是"test://"; +>多个scheme使用 "," 分割,每个字符串为一个scheme; +>如果可视化界面无法编辑,请切换到“源码视图”删除`schemes`节点数据重新操作。 + +**源码视图配置** +打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置 + +- uni-app项目 +在 "app-plus"->"distribute"->"android" 节点的 schemes 属性配置UrlSchemes,示例如下: +``` js + "app-plus": { + "distribute": { + "android": { + "schemes": "hbuilder,myuniapp" + //... + }, + //... + }, + //... + }, + //... +``` + +- 5+App/Wap2App项目 +在 "plus"->"distribute"->"google" 节点的 schemes 属性配置UrlSchemes,示例如下: +``` js + "plus": { + "distribute": { + "google": { + "schemes": "hbuilder,myuniapp" + //... + }, + //... + }, + //... + }, + //... +``` + +> 注:为了向下兼容,HBuilderX源码视图配置时`schemes`属性值支持字符串数组,上面示例中的值也可以这么配置["hbuilder","myuniapp"] + +**保存后提交App云端打包生效** + + +### 浏览器中通过href启动应用 +安装应用后,我们可以在H5页面中,通过href直接调用应用: +```html +test:
+``` + +### App中处理scheme启动传递的参数 +当其它三方App通过scheme启动App时,可以通过plus.runtime.arguments获取完整的urlscheme字符串。 + +- uni-app项目 +建议在应用生命周期app.vue的`onshow`事件中获取,示例代码如下: +``` js +onShow: function() { + var args= plus.runtime.arguments; + if(args){ + // 处理args参数,如直达到某新页面等 + } +} +``` + +- 5+App/Wap2App项目 +在HTML页面的js中监听'plusready'和'newintent'事件回调中获取,示例代码如下: +``` js +document.addEventListener('plusready',function(){ + checkArguments(); +},false); +// 判断启动方式 +function checkArguments(){ + console.log("plus.runtime.launcher: "+plus.runtime.launcher); + var args= plus.runtime.arguments; + if(args){ + // 处理args参数,如直达到某新页面等 + } +} +// 处理从后台恢复 +document.addEventListener('newintent',function(){ + console.log("addEventListener: newintent"); + checkArguments(); +},false); +``` + diff --git a/docs/app-android-targetsdkversion.md b/docs/app-android-targetsdkversion.md new file mode 100644 index 0000000000000000000000000000000000000000..44a4225d5e69060fbe4a95f29fa78ec27e962556 --- /dev/null +++ b/docs/app-android-targetsdkversion.md @@ -0,0 +1,67 @@ +targetSdkVersion用于指定应用的目标Android版本(API等级),默认值为28(即Android9.0)。 +> - HBuilderX3.2.13云端打包调整targetSdkVersion默认值为28 +> - HBuilderX云端打包targetSdkVersion默认值为26 + +设置targetSdkVersion值表示App适配的Android版本(API等级),设置低版本的targetSdkVersion会使APP兼容模式运行,也就可能无法用到新系统的特性,甚至在兼容模式下运行可能存在安全漏洞等问题。 +随着Android系统的升级,一些应用市场会要求设置较高的targetSdkVersion才可以提交,HBuilderX中可在项目的manifest.json中进行配置。 + + +**️注意: App升级时 targetSdkVersion 只能增加不能降低,也就是说 targetSdkVersion 高的App无法被 targetSdkVersion 低的App覆盖安装,开发者需要注意!** + +### 设置minSdkVersion +minSdkVersion值为Number类型,且必须为正整数,取值范围参考`Android版本列表`中的`API等级`。 + +**可视化界面配置** +打开项目的manifest.json文件,在 “App常用其它设置” -> “Android设置” -> “targetSdkVersion” 项中进行设置: +![](https://native-res.dcloud.net.cn/images/uniapp/others/targetsdkversion.png) + +**源码视图配置** +打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置。 + +- uni-app项目 +在 "app-plus" -> "distribute" -> "android" 节点的 targetSdkVersion 属性配置,示例如下: +``` js + "app-plus": { + "distribute": { + "android":{ + "targetSdkVersion": 30 + } + } + } +``` + +- 5+App/Wap2App项目项目 +在 "plus" -> "distribute" -> "google" 节点的 targetSdkVersion 属性配置,示例如下: +```javascript + "plus": { + "distribute": { + "google":{ + "targetSdkVersion": 30 + } + } + } +``` + + +**注意:配置targetSdkVersion后保存提交App云端打包后才能生效** + + +### Android版本列表 +API等级与Android版本对应列表如下: + +| API等级 | Android版本号 | Android版本名称 | +| --:-- | --:-- | --:-- | +| 19 | Android4.4 | Kitkat | +| 20 | Android4.4W | Kitkat Watch | +| 21 | Android5.0 | Lollipop | +| 22 | Android5.1 | Lollipop | +| 23 | Android6.0 | Marshmallow | +| 24 | Android7.0 | Nougat | +| 25 | Android7.1 | Nougat | +| 26 | Android8.0 | Oreo | +| 27 | Android8.1 | Oreo | +| 28 | Android9.0 | Pie | +| 29 | Android10.0 | Android Q | +| 30 | Android11.0 | Android R | +| 31 | Android12.0 | Android S | + diff --git a/docs/app-ios-schemes.md b/docs/app-ios-schemes.md new file mode 100644 index 0000000000000000000000000000000000000000..da91870f9040791f8ea5ecf3294d48425d3921f1 --- /dev/null +++ b/docs/app-ios-schemes.md @@ -0,0 +1,96 @@ +iOS系统中,由于沙盒的限制,导致程序之间相互隔离,需要url scheme协议来实现程序间的通信,通过定义自己的scheme协议,可以非常方便的实现其它三方App调用你的App。 + +**HBuilderX自带标准真机运行基座的UrlSchemes为"hbuilder://"**,方便开发者调测。 + +### 设置UrlSchemes + +**可视化界面配置** +打开项目的manifest.json文件,在 “App常用其它设置” -> “iOS设置” -> “UrlSchemes” 项中进行设置: +![](https://native-res.dcloud.net.cn/images/uniapp/others/urlschemes-ios.png) + +>注意: +>字符串建议使用小写字母(不要使用特殊字符、中文等),如设置为"test",那么其他App呼起你的app的scheme协议就是"test://"; +>多个scheme使用 "," 分割,每个字符串为一个scheme; +>如果可视化界面无法编辑,请切换到“源码视图”删除`schemes`节点数据重新操作。 + +**源码视图配置** +打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置 + +- uni-app项目 +在 "app-plus"->"distribute"->"ios" 节点的 schemes 属性配置UrlSchemes,示例如下: +``` js + "app-plus": { + "distribute": { + "ios": { + "schemes": "hbuilder,myuniapp" + //... + }, + //... + }, + //... + }, + //... +``` + +- 5+App/Wap2App项目 +在 "plus"->"distribute"->"apple" 节点的 schemes 属性配置UrlSchemes,示例如下: +``` js + "plus": { + "distribute": { + "apple": { + "schemes": "hbuilder,myuniapp" + //... + }, + //... + }, + //... + }, + //... +``` + +> 注:为了向下兼容,HBuilderX源码视图配置时`schemes`属性值支持字符串数组,上面示例中的值也可以这么配置["hbuilder","myuniapp"] + +**保存后提交App云端打包生效** + + +### 浏览器中通过href启动应用 +安装应用后,我们可以在H5页面中,通过href直接调用应用: +```html +
test:
+``` + +### App中处理scheme启动传递的参数 +当其它三方App通过scheme启动App时,可以通过plus.runtime.arguments获取完整的urlscheme字符串。 + +- uni-app项目 +建议在应用生命周期app.vue的`onshow`事件中获取,示例代码如下: +``` js +onShow: function() { + var args= plus.runtime.arguments; + if(args){ + // 处理args参数,如直达到某新页面等 + } +} +``` + +- 5+App/Wap2App项目 +在HTML页面的js中监听'plusready'和'newintent'事件回调中获取,示例代码如下: +``` js +document.addEventListener('plusready',function(){ + checkArguments(); +},false); +// 判断启动方式 +function checkArguments(){ + console.log("plus.runtime.launcher: "+plus.runtime.launcher); + var args= plus.runtime.arguments; + if(args){ + // 处理args参数,如直达到某新页面等 + } +} +// 处理从后台恢复 +document.addEventListener('newintent',function(){ + console.log("addEventListener: newintent"); + checkArguments(); +},false); +``` + diff --git a/docs/app-webview-error.md b/docs/app-webview-error.md new file mode 100644 index 0000000000000000000000000000000000000000..e31c7264ba4d620d70261647b5d86fd6556ce9b4 --- /dev/null +++ b/docs/app-webview-error.md @@ -0,0 +1,71 @@ +当webview组件(窗口)加载错误地址(如本地页面不存在)或者访问网络资源失败(如无法访问网络)时会自动显示默认错误页面: +![](https://native-res.dcloud.net.cn/images/uniapp/others/error-default.jpg) + +如需修改默认错误页面样式,可以通过以下方法自定义Webview的404等错误页面。 + +### 设置自定义错误页面 + +**可视化界面配置** + +打开项目的manifest.json文件,在 “App常用其它设置” -> “自定义404错误页面” 下点击 “浏览” 选择页面文件: +![](https://native-res.dcloud.net.cn/images/uniapp/others/error-manifest.png) + +> 注:建议使用html文件,并放到项目根目录下的 hybrid/html 文件夹中 + +**源码视图配置** +打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置错误页面路径,推荐使用本地地址,相对于应用根目录;设置 url 属性值为 "none" 表示关闭自定义错误页面功能,加载页面错误时显示系统默认错误页面内容。 + +- uni-app项目 +在 "app-plus" -> "error" 节点的 url 属性配置自定义错误页面路径,示例如下: +``` js + "app-plus": { + "error": { + "url": "hybrid/html/error.html" + }, + //... + }, + //... +``` + +- 5+App/Wap2App项目 +在 "plus" -> "error" 节点的 url 属性配置自定义错误页面路径,示例如下: +``` javascript + "plus": { + "error": { + "url": "error.html" + }, + //... + }, + //... +``` +其中url地址推荐使用本地地址,相对于应用根目录。 +设置为“none”则关闭跳转到错误页面功能,此时页面显示Webview默认的错误页面内容。 + + +### 错误页面中监听事件 +自定义404错误页面时,可能需要在 error.html 页面中获取错误原因,可以通过以下方法监听 "error" 事件获取完整错误信息,示例如下: +```javascript +// 获取错误信息 +document.addEventListener("error", function(e){ + var url = e.url; // 错误页面的url地址 + var href = e.href; // 错误页面的完整路径(包括完整的协议头) +},false); +``` + + +### 运行时动态设置自定义错误页面 +如果需要单独自定义某个Webview窗口的错误页面,则需要在创建时通过[WebviewStyle](http://www.dcloud.io/docs/api/zh_cn/webview.html#plus.webview.WebviewStyle)对象的errorPage属性控制: +```js +var styles = {errorPage: "error.html"}; // 设置为“none”则关闭此Webview窗口的跳转到错误页面功能 +var webview = plus.webview.create("url", "id", styles); +webview.show(); +``` + +> 注:仅5+App/Wap2App项目支持 + + +### 常见问题 +- Android平台使用iframe时如果无法加载页面在不同版本系统上存在差异: + + Android5.0及以上版本:Webview窗口对象不会加载错误页面,仅iframe节点显示无法加载页面; + + 5.0以下版本:Webview窗口对象会加载错误页面。 + diff --git a/docs/ios-uibackgroundmodes.md b/docs/ios-uibackgroundmodes.md new file mode 100644 index 0000000000000000000000000000000000000000..abf1a62819591a4e36f5842128fb67466a551e93 --- /dev/null +++ b/docs/ios-uibackgroundmodes.md @@ -0,0 +1,64 @@ +iOS平台为了减少系统资源消耗,应用默认不支持后台运行,切换到后台会停止运行。比如当应用切换到后台时音乐将暂停播放,下次切换到前台继续播放。如果应用切换到后台继续运行如播放音乐,定位等功能,需要配置支持后台运行的能力。 + +可支持以下能力: +- 后台播放音乐,设置值为"audio" +- 后台获取位置信息(定位),设置值为"location" + + +### 设置后台运行能力 +**可视化界面配置** +打开项目的manifest.json文件,在 “App常用其它设置” -> “iOS设置” -> “后台运行能力” 项中进行设置: +![](https://native-res.dcloud.net.cn/images/uniapp/others/backgroundmodes-manifest.png) + +>注意: +>"audio"表示后台播放音乐能力,"location"表示后台定位能力,更多后台能力配置参考苹果官网[UIBackgroundModes文档](https://developer.apple.com/library/archive/documentation/General/Reference/InfoPlistKeyReference/Articles/iPhoneOSKeys.html#//apple_ref/doc/uid/TP40009252-SW22); +>多个后台能力使用 "," 分割; +>如果可视化界面无法编辑,请切换到“源码视图”删除`UIBackgroundModes`节点数据重新操作。 + +**源码视图配置** +打开项目的manifest.json文件,切换到“源码视图”,根据项目类型进行配置 + +- uni-app项目 +在 "app-plus"->"distribute"->"ios" 节点的 UIBackgroundModes 属性配置后台运行能力,示例如下: +``` js + "app-plus": { + "distribute": { + "ios": { + "UIBackgroundModes": "audio,location" + //... + }, + //... + }, + //... + }, + //... +``` + +- 5+App/Wap2App项目 +在 "plus"->"distribute"->"ios" 节点的 UIBackgroundModes 属性配置后台运行能力,示例如下: +``` js + "plus": { + "distribute": { + "ios": { + "UIBackgroundModes": "audio,location" + //... + }, + //... + }, + //... + }, + //... +``` + +> 注:为了向下兼容,HBuilderX源码视图配置时`UIBackgroundModes`属性值支持字符串数组,上面示例中的值也可以这么配置["audio","location"] + +**保存后提交App云端打包生效** + + + + +#### 注意事项 +- 配置后需提交云端打包后才能生效,真机运行时请使用[自定义调试基座](https://ask.dcloud.net.cn/article/35115) +真机运行不支持此功能,需要提交到打App云端打包才生效 +- 应用切换到后台运行时,需要避免调用同步5+ API(调用直接返回数据的API),在后台运行时此类API将无法同步返回数据 +