HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

七剑下天山!HBuilderX 2.6 众多大招来袭

更新日志

疫情导致我们不得不远程办公,但不妨碍硕果累累。HBuilderX 2.6 是有史以来release里标记“【重要】”最多的版本。
为了帮助开发者了解这些【重要】都意味着什么,小编特整理7个大招的详解,谓之“七剑下天山”。

第一剑 uniCloud

一句话描述:云开发,js编写后端代码

  • 对于程序员,从此你又get一个新技能,用熟悉的js,轻松搞定前后台整体业务。
  • 对于开发商:
    • 开发成本大幅下降。不用再雇佣php或java等服务器工程师,每年至少节省几十万;
    • 你只需专注于你的业务,其他什么服务器运维、弹性扩容、防DDoS攻击,全都不需要操心;

uniCloud有什么特点:

  • 全端云开发
    微信、支付宝、百度小程序,都上线了云开发,但无法跨端。
    uniCloud支持所有端,App、Web、各家小程序,一套代码搞定全端。
  • Serverless模式
    再也不用购买云主机、不用安装配置环境、不用处理双机热备负载均衡、不用处理扩容、不用操心DDoS攻击
    你只管用js写你的逻辑,其他都由云服务厂商搞定
  • 便宜
    首先节省了雇佣专职服务器工程师的成本
    其次uniCloud的租用费用也低于传统云主机的租用
    最后,目前uniCloud处于公测期间,一切云资源全部免费!服务器、存储、数据库都免费!

在新冠肺炎期间,各地火速上线抗疫项目,“uni-app+uniCloud”成为神兵利器,服务数百机构、上千万民众,为抗疫做出巨大贡献,详见新冠案例汇总:xinguan2020.dcloud.net.cn/

戳此链接查阅uniCloud官方文档

第二剑 uni-AD 广告联盟

DCloud帮助开发者省钱,更帮助开发者赚钱。
现在风险投资环境严峻,很多应用无法健康生存和发展。DCloud急开发者之所急,提供最佳变现助力,推动开发者生态健康发展。

uni-AD的特点:

  • 开发一次,App、小程序等多端均有广告(H5端广告很快也会上线)
  • 聚合腾讯广点通、头条穿山甲、360广告联盟等众多高收益广告源
  • 开屏、banner、信息流、激励视频各种广告形式全都有
  • 动态分配,自动择高价展示,大幅提高广告位填充率、降低广告重复率
  • 引擎底层原生支持,避免双开屏、开屏不及时、原生广告和webview内容混排错误等诸多问题

还有更好的变现平台吗?没有了。
激励视频的单位点击高达2元。这意味着开发者甚至可以围绕uni-AD全新开发或重构自己的应用,与手机用户共享高收益,比如看广告送积分或现金,在获客和变现上走出新的道路。

戳开uni-AD官网,赶快开通uni-AD变现!

第三剑 HBuilderX的内部资源管理器

一句话描述:编辑器和资源管理器合体了

传统开发工具,仅仅依靠左侧小小的项目树来管理资源文件,便利性和效率是远远不够的。
HBuilderX内置的资源管理器,给你一个更大的资源管理界面,大幅提高文件的管理效率。

特点:

  • 更大、更漂亮

  • 为开发者订做的资源管理器

    • 直接显示html标题、vue页面、组件的名字
    • 预览markdown内容
    • svn/git单独列显示

戳此了解内置资源管理器的更多功能

第四剑 easycom

传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom将其精简为一步。
只要组件安装在项目的components目录下,并符合 components/组件名称/组件名称.vue 的目录结构。就可以不用引用、注册,直接在页面中使用。

<template>  
    <view class="container">  
        <uni-list>  
            <uni-list-item title="第一行"></uni-list-item>  
            <uni-list-item title="第二行"></uni-list-item>  
        </uni-list>  
    </view>  
</template>  
<script>  
    // 这里不用import引入,也不需要在components内注册uni-list组件。template里就可以直接用  
    export default {  
        data() {  
            return {  

            }  
        }  
    }  
</script>

不管components目录下安装了多少组件,easycom打包后会自动剔除没有使用的组件,对组件库的使用尤为友好。

组件库批量安装,随意使用,自动按需打包。以官方的uni-ui为例,在HBuilderX新建项目界面选择uni-ui项目模板,只需在页面中敲u,拉出大量组件代码块,直接选择,即可使用。大幅提升开发效率,降低使用门槛。

戳此查看easycom的文档

第五剑 renderjs

一句话描述:renderjs是一个运行在视图层的js。
它打开一个潘多拉魔盒。

  • 大幅降低逻辑层和视图层的通讯损耗,提供高性能视图交互能力
    逻辑层和视图层分离有很多好处,但也有一个副作用是在造成了两层之间通信阻塞。尤其是小程序和App的Android端阻塞问题影响了高性能应用的制作。
    微信小程序推出了wxs缓解此问题。
    uni-app兼容wxs,并且在App和H5端也实现了wxs。但微信定义的wxs限制太多,还是有很多高性能需求无法满足。
    于是renderjs诞生。
    renderjs只有App和H5支持,但它可以极大的提升通信效率。
    来看个基于renderjs的示例,App端流畅的canvas动画,超过了微信小程序的性能。

