uni-app自定义ua ios完全用 安卓未完全用

uni-app自定义ua ios完全用 安卓未完全用

信息类别 详情
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 win10
HBuilderX类型 正式
HBuilderX版本号 4.84
手机系统 Android
手机系统版本号 Android 15
手机厂商 vivo
手机机型 iqoo neo9spro+
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

示例代码:

"useragent_android" : {
"value" : "com.<strong><em>.android",
"concatenate" : false
},
"useragent_ios" : {
"value" : "com.</em></strong>.ios",
"concatenate" : false
},

操作步骤:

上述操作

预期结果:

上面描述

实际结果:

上面描述

bug描述:

打包app使用自定义ua,安卓在我自定义com.<strong><em>.android基础上后面还拼接上了html5plus 1.0,但是ios完全用了我自定义com.</em></strong>.ios;目前遇到的问题就是打包app进入网页后,网页是通过ua判断的,依据com.***.android和html5plus判断我是app并且是否是uniapp还是原生app的,这里应该最好统一吧,要加都加,要二次修改不加就都不加吧,让开发者自己拼接上也可以,这样会不会好点


更多关于uni-app自定义ua ios完全用 安卓未完全用的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

你好 用的那个api获取的UA plus.navigator.getUserAgent?

更多关于uni-app自定义ua ios完全用 安卓未完全用的实战教程也可以访问 https://www.itying.com/category-93-b0.html


前台只是在配置里自定义了,后台接口拿到的

说错了,后台服务器拿到的吧好像

这里是uniapp app跳转的原生的h5页面,后台获取给到h5页面的

回复 1***@qq.com: immersed/38 是安卓状态栏高度 这个需求上暂时不会去掉 html5plus会去掉

回复 DCloud_Android_ST: 哦哦,好吧,我的想法是这种的ios和安卓规则统一一下应该好点吧,要不然改完不去了解的情况下都以为使用自定义就一样了,所以我提了这个算是建议吧

回复 1***@qq.com: 嗯 我们要考虑向下兼容的。直接去掉会导致部分app异常

回复 DCloud_Android_ST: okok,谢啦

根据你的描述,这是uni-app在Android和iOS平台上对自定义User-Agent处理不一致的问题。

问题分析:

  1. iOS平台:完全使用了你在manifest.json中配置的自定义UA(com.***.ios),没有拼接额外内容。
  2. Android平台:在你自定义的UA(com.***.android)后面自动拼接了html5plus 1.0,导致最终UA变为com.***.android html5plus 1.0

这种平台差异确实会给需要精确识别UA的业务逻辑带来困扰,特别是你提到的网页需要通过com.***.androidhtml5plus来判断应用类型。

当前解决方案:

对于Android平台,由于系统会自动拼接html5plus标识,你可以采取以下方式统一处理:

  1. 在网页端调整判断逻辑: 将判断条件改为同时匹配com.***.androidhtml5plus,而不是仅依赖自定义部分。

  2. 在App端动态设置UA: 可以在App启动时通过plus.navigator.setUserAgent()动态设置完整的UA,覆盖默认行为:

    // 在App.vue的onLaunch中
    if (uni.getSystemInfoSync().platform === 'android') {
        plus.navigator.setUserAgent('com.***.android html5plus 1.0');
    }
回到顶部