不能。uni-app本身不提供ar api,无法直接调用arkit或arcore,因其基于webview容器,无法访问摄像头、传感器和3d渲染管线;可行方案仅有原生插件桥接或webar折中。
uni-app 能直接调用 ar 吗?
不能。uni-app 本身不提供 AR 相关 API,也不封装 ARKit 或 ARCore。它生成的 App 是基于 WebView(iOS)或 X5 内核(Android)的混合容器,而原生 AR 需要访问摄像头、传感器、3D 渲染管线——这些 WebView 无法直接控制。
真正能落地的 AR 方案只有两种
要么用原生插件桥接,要么用 WebAR 折中。前者功能强但开发成本高,后者兼容性差但能快速上线:
- 原生插件方案:通过
uni-app的nativePlugin机制,在 iOS 用ARKit、Android 用ARCore实现,再暴露 JS 接口给 H5 层调用。需要会写 Objective-C/Swift + Java/Kotlin,还要处理插件生命周期和线程切换 - WebAR 方案:在
uni-app的 webview 中加载three.js+ar.js或model-viewer,靠手机浏览器支持 WebXR。但目前仅 Safari 16.4+(iOS 16.4+)部分支持,安卓 Chrome 基本不可用;且无平面检测、光照估计等关键能力
uni-app + 原生插件做 AR 的典型坑
很多人以为“装个插件就能跑 AR”,结果卡在以下环节:
-
onCameraReady回调永远不触发:因为没在manifest.json里正确配置NSCameraUsageDescription(iOS)或android.permission.CAMERA(Android),或者插件没监听到uni.getSystemInfo返回的设备能力 - AR 场景渲染黑屏:
GLSurfaceView(Android)或SCNView(iOS)没被正确 add 到原生窗口层级,或未在主线程创建渲染上下文 - JS 调用插件方法后无响应:插件未实现
invoke方法,或参数类型不匹配(比如传了string但插件期待JSONObject) - 打包后插件失效:HBuilderX 导出的 App 没勾选对应平台插件,或插件依赖的 SDK 版本与
uni-app底层引擎冲突(如 Android 的minSdkVersion不一致)
WebAR 在 uni-app 里勉强能跑的条件
如果只是展示一个带识别图的 3D 模型,且用户能接受 iOS 限制、无交互、低帧率,可以试:
- 必须用
uni-app的custom-tab-bar+web-view组件加载独立 WebAR 页面(不能直接在 vue 页面里嵌ar.js,WebView 容器默认禁用getUserMedia) - WebAR 页面需部署在 HTTPS 域名下,且服务器响应头包含
Feature-Policy: camera 'self'和Permissions-Policy: camera=() - 识别图必须是
Hiro或Canaro这类经典 marker,ar.js对自定义图片识别支持极弱;模型推荐用.glb格式,别用.obj + .mtl - 真机调试时,iOS 必须用 Safari 打开(微信内置浏览器、QQ 浏览器全挂),安卓几乎全军覆没
AR 的核心能力——空间锚点、物理遮挡、光照匹配——在 uni-app 里没有低成本路径。想稳定交付,得接受要么加原生团队,要么换技术栈。