hello uni-app示例中可真实体验,对比App端和小程序端的性能差异。下图是App端录屏gif。

  • 在视图层操作dom,运行for web的js库
    官方不建议在uni-app里操作dom,但如果你不开发小程序,想使用一些操作了dom、window的库,其实可以使用renderjs来解决。
    在app-vue环境下,视图层由webview渲染,而renderjs运行在视图层,自然可以操作dom和window。
    这是一个基于renderjs运行echart完整版的示例:renderjs版echart
    同理,f2、threejs等库都可以用了。

戳此查看renderjs的文档

第六剑 Android新增X5内核

x5浏览器内核,是腾讯推出的一个增强webview内核。
在uni-app中,当App使用vue页面时,视图层渲染在webview里,此时使用x5,可在安卓端解决如下问题:

  • rom自定义主题字体适配
    原生字体受rom的主题字体影响,而国内部分做的不够好的rom,其webview的字体却不受主题字体影响。
    当这类Android手机切换主题字体后,就会造成原生渲染部分和webview渲染部分字体不一致。
    如果app端使用nvue,不存在此问题。但如果使用vue,则只能弃用系统webview了。
    但在App里自带一个50M的webview不太现实,使用装机量巨大的腾讯x5内核是更优选择。
    有了x5,uni-app的vue页面,5+和wap2app的html页面,均可解决字体统一问题。
  • 低端机浏览器兼容性等问题
    在Android4.4、5.0等老手机上,系统webview版本较低,很多css无法支持。
    引入x5内核,可以使用较新的css语法(如粘性布局),抹平css的浏览器兼容性问题。(uni-app的js运行在独立的jscore里,原本也不存在浏览器兼容问题)

戳此查看配置x5的文档

第七剑 uni小程序sdk

一句话描述:原生App内嵌uni小程序sdk,快速实现小程序能力,或部分栏目实现动态化

  • 你的原生App也想构建小程序平台?
  • 你的原生App部分栏目希望动态化和跨平台?

那么uni小程序sdk正是你需要的。

  • 它能为你的App强化生态,给用户带来更多服务。
  • 它能提升你的App开发效率、发版效率,降低协作耦合

来看看集成效果:

戳此链接查阅uni小程序sdk官方文档


七剑下天山,不为杀人越货,只为给开发者相赠七把利器,请接剑!

2.6版本还修复了众多bug,增强了v3编译器稳定性。
完整版2.6.0 release 详见:https://update.dcloud.net.cn/hbuilderx/changelog/2.6.0.20200223.html

最后,DCloud新春招聘开启啦。前端、Android、C++工程师,简历向 hr2013@dcloud.io 砸来吧!

继续阅读 »

疫情导致我们不得不远程办公,但不妨碍硕果累累。HBuilderX 2.6 是有史以来release里标记“【重要】”最多的版本。
为了帮助开发者了解这些【重要】都意味着什么,小编特整理7个大招的详解,谓之“七剑下天山”。

第一剑 uniCloud

一句话描述:云开发,js编写后端代码

  • 对于程序员,从此你又get一个新技能,用熟悉的js,轻松搞定前后台整体业务。
  • 对于开发商:
    • 开发成本大幅下降。不用再雇佣php或java等服务器工程师,每年至少节省几十万;
    • 你只需专注于你的业务,其他什么服务器运维、弹性扩容、防DDoS攻击,全都不需要操心;

uniCloud有什么特点:

  • 全端云开发
    微信、支付宝、百度小程序,都上线了云开发,但无法跨端。
    uniCloud支持所有端,App、Web、各家小程序,一套代码搞定全端。
  • Serverless模式
    再也不用购买云主机、不用安装配置环境、不用处理双机热备负载均衡、不用处理扩容、不用操心DDoS攻击
    你只管用js写你的逻辑,其他都由云服务厂商搞定
  • 便宜
    首先节省了雇佣专职服务器工程师的成本
    其次uniCloud的租用费用也低于传统云主机的租用
    最后,目前uniCloud处于公测期间,一切云资源全部免费!服务器、存储、数据库都免费!

在新冠肺炎期间,各地火速上线抗疫项目,“uni-app+uniCloud”成为神兵利器,服务数百机构、上千万民众,为抗疫做出巨大贡献,详见新冠案例汇总:xinguan2020.dcloud.net.cn/

戳此链接查阅uniCloud官方文档

第二剑 uni-AD 广告联盟

DCloud帮助开发者省钱,更帮助开发者赚钱。
现在风险投资环境严峻,很多应用无法健康生存和发展。DCloud急开发者之所急,提供最佳变现助力,推动开发者生态健康发展。

