
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\" />"
相关参考
- Android官方权限说明,参考:https://developer.android.google.cn/guide/topics/permissions/overview
- Android官方权限常量文档,参考:https://developer.android.google.cn/reference/android/Manifest.permission
此文档将不再维护,请参考新文档: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\" />"
相关参考
- Android官方权限说明,参考:https://developer.android.google.cn/guide/topics/permissions/overview
- Android官方权限常量文档,参考:https://developer.android.google.cn/reference/android/Manifest.permission

建议官方把选择插件时,ID显示出来
建议官方把选择插件时,ID显示出来,并且对于上ID
uni.requireNativePlugin('XXX')
基本靠蒙的(插件名称有可以相似或相同)
建议官方把选择插件时,ID显示出来,并且对于上ID
uni.requireNativePlugin('XXX')
基本靠蒙的(插件名称有可以相似或相同)

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

Mac: 使用git,出现xcrun错误的解决方案
使用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】旧型号的手机页面渲染慢,导致先白屏一会才显示出页面的问题
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可以解决,但我内心其实是很懒的,希望更多的功能可以通过配置解决。。。
收起阅读 »
你们这个东西我觉得会死于开发文档
你看看你们写的这个文档 一会就看不清谁和谁是同一个等级了
你们看看pages.json这块 能一眼看清 谁包含的谁吗
来来回回的跳来跳去 一会就不知道这个参数是放哪的了 就不能把一个功能所有的文档都放在一起吗
看着太难受了
你看看你们写的这个文档 一会就看不清谁和谁是同一个等级了
你们看看pages.json这块 能一眼看清 谁包含的谁吗
来来回回的跳来跳去 一会就不知道这个参数是放哪的了 就不能把一个功能所有的文档都放在一起吗
看着太难受了

