uni-app上架oppo商店时提示首次开启未见使用权限功能或服务时提前向用户弹窗申请通讯录定位短信录音相机日历等权限

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app上架oppo商店时提示首次开启未见使用权限功能或服务时提前向用户弹窗申请通讯录定位短信录音相机日历等权限

如题,在上架oppo应用商店时提示,在首次开启app时,未见使用权限对应的相关功能或服务时,提前向用户弹窗申请开启通讯录、定位、短信、录音、相机、日历等权限。同时,在android studio 的模拟器上运行时也出现这个情况,但是在实机的三星和小米手机却未出现该情况。

查看社区说添加

"permissionPhoneState": {
"request": "none",
},
"permissionExternalStorage": {
"request": "none"
}

即可,但是经过尝试也没有解决,求助大佬指点迷津

——————————————————————————————————————————————————

【补充】我刚试了一下,在App.vue文件中的onLaunch和onShow生命周期log了一下,发现这个权限申请是在onLaunch之前的(即先出弹窗,再log onLaunch)不知道这是否对问题解决有帮助

Image


20 回复

在app.vue中,有plus.xxx的api么, 有的话先干掉,再项目需要的时候再调用


是没有的,我的App.vue就只是导入了一个uviewUI

回复 4***@qq.com: 那就看看有没有第三方插件,可能是第三方插件里引了

回复 套马杆的套子: 我不知道我的做法是否正确,我将package.json文件中的依赖删除到只剩axios,将uni_modles的依赖全部删除了,但是依旧没有解决问题

回复 4***@qq.com: 可以给你的app.vue代码贴出来,看一下

回复 套马杆的套子: <script> import { Value } from ‘sass’ import text from ‘./uni_modules/uview-ui/libs/config/props/text’ export default { data() { return { } }, methods: {

<style lang="scss"> [@import](/user/import) "@/uni_modules/uview-ui/index.scss"; </style>

这种情况建议本地运行是否可以复现oppo平台反馈的问题,如果复现了,排查下是否是三方插件导致,如果是可以使用插件前,先弹窗说明权限用途。再调用插件功能

我不知道我的做法是否正确,我将package.json文件中的依赖删除到只剩axios,将uni_modles的依赖全部删除了,但是依旧没有解决问题

回复 4***@qq.com: 你本地运行的app可以复现问题吗

回复 DCloud_Android_ST: 在android studio的安卓模拟器中可以复现,但是在实体手机中不行

回复 4***@qq.com: apk提供下吧 看看能不能复现问题

回复 DCloud_Android_ST: 怎样给您提供安装包呢

回复 4***@qq.com: 提供下载链接 还有模拟器什么型号版本都说下

我也出现了类似的问题,发布了其他几个app一样的逻辑都是ok的,但这个不行

我也是这样,后来有解决吗

我小米,荣耀,vivo,oppo全都出现这个问题了。 都是自动化检测出问题,真机就没问题

在处理uni-app上架OPPO商店时遇到的权限申请提示问题,关键在于确保应用在首次启动时,对于需要使用的权限进行适时的用户授权请求。OPPO商店的要求主要是希望应用在用户首次使用时,对于通讯录、定位、短信、录音、相机、日历等敏感权限,如果有使用需求,应提前向用户弹窗申请。

以下是一个基于uni-app框架的示例代码,展示如何在应用启动时检查和请求相关权限。这里假设你需要请求定位、相机和存储权限(通讯录、短信等权限的请求方式类似,只是权限名称不同)。

// 在main.js或App.vue的onLaunch方法中调用
export default {
    onLaunch() {
        // 检查并请求定位权限
        this.checkAndRequestPermission('scope.userLocation', '定位权限');
        
        // 检查并请求相机权限
        this.checkAndRequestPermission('scope.camera', '相机权限');
        
        // 检查并请求存储权限(读取/写入)
        this.checkAndRequestPermission('scope.writePhotosAlbum', '存储权限(写入)');
        this.checkAndRequestPermission('scope.readPhotosAlbum', '存储权限(读取)');
    },
    methods: {
        checkAndRequestPermission(permission, permissionName) {
            uni.getSetting({
                success: (res) => {
                    if (!res.authSetting[permission]) {
                        uni.authorize({
                            scope: permission,
                            success: () => {
                                console.log(`${permissionName}授权成功`);
                            },
                            fail: () => {
                                console.log(`${permissionName}授权失败`);
                                // 可以在这里处理用户拒绝授权的情况,比如显示引导页面
                            }
                        });
                    } else {
                        console.log(`${permissionName}已授权`);
                    }
                }
            });
        }
    }
};

注意点:

  1. 权限名称scope.userLocationscope.camerascope.writePhotosAlbumscope.readPhotosAlbum等是uni-app定义的权限名称,根据实际需要请求相应的权限。
  2. 用户引导:如果用户拒绝授权,可以在fail回调中设计用户引导逻辑,比如跳转到设置页面引导用户手动开启权限。
  3. 平台差异:不同平台(如Android、iOS)的权限请求机制可能有所不同,确保在相应平台上测试权限请求逻辑。
  4. 隐私政策:确保应用内有明确的隐私政策,告知用户为何需要这些权限,以及如何使用这些信息。

通过上述代码,你可以在uni-app应用中实现权限的适时请求,从而满足OPPO商店的上架要求。

回到顶部