uni-AD的特点:

  • 开发一次,App、小程序等多端均有广告(H5端广告很快也会上线)
  • 聚合腾讯广点通、头条穿山甲、360广告联盟等众多高收益广告源
  • 开屏、banner、信息流、激励视频各种广告形式全都有
  • 动态分配,自动择高价展示,大幅提高广告位填充率、降低广告重复率
  • 引擎底层原生支持,避免双开屏、开屏不及时、原生广告和webview内容混排错误等诸多问题

还有更好的变现平台吗?没有了。
激励视频的单位点击高达2元。这意味着开发者甚至可以围绕uni-AD全新开发或重构自己的应用,与手机用户共享高收益,比如看广告送积分或现金,在获客和变现上走出新的道路。

戳开uni-AD官网,赶快开通uni-AD变现!

第三剑 HBuilderX的内部资源管理器

一句话描述:编辑器和资源管理器合体了

传统开发工具,仅仅依靠左侧小小的项目树来管理资源文件,便利性和效率是远远不够的。
HBuilderX内置的资源管理器,给你一个更大的资源管理界面,大幅提高文件的管理效率。

特点:

  • 更大、更漂亮

  • 为开发者订做的资源管理器

    • 直接显示html标题、vue页面、组件的名字
    • 预览markdown内容
    • svn/git单独列显示

戳此了解内置资源管理器的更多功能

第四剑 easycom

传统vue组件,需要安装、引用、注册,三个步骤后才能使用组件。easycom将其精简为一步。
只要组件安装在项目的components目录下,并符合 components/组件名称/组件名称.vue 的目录结构。就可以不用引用、注册,直接在页面中使用。

<template>  
    <view class="container">  
        <uni-list>  
            <uni-list-item title="第一行"></uni-list-item>  
            <uni-list-item title="第二行"></uni-list-item>  
        </uni-list>  
    </view>  
</template>  
<script>  
    // 这里不用import引入,也不需要在components内注册uni-list组件。template里就可以直接用  
    export default {  
        data() {  
            return {  

            }  
        }  
    }  
</script>

不管components目录下安装了多少组件,easycom打包后会自动剔除没有使用的组件,对组件库的使用尤为友好。

组件库批量安装,随意使用,自动按需打包。以官方的uni-ui为例,在HBuilderX新建项目界面选择uni-ui项目模板,只需在页面中敲u,拉出大量组件代码块,直接选择,即可使用。大幅提升开发效率,降低使用门槛。

戳此查看easycom的文档

第五剑 renderjs

一句话描述:renderjs是一个运行在视图层的js。
它打开一个潘多拉魔盒。

  • 大幅降低逻辑层和视图层的通讯损耗,提供高性能视图交互能力
    逻辑层和视图层分离有很多好处,但也有一个副作用是在造成了两层之间通信阻塞。尤其是小程序和App的Android端阻塞问题影响了高性能应用的制作。
    微信小程序推出了wxs缓解此问题。
    uni-app兼容wxs,并且在App和H5端也实现了wxs。但微信定义的wxs限制太多,还是有很多高性能需求无法满足。
    于是renderjs诞生。
    renderjs只有App和H5支持,但它可以极大的提升通信效率。
    来看个基于renderjs的示例,App端流畅的canvas动画,超过了微信小程序的性能。

hello uni-app示例中可真实体验,对比App端和小程序端的性能差异。下图是App端录屏gif。

  • 在视图层操作dom,运行for web的js库
    官方不建议在uni-app里操作dom,但如果你不开发小程序,想使用一些操作了dom、window的库,其实可以使用renderjs来解决。
    在app-vue环境下,视图层由webview渲染,而renderjs运行在视图层,自然可以操作dom和window。
    这是一个基于renderjs运行echart完整版的示例:renderjs版echart
    同理,f2、threejs等库都可以用了。

戳此查看renderjs的文档

第六剑 Android新增X5内核

x5浏览器内核,是腾讯推出的一个增强webview内核。
在uni-app中,当App使用vue页面时,视图层渲染在webview里,此时使用x5,可在安卓端解决如下问题:

  • rom自定义主题字体适配
    原生字体受rom的主题字体影响,而国内部分做的不够好的rom,其webview的字体却不受主题字体影响。
    当这类Android手机切换主题字体后,就会造成原生渲染部分和webview渲染部分字体不一致。
    如果app端使用nvue,不存在此问题。但如果使用vue,则只能弃用系统webview了。
    但在App里自带一个50M的webview不太现实,使用装机量巨大的腾讯x5内核是更优选择。
    有了x5,uni-app的vue页面,5+和wap2app的html页面,均可解决字体统一问题。
  • 低端机浏览器兼容性等问题
    在Android4.4、5.0等老手机上,系统webview版本较低,很多css无法支持。
    引入x5内核,可以使用较新的css语法(如粘性布局),抹平css的浏览器兼容性问题。(uni-app的js运行在独立的jscore里,原本也不存在浏览器兼容问题)

