uni-app h5+应用 去掉所有广告配置和应用标识符后上架测试时在iPad上发生崩溃

uni-app h5+应用 去掉所有广告配置和应用标识符后上架测试时在iPad上发生崩溃

示例代码:

获取当前用什么网络打开了哪个html

     action: function() {  

        if (this.deviceId == null) {  
            return;  
        }  
        var types = {};  
        types[plus.networkinfo.CONNECTION_UNKNOW] = "OTHER";  
        types[plus.networkinfo.CONNECTION_NONE] = "OTHER";  
        types[plus.networkinfo.CONNECTION_ETHERNET] = "LINE";  
        types[plus.networkinfo.CONNECTION_WIFI] = "WIFI";  
        types[plus.networkinfo.CONNECTION_CELL2G] = "MOBILE2";  
        types[plus.networkinfo.CONNECTION_CELL3G] = "MOBILE3";  
        types[plus.networkinfo.CONNECTION_CELL4G] = "MOBILE4";  
        if (plus.networkinfo.CONNECTION_CELL5G) {  
            types[plus.networkinfo.CONNECTION_CELL5G] = "MOBILE5";  
        }  
        var action = {  
            deviceId: this.deviceId,  
            functional: document.title,  
            action: "open",  
            url: location.href,  
            networkType:  types[plus.networkinfo.getCurrentType()]  
        };  
        console.log(action);  
    },

获取用的什么型号的手机

    register: function(callback) {  
        var deviceInfo = {  
            "brand": plus.device.vendor,  
            "code": "string",  
            "dpi": 0,  
            "height": 0,  
            "model": plus.device.model,  
            "name": plus.device.vendor + plus.device.model,  
            "os": plus.os.name,  
            "osVersion": plus.os.version,  
            "language": plus.os.language,  
            "serialNo": "string",  
            "vendor": plus.device.vendor,  
            "width": 0  
        };  
        var _this = this;  
        plus.device.getInfo({  
            success: function(e) {  
                deviceInfo.serialNo = e.imei;  
                deviceInfo.code = e.uuid;  

            },  
            fail: function() { //授权失败时尝试调用其它API获取  
                deviceInfo.serialNo = plus.device.imei;  
                deviceInfo.code = plus.device.uuid;  
            },  
            complete: function(e) {  
                deviceInfo.dpi = parseInt((plus.screen.dpiX + plus.screen.dpiY) / 2);  
                deviceInfo.width = parseInt(plus.screen.resolutionWidth * plus.screen.scale);  
                deviceInfo.height = parseInt(plus.screen.resolutionHeight * plus.screen.scale);  
                console.log(deviceInfo);  
            }  
        });  
    },

操作步骤:

据苹果审核人员说 是打开就崩溃了,我现在真机没有办法测试

预期结果:

不崩溃

实际结果:

未知

bug描述:

使用h5+开发的非常简单的应用,纯纯的浏览本地的HTML,顶多就使用了设备id,uuid 序列号什么的。

Review device details:

  • Device type: iPad
  • OS version: iOS 15.1
  • 提交应用商店后,评估说在iPad上面会崩溃,官方大大帮忙看看原因呢,另外,为了怕隐私相关的影响审核,相关的全部都没有勾选比如使用广告标识符,其他任何相关的都没有勾选,不知道跟这个有没有关系
  • 评估提供的崩溃日志在附件

附件:


更多关于uni-app h5+应用 去掉所有广告配置和应用标识符后上架测试时在iPad上发生崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html

6 回复

制作自定义基座测试过吗?是否正常?
提交审核前使用 Testflight 测试是否正常?

更多关于uni-app h5+应用 去掉所有广告配置和应用标识符后上架测试时在iPad上发生崩溃的实战教程也可以访问 https://www.itying.com/category-93-b0.html


感谢您的帮助,但目前: 1、没有尝试过自定义基座,正准备尝试 2、在testflight里面下载应用时,提示无法安装app,所请求的app不存在或不可用

而且就用h5+ 创建的带mui的新项目,只在index.html增加hello world 使用ad hoc描述文件打包,安装在测试机器上打开还是闪退,同时我建立uni-app的示例程序,使用之前同上的描述文件与证书打包 是可以正常安装在测试设备上并且打开的,新建的空白uni-app也同样可行,h5+ 应该是真的有问题

回复 w***@qq.com: 提交打包的 appid 发我一下,我看看什么问题

回复 DCloud_iOS_XHY: appid:H5C833337 我已经用uni-app 重新包装了下 业务可以用了 只是 用uni-app包的时候底部的tab 有几率样式有问题

根据你提供的崩溃日志和代码分析,问题很可能出在设备信息获取的权限上。崩溃日志显示应用在启动时立即终止,主要原因是访问了受限制的设备标识符。

从代码看,你在 register 函数中使用了 plus.device.getInfo 来获取 imeiuuid,并且在失败回调中又尝试直接访问 plus.device.imeiplus.device.uuid。在 iOS 上,这些设备标识符的访问受到严格限制,特别是上架 App Store 的应用。

关键问题:

  1. iOS 隐私限制:从 iOS 10 开始,苹果禁止应用访问 UDID、IMEI 等持久性设备标识符。虽然 plus.device.uuid 在 iOS 上返回的是 IDFV(供应商标识符),但你的代码中同时尝试获取 imei,这在 iOS 上是无法获取的,可能导致权限问题。
  2. 审核被拒:即使你在提交时未勾选广告标识符选项,但代码中实际尝试获取了设备标识信息,这仍然可能触发苹果的隐私审核机制,导致应用被拒绝或运行时崩溃。

解决方案:

  1. 移除或替换设备标识获取代码

    • 删除 imei 相关代码,因为 iOS 无法获取。
    • 对于 uuid,确保你理解其返回的是 IDFV,且仅在必要情况下使用。考虑使用其他替代方案,如生成一个应用内唯一的匿名标识符。
  2. 修改 register 函数

    register: function(callback) {  
        var deviceInfo = {  
            "brand": plus.device.vendor,  
            "code": "string",  
            "dpi": 0,  
            "height": 0,  
            "model": plus.device.model,  
            "name": plus.device.vendor + plus.device.model,  
            "os": plus.os.name,  
            "osVersion": plus.os.version,  
            "language": plus.os.language,  
            "serialNo": "string",  
            "vendor": plus.device.vendor,  
            "width": 0  
        };  
        // 移除 plus.device.getInfo 调用,直接使用以下信息
        deviceInfo.code = plus.device.uuid || "unknown"; // 注意:iOS 上返回的是 IDFV
        deviceInfo.serialNo = "unknown"; // iOS 无法获取 IMEI
        
        deviceInfo.dpi = parseInt((plus.screen.dpiX + plus.screen.dpiY) / 2);  
        deviceInfo.width = parseInt(plus.screen.resolutionWidth * plus.screen.scale);  
        deviceInfo.height = parseInt(plus.screen.resolutionHeight * plus.screen.scale);  
        console.log(deviceInfo);  
    }
回到顶部