基于uni-app的支付宝小程序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
收起阅读 »
关于在uniapp中使用支付宝登录授权,使用网页授权
因为客户要求可以用支付宝一键登录app,可是不知道为什么官方没有集成支付宝登录,又看了插件市场的要收费的插件,就打了退堂鼓,打算自己研究下,不过安卓开发已经好几年没搞了,现在感觉都已经不会了,而且ios的我也没搞过,用自己做原生插件怕是不行,参考:https://blog.csdn.net/fkew2009/article/details/87621753
下面给大家提供一个思路:
//跳转到支付宝去要授权
goAlipay(){
let alipayUrl="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=https://www.xxxxxxx.com/alipayCallback.html"
let openURL="alipays://platformapi/startapp?appId=20000067&url="+encodeURIComponent(alipayUrl);
console.log("openURL:" + openURL);
plus.runtime.openURL(openURL,err=>{
uni.showToast({
title:"打开支付宝失败!请检查是否已安装?",
icon:'none'
})
})
},
然后单独新建一个alipayCallback.html网页用于支付宝回调,内容如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
</head>
<body>
<div>
如果没有跳转请------
<a href="lkk://abc" id="url">点击这里</a>
</div>
<script type="text/javascript">
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return (false);
}
window.onload = function() {
var code = getQueryVariable("auth_code");
console.log(code);
//alert("code:" + code);
document.getElementById('url').href = "testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));
window.location.href="testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));
}
</script>
</body>
</html>
然后到manifest.json下配置下scheme,用户在支付宝里跳回app,具体参考:https://ask.dcloud.net.cn/article/409
然后就是到支付宝开发平台添加应用了,怎么创建我就不废话了,你们可以自己百度,主要是配置回调地址,特意截图了,应该可以看明白吧?
然后你们自定义基座下,记得改下版本号,发现不改版本号,制作出来的基座还是和之前一样没变化,
然后将获取到auth_code,传给服务器让他们去获取其他信息了
可以在app.js里获取:
onShow: function() {
console.log('App Show')
var args = plus.runtime.arguments;
console.log('[args参数]',args);
let argsUrl = JSON.parse(decodeURIComponent(args.split('?')[1]));
if (argsUrl.code) {
// 处理args参数,如直达到某新页面等
plus.runtime.arguments = {};
uni.redirectTo({
url: "/pages/login/login?code="+argsUrl.code
});
}
},
argsUrl.code 就是从支付宝返回的auth_code,发给服务器的逻辑我放到login页面里了,这个我就不贴出来了,
总结:
该方法确实可以得到支付宝的登录授权,就是体验不好,因为有alipayCallback.html中间页面,支付宝会报警告如下:
全过程大概要用户点击四次屏幕,体验太不好,我也是没法想到其他好法子了,Android我测试是没有问题的,iOS没测,不过听说在iOSscheme会不行,回头疫情好了去公司我再测测看行不行
不知道为什么用不了,支付宝既然有这个为什么不给用呢?百度谷歌都不知道该怎么用,如果有知道怎么用的兄弟告诉我下,感谢不尽!
因为客户要求可以用支付宝一键登录app,可是不知道为什么官方没有集成支付宝登录,又看了插件市场的要收费的插件,就打了退堂鼓,打算自己研究下,不过安卓开发已经好几年没搞了,现在感觉都已经不会了,而且ios的我也没搞过,用自己做原生插件怕是不行,参考:https://blog.csdn.net/fkew2009/article/details/87621753
下面给大家提供一个思路:
//跳转到支付宝去要授权
goAlipay(){
let alipayUrl="https://openauth.alipay.com/oauth2/publicAppAuthorize.htm?app_id=商户的APPID&scope=auth_user&redirect_uri=https://www.xxxxxxx.com/alipayCallback.html"
let openURL="alipays://platformapi/startapp?appId=20000067&url="+encodeURIComponent(alipayUrl);
console.log("openURL:" + openURL);
plus.runtime.openURL(openURL,err=>{
uni.showToast({
title:"打开支付宝失败!请检查是否已安装?",
icon:'none'
})
})
},
然后单独新建一个alipayCallback.html网页用于支付宝回调,内容如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no" />
</head>
<body>
<div>
如果没有跳转请------
<a href="lkk://abc" id="url">点击这里</a>
</div>
<script type="text/javascript">
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return (false);
}
window.onload = function() {
var code = getQueryVariable("auth_code");
console.log(code);
//alert("code:" + code);
document.getElementById('url').href = "testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));
window.location.href="testapp://io.lkk/login?"+encodeURIComponent(JSON.stringify({"code":code}));
}
</script>
</body>
</html>
然后到manifest.json下配置下scheme,用户在支付宝里跳回app,具体参考:https://ask.dcloud.net.cn/article/409
然后就是到支付宝开发平台添加应用了,怎么创建我就不废话了,你们可以自己百度,主要是配置回调地址,特意截图了,应该可以看明白吧?
然后你们自定义基座下,记得改下版本号,发现不改版本号,制作出来的基座还是和之前一样没变化,
然后将获取到auth_code,传给服务器让他们去获取其他信息了
可以在app.js里获取:
onShow: function() {
console.log('App Show')
var args = plus.runtime.arguments;
console.log('[args参数]',args);
let argsUrl = JSON.parse(decodeURIComponent(args.split('?')[1]));
if (argsUrl.code) {
// 处理args参数,如直达到某新页面等
plus.runtime.arguments = {};
uni.redirectTo({
url: "/pages/login/login?code="+argsUrl.code
});
}
},
argsUrl.code 就是从支付宝返回的auth_code,发给服务器的逻辑我放到login页面里了,这个我就不贴出来了,
总结:
该方法确实可以得到支付宝的登录授权,就是体验不好,因为有alipayCallback.html中间页面,支付宝会报警告如下:
全过程大概要用户点击四次屏幕,体验太不好,我也是没法想到其他好法子了,Android我测试是没有问题的,iOS没测,不过听说在iOSscheme会不行,回头疫情好了去公司我再测测看行不行
不知道为什么用不了,支付宝既然有这个为什么不给用呢?百度谷歌都不知道该怎么用,如果有知道怎么用的兄弟告诉我下,感谢不尽!