戳此查看配置x5的文档

第七剑 uni小程序sdk

一句话描述:原生App内嵌uni小程序sdk,快速实现小程序能力,或部分栏目实现动态化

  • 你的原生App也想构建小程序平台?
  • 你的原生App部分栏目希望动态化和跨平台?

那么uni小程序sdk正是你需要的。

  • 它能为你的App强化生态,给用户带来更多服务。
  • 它能提升你的App开发效率、发版效率,降低协作耦合

来看看集成效果:

戳此链接查阅uni小程序sdk官方文档


七剑下天山,不为杀人越货,只为给开发者相赠七把利器,请接剑!

2.6版本还修复了众多bug,增强了v3编译器稳定性。
完整版2.6.0 release 详见:https://update.dcloud.net.cn/hbuilderx/changelog/2.6.0.20200223.html

最后,DCloud新春招聘开启啦。前端、Android、C++工程师,简历向 hr2013@dcloud.io 砸来吧!

收起阅读 »

Android平台云端打包权限配置

权限 Android

此文档将不再维护,请参考新文档:https://uniapp.dcloud.io/tutorial/app-permission-android

根据工业和信息化部关于开展APP侵害用户权益专项整治要求,应用的隐私政策中需详细描述使用权限的用途。
为了不避免应用使用过多权限,HBuilderX2.6.3+版本对应用默认要求的权限进行简化,对第三方SDK需要的权限提供方法根据实际需求进行配置。

默认使用的基础权限

提交云端打包后会自动添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<uses-permission android:name="com.asus.msa.SupplementaryDID.ACCESS" />  
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />  
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />  
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

权限说明:

  • android.permission.INTERNET
    使用网络权限,应用基础权限
  • android.permission.READ_EXTERNAL_STORAGE 和 android.permission.WRITE_EXTERNAL_STORAGE
    读写SD卡权限,系统授权提示未“访问设备上的照片、媒体内容和文件”,可以参考这里配置应用启动时申请读写手机存储策略
  • android.permission.READ_PHONE_STATE、ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE
    读取设备标识使用,用于uni统计服务,可以参考这里配置应用启动时申请访问设备信息权限策略
  • android.permission.INSTALL_PACKAGES、android.permission.REQUEST_INSTALL_PACKAGES
    安装apk需要的权限,应用中使用plus.runtime.install升级应用则需要此权限
    注意:HBuilder2.6.3+开始Goog Play渠道默认不再添加此权限,因为GooglePlay审核规则禁止应用下载apk更新,必须通过上传GooglePlay审核更新

特定权限说明:

  • com.asus.msa.SupplementaryDID.ACCESS
    获取设备标识信息oaid在华硕设备上需要用到的权限
  • com.huawei.android.launcher.permission.CHANGE_BADGE
    设置应用角标功能在华为设备上需要用到的权限
  • com.android.launcher.permission.INSTALL_SHORTCUT
    创建桌面快捷方式权限,应用中使用plus.navigator.createShortcut创建桌面快捷方式则需要此权限。
  • com.android.launcher.permission.UNINSTALL_SHORTCUT
    删除桌面快捷方式权限,应用中使用native.js删除桌面快捷方式则需要此权限

<a id='sdkpermission' />

Android自动添加三方SDK(或模块)需要的权限

提交云端打包时,勾选使用三方SDK相关的功能模块时,默认会自动添加三方SDK需要的所有权限。
为了保证三方SDK(或模块)的功能完整,默认会添加可能需要的所有权限,如果应用只用到三方SDK提供的部分功能,不希望自动添加三方SDK需要的所有权限,可以去掉勾选“Android自动添加第三方SDK需要的权限”。
为了向下兼容,云端打包默认会添加“Geolocation(定位)” -> “系统定位”模块,因此会默认添加定位权限,如果不需要定位权限,请在App权限配置界面去掉勾选“Android自定添加第三方SDK需要的权限”

注意:去掉自动添加第三方SDK需要的权限后,请务必根据需要在“Android权限配置”中勾选三方SDK必需的权限,三方SDK需要的权限详情参考后面《三方SDK(或模块)需要的权限列表》章节
保存后提交云端打包生效。

可视化界面配置

打开项目的manifest.json文件,在“App权限配置”项中去掉“Android自动添加第三方SDK需要的权限”

代码视图配置

打开项目的manifest.json文件,切换到“代码视图”。

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" 下添加 autoSdkPermissions 如下:
    "app-plus": {  
    "distribute": {  
      "android": {  
        "autoSdkPermissions": false,    // 不自动添加第三方SDK需要的Android权限  
        //...  
      },  
      //...  
    },  
    //...
  • 5+ APP(WAP2APP)项目
    在 "plus" -> "distribute" -> "google" 下添加 autoSdkPermissions 如下:
    "plus": {  
    "distribute": {  
      "google": {  
        "autoSdkPermissions": false,    // 不自动添加第三方SDK需要的Android权限  
        //...  
      },  
      //...  
    },  
    //...

Android权限配置

打开项目的manifest.json文件,在“(App)模块权限配置”页的“Android权限配置”项下根据需求勾选需要的权限:

如果没有列出需要的权限,可按以下方法手动添加
在manifest.json页面,切换到“代码视图”

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" -> "permissions" 下添加需要的权限如下:
    "app-plus": {  
    "distribute": {  
      "android": {  
        "permissions": [   //这里添加需要的Android权限  
            "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>"  
        ]  
        //...  
      },  
      //...  
    },  
    //...
  • 5+ APP(WAP2APP)项目
    在 "plus" -> "distribute" -> "google" -> "permissions" 下添加需要的权限如下:
    "app-plus": {  
    "distribute": {  
      "google": {  
        "permissions": [   //这里添加需要的Android权限  
            "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>"  
        ]  
        //...  
      },  
      //...  
    },  
    //...

三方SDK(或模块)需要的权限列表

Bluetooth(低功耗蓝牙)

      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />"

Contact(通讯录)

      "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",  
      "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",  
      "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>"

Fingerprint(指纹识别)

      "<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>"

iBeacon

      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />"

Maps(定位和地图)

  • 高德地图
      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />"
  • 百度地图
      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\"/>",  
      "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\" />",  
      "<uses-permission android:name=\"android.permission.READ_LOGS\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"

Messaging(短彩邮件消息)

      "<uses-permission android:name=\"android.permission.RECEIVE_SMS\"/>",  
      "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",  
      "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>",  
      "<uses-permission android:name=\"android.permission.READ_SMS\"/>"

OAuth(登录鉴权)

  • 微信登录
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • QQ登录
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • 新浪微博登录
  • 小米登录

Payment(支付)

  • 支付宝支付
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  • 微信支付
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"

Push(消息推送)

  • uniPush
     <!--个推通道必需权限  权限说明:  https://docs.getui.com/getui/question/sdk/ -->  
     "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",  
      "<uses-permission android:name=\"android.permission.VIBRATE\" />",  
      "<uses-permission android:name=\"android.permission.GET_TASKS\" />",  
       <!--个推通道 可选权限 用于电子围栏  -->  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />(可选)",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />(可选)",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />(可选)",  
      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />(可选)",  
      <!--厂商通道必需权限  小米-->  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_ADDED\" />",  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_CHANGED\" />",  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_INSTALL\" />",  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_REPLACED\" />",  
      "<uses-permission android:name=\"android.permission.RESTART_PACKAGES\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />",  
     <!--厂商通道必需权限  魅族-->  
      "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\" />",  
      <!--厂商通道必需权限 华为-->  
      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\" />"

个推推送与uniPush一致

Share(分享)

  • 微信分享
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • QQ分享
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • 新浪微博分享
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />"

Speech(语音识别)

  • 百度语音识别
      "<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission  android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />"
  • 讯飞语音识别
      "<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />"

Static(统计)

  • 友盟统计
      "<uses-permission android:name=\"android.permission.READ_LOGS\" />",  
      "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />",  
      "<uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\" />"

uni-AD

  • 今日头条穿山甲广告联盟

      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.GET_TASKS\"/>"
  • 腾讯优量汇广告联盟

      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />"
  • 快手广告联盟

      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />"

相关参考

继续阅读 »

此文档将不再维护,请参考新文档:https://uniapp.dcloud.io/tutorial/app-permission-android

根据工业和信息化部关于开展APP侵害用户权益专项整治要求,应用的隐私政策中需详细描述使用权限的用途。
为了不避免应用使用过多权限,HBuilderX2.6.3+版本对应用默认要求的权限进行简化,对第三方SDK需要的权限提供方法根据实际需求进行配置。

默认使用的基础权限

提交云端打包后会自动添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />  
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />  
<uses-permission android:name="android.permission.READ_PHONE_STATE" />  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />  
<uses-permission android:name="com.asus.msa.SupplementaryDID.ACCESS" />  
<uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" />  
<uses-permission android:name="android.permission.INSTALL_PACKAGES" />  
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />

权限说明:

  • android.permission.INTERNET
    使用网络权限,应用基础权限
  • android.permission.READ_EXTERNAL_STORAGE 和 android.permission.WRITE_EXTERNAL_STORAGE
    读写SD卡权限,系统授权提示未“访问设备上的照片、媒体内容和文件”,可以参考这里配置应用启动时申请读写手机存储策略
  • android.permission.READ_PHONE_STATE、ACCESS_NETWORK_STATE、ACCESS_WIFI_STATE
    读取设备标识使用,用于uni统计服务,可以参考这里配置应用启动时申请访问设备信息权限策略
  • android.permission.INSTALL_PACKAGES、android.permission.REQUEST_INSTALL_PACKAGES
    安装apk需要的权限,应用中使用plus.runtime.install升级应用则需要此权限
    注意:HBuilder2.6.3+开始Goog Play渠道默认不再添加此权限,因为GooglePlay审核规则禁止应用下载apk更新,必须通过上传GooglePlay审核更新

特定权限说明:

  • com.asus.msa.SupplementaryDID.ACCESS
    获取设备标识信息oaid在华硕设备上需要用到的权限
  • com.huawei.android.launcher.permission.CHANGE_BADGE
    设置应用角标功能在华为设备上需要用到的权限
  • com.android.launcher.permission.INSTALL_SHORTCUT
    创建桌面快捷方式权限,应用中使用plus.navigator.createShortcut创建桌面快捷方式则需要此权限。
  • com.android.launcher.permission.UNINSTALL_SHORTCUT
    删除桌面快捷方式权限,应用中使用native.js删除桌面快捷方式则需要此权限

<a id='sdkpermission' />

Android自动添加三方SDK(或模块)需要的权限

提交云端打包时,勾选使用三方SDK相关的功能模块时,默认会自动添加三方SDK需要的所有权限。
为了保证三方SDK(或模块)的功能完整,默认会添加可能需要的所有权限,如果应用只用到三方SDK提供的部分功能,不希望自动添加三方SDK需要的所有权限,可以去掉勾选“Android自动添加第三方SDK需要的权限”。
为了向下兼容,云端打包默认会添加“Geolocation(定位)” -> “系统定位”模块,因此会默认添加定位权限,如果不需要定位权限,请在App权限配置界面去掉勾选“Android自定添加第三方SDK需要的权限”

注意:去掉自动添加第三方SDK需要的权限后,请务必根据需要在“Android权限配置”中勾选三方SDK必需的权限,三方SDK需要的权限详情参考后面《三方SDK(或模块)需要的权限列表》章节
保存后提交云端打包生效。

可视化界面配置

打开项目的manifest.json文件,在“App权限配置”项中去掉“Android自动添加第三方SDK需要的权限”

代码视图配置

打开项目的manifest.json文件,切换到“代码视图”。

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" 下添加 autoSdkPermissions 如下:
    "app-plus": {  
    "distribute": {  
      "android": {  
        "autoSdkPermissions": false,    // 不自动添加第三方SDK需要的Android权限  
        //...  
      },  
      //...  
    },  
    //...
  • 5+ APP(WAP2APP)项目
    在 "plus" -> "distribute" -> "google" 下添加 autoSdkPermissions 如下:
    "plus": {  
    "distribute": {  
      "google": {  
        "autoSdkPermissions": false,    // 不自动添加第三方SDK需要的Android权限  
        //...  
      },  
      //...  
    },  
    //...

Android权限配置

打开项目的manifest.json文件,在“(App)模块权限配置”页的“Android权限配置”项下根据需求勾选需要的权限:

如果没有列出需要的权限,可按以下方法手动添加
在manifest.json页面,切换到“代码视图”

  • uni-app项目
    在 "app-plus" -> "distribute" -> "android" -> "permissions" 下添加需要的权限如下:
    "app-plus": {  
    "distribute": {  
      "android": {  
        "permissions": [   //这里添加需要的Android权限  
            "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>"  
        ]  
        //...  
      },  
      //...  
    },  
    //...
  • 5+ APP(WAP2APP)项目
    在 "plus" -> "distribute" -> "google" -> "permissions" 下添加需要的权限如下:
    "app-plus": {  
    "distribute": {  
      "google": {  
        "permissions": [   //这里添加需要的Android权限  
            "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>"  
        ]  
        //...  
      },  
      //...  
    },  
    //...

三方SDK(或模块)需要的权限列表

Bluetooth(低功耗蓝牙)

      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />"

Contact(通讯录)

      "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>",  
      "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>",  
      "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>"

Fingerprint(指纹识别)

      "<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>"

iBeacon

      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />"

Maps(定位和地图)

  • 高德地图
      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />"
  • 百度地图
      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\"/>",  
      "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\" />",  
      "<uses-permission android:name=\"android.permission.READ_LOGS\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>"

Messaging(短彩邮件消息)

      "<uses-permission android:name=\"android.permission.RECEIVE_SMS\"/>",  
      "<uses-permission android:name=\"android.permission.SEND_SMS\"/>",  
      "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>",  
      "<uses-permission android:name=\"android.permission.READ_SMS\"/>"

OAuth(登录鉴权)

  • 微信登录
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • QQ登录
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • 新浪微博登录
  • 小米登录

Payment(支付)

  • 支付宝支付
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />  
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
  • 微信支付
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"

Push(消息推送)

  • uniPush
     <!--个推通道必需权限  权限说明:  https://docs.getui.com/getui/question/sdk/ -->  
     "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />",  
      "<uses-permission android:name=\"android.permission.VIBRATE\" />",  
      "<uses-permission android:name=\"android.permission.GET_TASKS\" />",  
       <!--个推通道 可选权限 用于电子围栏  -->  
      "<uses-permission android:name=\"android.permission.BLUETOOTH\" />(可选)",  
      "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\" />(可选)",  
      "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\" />(可选)",  
      "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\" />(可选)",  
      <!--厂商通道必需权限  小米-->  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_ADDED\" />",  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_CHANGED\" />",  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_INSTALL\" />",  
      "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_REPLACED\" />",  
      "<uses-permission android:name=\"android.permission.RESTART_PACKAGES\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />",  
     <!--厂商通道必需权限  魅族-->  
      "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\" />",  
      <!--厂商通道必需权限 华为-->  
      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\" />"

个推推送与uniPush一致

Share(分享)

  • 微信分享
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • QQ分享
    "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>"
  • 新浪微博分享
      "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />"

Speech(语音识别)

  • 百度语音识别
      "<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission  android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />"
  • 讯飞语音识别
      "<uses-permission android:name=\"android.permission.RECORD_AUDIO\" />",  
      "<uses-permission android:name=\"android.permission.INTERNET\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\" />",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\" />"

Static(统计)

  • 友盟统计
      "<uses-permission android:name=\"android.permission.READ_LOGS\" />",  
      "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\" />",  
      "<uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\" />"

uni-AD

  • 今日头条穿山甲广告联盟

      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.GET_TASKS\"/>"
  • 腾讯优量汇广告联盟

      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />"
  • 快手广告联盟

      "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>",  
      "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\" />",  
      "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\" />"

相关参考

收起阅读 »

建议官方把选择插件时,ID显示出来

插件

建议官方把选择插件时,ID显示出来,并且对于上ID

uni.requireNativePlugin('XXX')

基本靠蒙的(插件名称有可以相似或相同)

建议官方把选择插件时,ID显示出来,并且对于上ID

uni.requireNativePlugin('XXX')

基本靠蒙的(插件名称有可以相似或相同)

请问uniCloud有什么使用限制吗?

uniCloud

请问uniCloud有什么使用限制吗?
比如 存储空间、数据库大小、云函数调用次数等?

请问uniCloud有什么使用限制吗?
比如 存储空间、数据库大小、云函数调用次数等?

Mac: 使用git,出现xcrun错误的解决方案

xcrun Git

使用git时遇到的错误

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解决方案

打开终端输入如下命令:

$ xcode-select --install
继续阅读 »

使用git时遇到的错误

xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun

解决方案

打开终端输入如下命令:

$ xcode-select --install
收起阅读 »

【uni-app】旧型号的手机页面渲染慢,导致先白屏一会才显示出页面的问题

性能优化 性能 uniapp

uni-app的项目,主要是vue的页面,在性能比较高的手机上,渲染速度没啥问题,一般页面切换过去,马上就能渲染出页面,但是在一些旧型号的手机上,比如我的一台iPhone6,页面渲染的内容稍微多一点,可能就会先白屏,再渲染出页面了。
这个问题,如果你顶部导航栏和底部Tab页用的是uni-app默认原生的问题不是很大,因为这两块是原生的关系,一般切换页面直接就显示出来了,然后中间的内容再加载,可能在体验上稍微会好点,但是当我用到了自定义的导航栏,那么这个问题就被放大了,因为老手机切换页面时,整个页面都会白一会,没有任何内容,我自己在生命周期中打印过日志:onLoad、onShow都比较快,接下去onReady有时候可以比onShow慢个整整1秒还要多,也就意味着整个页面要白屏1秒以上,这个体验就非常差了。
最后说一下我目前的渲染策略:首先自定义的vue导航栏直接渲染,然后有一个字段在onReady时候会设置为true,页面的其他内容,只有这个字段为true的时候,才会渲染。这样做的目的就是让导航栏尽快的渲染出来,好让页面不要长时间白屏,至少有点东西显示,只能说是一个没有办法的办法吧。。。
在这里也希望uni-app团队也关注一下这方面的性能问题,毕竟现在市面上还有很多用户用着一些性能一般的手机。

另外,我用自定义顶部导航栏和底部导航栏的原因是:uni-app自带的原生导航栏功能太单调了,比如顶部导航栏背景色只能是纯色,一旦设计师给我设计了渐变色,那我就要用自定义vue组件来写导航栏了,虽然最新的有subnvue可以解决,但我内心其实是很懒的,希望更多的功能可以通过配置解决。。。

继续阅读 »

uni-app的项目,主要是vue的页面,在性能比较高的手机上,渲染速度没啥问题,一般页面切换过去,马上就能渲染出页面,但是在一些旧型号的手机上,比如我的一台iPhone6,页面渲染的内容稍微多一点,可能就会先白屏,再渲染出页面了。
这个问题,如果你顶部导航栏和底部Tab页用的是uni-app默认原生的问题不是很大,因为这两块是原生的关系,一般切换页面直接就显示出来了,然后中间的内容再加载,可能在体验上稍微会好点,但是当我用到了自定义的导航栏,那么这个问题就被放大了,因为老手机切换页面时,整个页面都会白一会,没有任何内容,我自己在生命周期中打印过日志:onLoad、onShow都比较快,接下去onReady有时候可以比onShow慢个整整1秒还要多,也就意味着整个页面要白屏1秒以上,这个体验就非常差了。
最后说一下我目前的渲染策略:首先自定义的vue导航栏直接渲染,然后有一个字段在onReady时候会设置为true,页面的其他内容,只有这个字段为true的时候,才会渲染。这样做的目的就是让导航栏尽快的渲染出来,好让页面不要长时间白屏,至少有点东西显示,只能说是一个没有办法的办法吧。。。
在这里也希望uni-app团队也关注一下这方面的性能问题,毕竟现在市面上还有很多用户用着一些性能一般的手机。

另外,我用自定义顶部导航栏和底部导航栏的原因是:uni-app自带的原生导航栏功能太单调了,比如顶部导航栏背景色只能是纯色,一旦设计师给我设计了渐变色,那我就要用自定义vue组件来写导航栏了,虽然最新的有subnvue可以解决,但我内心其实是很懒的,希望更多的功能可以通过配置解决。。。

收起阅读 »

小白,一边学习一边用UNI-APP做影视APP对接苹果

分享

对VUE一点不了解,一边学习一边做这个影视APP,播放器等有钱了再买个好点的插件,哈哈。。。
修修改改。其他的还在计划中,感谢帮助过我的人!!

1

2

3

4
5

6
7

继续阅读 »

对VUE一点不了解,一边学习一边做这个影视APP,播放器等有钱了再买个好点的插件,哈哈。。。
修修改改。其他的还在计划中,感谢帮助过我的人!!

1

2

3

4
5

6
7

收起阅读 »

你们这个东西我觉得会死于开发文档

你看看你们写的这个文档 一会就看不清谁和谁是同一个等级了
你们看看pages.json这块 能一眼看清 谁包含的谁吗
来来回回的跳来跳去 一会就不知道这个参数是放哪的了 就不能把一个功能所有的文档都放在一起吗
看着太难受了

你看看你们写的这个文档 一会就看不清谁和谁是同一个等级了
你们看看pages.json这块 能一眼看清 谁包含的谁吗
来来回回的跳来跳去 一会就不知道这个参数是放哪的了 就不能把一个功能所有的文档都放在一起吗
看着太难受了

基于uni-app的支付宝小程序tabBar不显示?无法进行真机调试?

tabbar

基于uni-app的支付宝小程序tabBar不显示


如图:tabbar的backgroundColor属性不能填写white/black(这是微信小程序的值域)

基于uni-app的支付宝小程序无法进行真机调试?

小程序在开发工具上的模拟器正常使用,在线上的体验版或者正式版正常使用
但就是不能就行真机调试,提示:系统错误,正在排查...
特别是做一些支付宝的api接口开发时要求必须要真机调试时就非常恼火

其实这个问题也很邪门,本人遇到这个问题花了一个下午一句一句排查,结果就是因为一个变量:agent导致的,注释掉就没事了
但乍眼一看agent好像也不是关键字吧,而且在线上版本也没影响,就是不能真机调试。
所以只是想说明,大家遇到这种问题,可以多一个考虑问题的方面,检查一下变量名。

本人也是uni-app的新手
希望这篇分享能帮到遇到问题的你

大佬勿喷

继续阅读 »

基于uni-app的支付宝小程序tabBar不显示


如图:tabbar的backgroundColor属性不能填写white/black(这是微信小程序的值域)

基于uni-app的支付宝小程序无法进行真机调试?

小程序在开发工具上的模拟器正常使用,在线上的体验版或者正式版正常使用
但就是不能就行真机调试,提示:系统错误,正在排查...
特别是做一些支付宝的api接口开发时要求必须要真机调试时就非常恼火

其实这个问题也很邪门,本人遇到这个问题花了一个下午一句一句排查,结果就是因为一个变量:agent导致的,注释掉就没事了
但乍眼一看agent好像也不是关键字吧,而且在线上版本也没影响,就是不能真机调试。
所以只是想说明,大家遇到这种问题,可以多一个考虑问题的方面,检查一下变量名。

本人也是uni-app的新手
希望这篇分享能帮到遇到问题的你

大佬勿喷

收起阅读 »

有人做过在线看房小程序的吗?

小程序

有人做过在线看房小程序的吗?类似截图中的服务,可以给我留言

有人做过在线看房小程序的吗?类似截图中的服务,可以给我留言

自定义editor富文本编辑器组件时要注意

onEditorReady() {
uni.createSelectorQuery().in(this).select('#editor').context((res) => {
this.editorCtx = res.context
}).exec()
},

要加入in(this),要不会报context null

继续阅读 »

onEditorReady() {
uni.createSelectorQuery().in(this).select('#editor').context((res) => {
this.editorCtx = res.context
}).exec()
},

要加入in(this),要不会报context null

收起阅读 »