HBuilderX

HBuilderX

极客开发工具
uni-app

uni-app

开发一次,多端覆盖
uniCloud

uniCloud

云开发平台
HTML5+

HTML5+

增强HTML5的功能体验
MUI

MUI

上万Star的前端框架

【已解决】云打包 iOS SDK 需要 18 或更高的问题

我升级到了最新的稳定版本,然后费劲九牛二虎之力下载了云打包的相关插件(自动提示下载的,一直下载中【估计本机环境问题】......反复操作,折腾下载了24小时),然后最关键的一步:

执行:
npx @dcloudio/uvm@latest

打包后,目前 apple transportor 还没报问题【我点了手动“验证”】,应该不会再报这个错了:

SDK version issue. This app was built with the iOS 17.5 SDK. All iOS and iPadOS apps must be built with the iOS 18 SDK or later, included in Xcode 16 or later, in order to be uploaded to App Store Connect or submitted for distribution. (90725)

继续阅读 »

我升级到了最新的稳定版本,然后费劲九牛二虎之力下载了云打包的相关插件(自动提示下载的,一直下载中【估计本机环境问题】......反复操作,折腾下载了24小时),然后最关键的一步:

执行:
npx @dcloudio/uvm@latest

打包后,目前 apple transportor 还没报问题【我点了手动“验证”】,应该不会再报这个错了:

SDK version issue. This app was built with the iOS 17.5 SDK. All iOS and iPadOS apps must be built with the iOS 18 SDK or later, included in Xcode 16 or later, in order to be uploaded to App Store Connect or submitted for distribution. (90725)

收起阅读 »

【2025精简版】iOS原生插件拓展秘籍

扩展小程序原生能力

官方的ios原生项目简介使用插件工程的做法在XCode16往往会遇到问题
如果你无需开发插件包,而且使用离线打包,那可以跳过很多繁琐的步骤

其实很简单,仅需要在原先离线包中AppDelegate.m所在的目录下添加一个<TestModule>.m文件,引入"DCUniModule.h", 便可完成

#import <Foundation/Foundation.h>  
// 引入 DCUniModule.h 头文件  
#import "DCUniModule.h"  

@interface TestModule : DCUniModule  

@end  

UNI_EXPORT_METHOD(@selector(init:callback:))  

- (void)init:(NSDictionary *)options callback:(UniModuleKeepAliveCallback)callback {  
    if (callback) {  
        callback(@{@"status": @"initialized"}, NO);  
    }  
}

完成之后用官方教程配置原生插件
这里需要的插件id可以随便选

继续阅读 »

官方的ios原生项目简介使用插件工程的做法在XCode16往往会遇到问题
如果你无需开发插件包,而且使用离线打包,那可以跳过很多繁琐的步骤

其实很简单,仅需要在原先离线包中AppDelegate.m所在的目录下添加一个<TestModule>.m文件,引入"DCUniModule.h", 便可完成

#import <Foundation/Foundation.h>  
// 引入 DCUniModule.h 头文件  
#import "DCUniModule.h"  

@interface TestModule : DCUniModule  

@end  

UNI_EXPORT_METHOD(@selector(init:callback:))  

- (void)init:(NSDictionary *)options callback:(UniModuleKeepAliveCallback)callback {  
    if (callback) {  
        callback(@{@"status": @"initialized"}, NO);  
    }  
}

完成之后用官方教程配置原生插件
这里需要的插件id可以随便选

收起阅读 »

关于H5空白页 找了半天故障 交给claude3.7 几分钟解决了

h5

项目使用了一个特殊的 Vue 结构,其中 App.vue 不是直接呈现页面,而是包含一个 App 组件
修复 main.js 中的一些兼容性问题import App from './App'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'

// 处理兼容性问题
// #ifdef H5
// 修复 H5 空白页面问题的全局处理
window.addEventListener('DOMContentLoaded', () => {
// 处理初始化加载问题
if (!location.hash || location.hash === '#/') {
// 如果是空hash,尝试恢复到登录页
setTimeout(() => {
const token = uni.getStorageSync('token');
if (!token) {
location.replace(location.pathname + '#/pages/login/login');
}
}, 200);
}
});
// #endif

// 添加全局导航守卫
const whiteList = ['/pages/login/login', '/pages/register/register', '/pages/forget-password/forget-password']

// 处理路由路径,确保正确处理绝对和相对路径
Vue.prototype.$normalizePath = function(url) {
// 如果已经是绝对路径(以/开头),则返回
if (url.startsWith('/')) {
return url;
}
// 否则转换为绝对路径
return '/' + url;
}

Vue.prototype.$checkLogin = function() {
const token = uni.getStorageSync('token')
const userInfo = uni.getStorageSync('userInfo')

// 清理可能存在的mock数据
if (token && token.includes('mock')) {
uni.removeStorageSync('token')
uni.removeStorageSync('userInfo')
return false
}

return token && userInfo && userInfo.userId
}

Vue.prototype.$navigateTo = function(url) {
// 标准化路径
const normalizedUrl = this.$normalizePath(url);

if (!this.$checkLogin() && !whiteList.some(path => normalizedUrl.includes(path))) {
uni.reLaunch({
url: '/pages/login/login'
})
return
}
uni.navigateTo({
url: normalizedUrl
})
}

// #ifdef H5
// 添加全局异常处理
window.addEventListener('error', (e) => {
console.error('全局错误:', e);
// 可以在这里添加错误上报逻辑
});
// #endif

const app = new Vue({
...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif复了 App.vue 的模板结构,保持 <App :keepAliveInclude="keepAliveInclude"> 的原有格式,并将通知弹窗移到内部
添加了 keepAliveInclude 属性,用于缓存主要页面(提高性能)
在 main.js 中添加了全局 DOMContentLoaded 事件处理,修复空白页面问题

继续阅读 »

项目使用了一个特殊的 Vue 结构,其中 App.vue 不是直接呈现页面,而是包含一个 App 组件
修复 main.js 中的一些兼容性问题import App from './App'

// #ifndef VUE3
import Vue from 'vue'
import './uni.promisify.adaptor'
Vue.config.productionTip = false
App.mpType = 'app'

// 处理兼容性问题
// #ifdef H5
// 修复 H5 空白页面问题的全局处理
window.addEventListener('DOMContentLoaded', () => {
// 处理初始化加载问题
if (!location.hash || location.hash === '#/') {
// 如果是空hash,尝试恢复到登录页
setTimeout(() => {
const token = uni.getStorageSync('token');
if (!token) {
location.replace(location.pathname + '#/pages/login/login');
}
}, 200);
}
});
// #endif

// 添加全局导航守卫
const whiteList = ['/pages/login/login', '/pages/register/register', '/pages/forget-password/forget-password']

// 处理路由路径,确保正确处理绝对和相对路径
Vue.prototype.$normalizePath = function(url) {
// 如果已经是绝对路径(以/开头),则返回
if (url.startsWith('/')) {
return url;
}
// 否则转换为绝对路径
return '/' + url;
}

Vue.prototype.$checkLogin = function() {
const token = uni.getStorageSync('token')
const userInfo = uni.getStorageSync('userInfo')

// 清理可能存在的mock数据
if (token && token.includes('mock')) {
uni.removeStorageSync('token')
uni.removeStorageSync('userInfo')
return false
}

return token && userInfo && userInfo.userId
}

Vue.prototype.$navigateTo = function(url) {
// 标准化路径
const normalizedUrl = this.$normalizePath(url);

if (!this.$checkLogin() && !whiteList.some(path => normalizedUrl.includes(path))) {
uni.reLaunch({
url: '/pages/login/login'
})
return
}
uni.navigateTo({
url: normalizedUrl
})
}

// #ifdef H5
// 添加全局异常处理
window.addEventListener('error', (e) => {
console.error('全局错误:', e);
// 可以在这里添加错误上报逻辑
});
// #endif

const app = new Vue({
...App
})
app.$mount()
// #endif

// #ifdef VUE3
import { createSSRApp } from 'vue'
export function createApp() {
const app = createSSRApp(App)
return {
app
}
}
// #endif复了 App.vue 的模板结构,保持 <App :keepAliveInclude="keepAliveInclude"> 的原有格式,并将通知弹窗移到内部
添加了 keepAliveInclude 属性,用于缓存主要页面(提高性能)
在 main.js 中添加了全局 DOMContentLoaded 事件处理,修复空白页面问题

收起阅读 »

【待验证】h5打包到服务器打开显示:连接服务器超时,点击屏幕重试

h5
// manifest.json  
{  
    "h5" : {  
        "async" : {  
            "timeout" : 60000  // 页面 js 加载超时时间(超时后展示 error 对应的组件)  
    }  
    }  
}
继续阅读 »
// manifest.json  
{  
    "h5" : {  
        "async" : {  
            "timeout" : 60000  // 页面 js 加载超时时间(超时后展示 error 对应的组件)  
    }  
    }  
}
收起阅读 »

个人开发者承接app、小程序、网页外包,全职外包接单

小程序 外包 uniapp

全职在家承接外包,多年外包经验,个人开发者,绝对实惠靠谱,有很多款线上应用(度是自己开发的,自己独立完成,可查)

可做商城类,社交类,工具类,任务平台类,mes 类,扫码收银/分账交易类 等,除了游戏和带颜色的,其他度可以开发

可承接安卓/IOS、各个端的小程序、H5网页、PC网页开发,从前端到后端,我全度会,一条龙服务

掌握技术
前端:uniapp 、uniappx、vue
后端:Golang 、php

有需要开发的并能看得上我的请联系我哈

vx:wu1020yt

继续阅读 »

全职在家承接外包,多年外包经验,个人开发者,绝对实惠靠谱,有很多款线上应用(度是自己开发的,自己独立完成,可查)

可做商城类,社交类,工具类,任务平台类,mes 类,扫码收银/分账交易类 等,除了游戏和带颜色的,其他度可以开发

可承接安卓/IOS、各个端的小程序、H5网页、PC网页开发,从前端到后端,我全度会,一条龙服务

掌握技术
前端:uniapp 、uniappx、vue
后端:Golang 、php

有需要开发的并能看得上我的请联系我哈

vx:wu1020yt

收起阅读 »

专为在线教育、知识付费、视频娱乐、新闻媒体等行业提供H5、小程序、APP开发服务

公司拥有专业技术团队,配备前后端技术开发人员,是您首选的合作服务商。
公司专为在线教育、知识付费、视频娱乐、新闻媒体等行业提供网站、小程序、APP开发服务!
公司主要软件有:知识付费系统AI题库系统头条媒体系统短视频系统小商城系统
我们秉承用心服务,专业专注原则,致力于为用户提供安全省心的解决方案;为用户搭建更专业、更省钱的网络服务平台!

咨询合作微信:yddapps,服务电话:400-811-9102

继续阅读 »

公司拥有专业技术团队,配备前后端技术开发人员,是您首选的合作服务商。
公司专为在线教育、知识付费、视频娱乐、新闻媒体等行业提供网站、小程序、APP开发服务!
公司主要软件有:知识付费系统AI题库系统头条媒体系统短视频系统小商城系统
我们秉承用心服务,专业专注原则,致力于为用户提供安全省心的解决方案;为用户搭建更专业、更省钱的网络服务平台!

咨询合作微信:yddapps,服务电话:400-811-9102

收起阅读 »

uniapp js @touchend无效 无法监听到touchend 触摸停止时无法检测到

uniapp js @touchend无效 无法监听到touchend 触摸停止时无法检测到

在UniApp的开发过程中,不少开发者会遇到 @touchend 事件无法正常监听的情况,即触摸停止时无法检测到相应的回调触发。笔者在项目实践中,也深陷此问题的困扰,经过反复调试与探索,总结出一系列有效的处理方案,现将经验分享如下。如果你在开发过程中遇到类似问题,也欢迎访问我的技术交流网站 5555api.com,与众多开发者共同探讨解决方案;同时,luanqing.net 上也整理了大量UniApp开发技巧和疑难问题解答,可供大家参考学习。

问题现象与规律

实际开发中,在使用 <view> 标签绑定 @touchend 事件时,出现了奇特的规律:当快速触摸并释放时,@touchend 事件能够正常回调;但一旦长按超过一定时间(约1秒),该事件便无法触发。此外,还存在一种偶发情况,即间隔一次触摸操作,@touchend 事件也会出现无法回调的现象。这种不稳定的表现,给开发带来了极大的困扰,严重影响了功能的正常实现。

常规处理方案尝试

阻止默认长按行为

最初,考虑到可能是系统默认的长按行为对 @touchend 事件产生了干扰,于是在 @touchstart 事件的处理函数中添加 e.preventDefault() 代码,试图阻止默认的长按行为,从而确保 @touchend 事件能够正常触发。然而,实际测试发现,这种方法并不能解决问题,长按状态下 @touchend 事件依旧无法回调。在 5555api.com 的技术论坛中,也有不少开发者分享了类似的尝试经历,可见该问题的普遍性。

定时器模拟 @touchend 事件

既然常规的阻止默认行为无效,便尝试通过定时器来模拟 @touchend 事件。在 @touchstart 事件触发时,启动一个定时器,设置一个合理的最大长按时间(例如10秒),当定时器计时结束时,手动调用 @touchend 事件的处理函数。同时,在 @touchend@touchcancel 事件的处理函数中,及时清除定时器,以避免重复触发。虽然这种方式在一定程度上能够解决长按无法触发 @touchend 的问题,但仍然存在一些局限性,比如无法精准模拟真实的触摸结束场景,并且增加了代码的复杂性。在 luanqing.net 的UniApp开发教程板块中,有关于定时器应用的详细讲解,感兴趣的开发者可以深入学习。

最终解决方案:使用 <button> 标签替代 <view> 标签

经过多次尝试和探索,最终发现使用 <button> 标签替代 <view> 标签绑定 @touchend 事件,可以成功触发该事件。<button> 标签作为原生的交互元素,其触摸事件的处理机制与 <view> 有所不同,能够更稳定地监听到触摸停止的操作。将原本绑定在 <view> 上的触摸事件转移到 <button> 上后,无论是快速触摸释放还是长按操作,@touchend 事件都能正常回调,有效地解决了之前遇到的问题。

在使用 <button> 标签时,还可以通过设置 typesizeplain 等属性,对按钮的样式和行为进行定制,以满足项目的具体需求。例如:

<button v-if="mode == 'voice'" class="input ml8 mr8 uni_flex_col_center"   
        @touchstart.prevent="startRecord"  
        @touchend.prevent="endRecord"  
        @touchmove.prevent="moveRecord"  
        @touchcancel.prevent="cancelRecord"  
        :class="{'recording': isRecording, 'cancel': isCancel}"  
        type="primary" size="mini" plain>  
    <view class="voice-waves" v-if="isRecording">  
        <view class="wave-item" v-for="(item, index) in 12" :key="index"></view>  
    </view>  
    <text v-if="!isRecording">{{ recordTip }}</text>  
</button>

总结与建议

在UniApp开发中遇到 @touchend 事件无法监听的问题时,不要局限于一种解决方案,可以从阻止默认行为、模拟事件等角度进行尝试。如果常规方法无法解决,不妨考虑更换标签类型,利用原生交互元素的特性来实现稳定的触摸事件监听。同时,在开发过程中,要善于总结问题出现的规律,通过反复测试和调试,找到最适合项目需求的解决方案。

想要获取更多UniApp开发技巧和实战案例,欢迎访问 5555api.comluanqing.net ,这里不仅有丰富的技术文章,还有活跃的开发者社区,助力你在技术道路上不断前行!

继续阅读 »

uniapp js @touchend无效 无法监听到touchend 触摸停止时无法检测到

在UniApp的开发过程中,不少开发者会遇到 @touchend 事件无法正常监听的情况,即触摸停止时无法检测到相应的回调触发。笔者在项目实践中,也深陷此问题的困扰,经过反复调试与探索,总结出一系列有效的处理方案,现将经验分享如下。如果你在开发过程中遇到类似问题,也欢迎访问我的技术交流网站 5555api.com,与众多开发者共同探讨解决方案;同时,luanqing.net 上也整理了大量UniApp开发技巧和疑难问题解答,可供大家参考学习。

问题现象与规律

实际开发中,在使用 <view> 标签绑定 @touchend 事件时,出现了奇特的规律:当快速触摸并释放时,@touchend 事件能够正常回调;但一旦长按超过一定时间(约1秒),该事件便无法触发。此外,还存在一种偶发情况,即间隔一次触摸操作,@touchend 事件也会出现无法回调的现象。这种不稳定的表现,给开发带来了极大的困扰,严重影响了功能的正常实现。

常规处理方案尝试

阻止默认长按行为

最初,考虑到可能是系统默认的长按行为对 @touchend 事件产生了干扰,于是在 @touchstart 事件的处理函数中添加 e.preventDefault() 代码,试图阻止默认的长按行为,从而确保 @touchend 事件能够正常触发。然而,实际测试发现,这种方法并不能解决问题,长按状态下 @touchend 事件依旧无法回调。在 5555api.com 的技术论坛中,也有不少开发者分享了类似的尝试经历,可见该问题的普遍性。

定时器模拟 @touchend 事件

既然常规的阻止默认行为无效,便尝试通过定时器来模拟 @touchend 事件。在 @touchstart 事件触发时,启动一个定时器,设置一个合理的最大长按时间(例如10秒),当定时器计时结束时,手动调用 @touchend 事件的处理函数。同时,在 @touchend@touchcancel 事件的处理函数中,及时清除定时器,以避免重复触发。虽然这种方式在一定程度上能够解决长按无法触发 @touchend 的问题,但仍然存在一些局限性,比如无法精准模拟真实的触摸结束场景,并且增加了代码的复杂性。在 luanqing.net 的UniApp开发教程板块中,有关于定时器应用的详细讲解,感兴趣的开发者可以深入学习。

最终解决方案:使用 <button> 标签替代 <view> 标签

经过多次尝试和探索,最终发现使用 <button> 标签替代 <view> 标签绑定 @touchend 事件,可以成功触发该事件。<button> 标签作为原生的交互元素,其触摸事件的处理机制与 <view> 有所不同,能够更稳定地监听到触摸停止的操作。将原本绑定在 <view> 上的触摸事件转移到 <button> 上后,无论是快速触摸释放还是长按操作,@touchend 事件都能正常回调,有效地解决了之前遇到的问题。

在使用 <button> 标签时,还可以通过设置 typesizeplain 等属性,对按钮的样式和行为进行定制,以满足项目的具体需求。例如:

<button v-if="mode == 'voice'" class="input ml8 mr8 uni_flex_col_center"   
        @touchstart.prevent="startRecord"  
        @touchend.prevent="endRecord"  
        @touchmove.prevent="moveRecord"  
        @touchcancel.prevent="cancelRecord"  
        :class="{'recording': isRecording, 'cancel': isCancel}"  
        type="primary" size="mini" plain>  
    <view class="voice-waves" v-if="isRecording">  
        <view class="wave-item" v-for="(item, index) in 12" :key="index"></view>  
    </view>  
    <text v-if="!isRecording">{{ recordTip }}</text>  
</button>

总结与建议

在UniApp开发中遇到 @touchend 事件无法监听的问题时,不要局限于一种解决方案,可以从阻止默认行为、模拟事件等角度进行尝试。如果常规方法无法解决,不妨考虑更换标签类型,利用原生交互元素的特性来实现稳定的触摸事件监听。同时,在开发过程中,要善于总结问题出现的规律,通过反复测试和调试,找到最适合项目需求的解决方案。

想要获取更多UniApp开发技巧和实战案例,欢迎访问 5555api.comluanqing.net ,这里不仅有丰富的技术文章,还有活跃的开发者社区,助力你在技术道路上不断前行!

收起阅读 »

华为mate60 rs 鸿蒙next系统在hbuilder4.6.1中打包到鸿蒙连接不上的问题

鸿蒙next

问题:

华为mate60 rs 鸿蒙next系统在hbuilder4.6.1中打包到鸿蒙连接不上的问题

解决方式:

连接手机弹出USB连接方式的时候,选择仅充电,别选传输文件或者传输图片,希望能帮到碰到此问题的小伙伴。

问题:

华为mate60 rs 鸿蒙next系统在hbuilder4.6.1中打包到鸿蒙连接不上的问题

解决方式:

连接手机弹出USB连接方式的时候,选择仅充电,别选传输文件或者传输图片,希望能帮到碰到此问题的小伙伴。

uniCloud.importObject引入云对象,非自定义loading请求的时候加载能否添加遮罩

通过uniCloud.importObject引入云对象,如果不配置{custom:true}的话,请求云对象的时候会自动有加载loading,但是没有mask遮罩,自定义使用的时候uni.showLoading({mask:true})可以这样配置,这样用户不会误触,那么引入云对象该如何配置?

继续阅读 »

通过uniCloud.importObject引入云对象,如果不配置{custom:true}的话,请求云对象的时候会自动有加载loading,但是没有mask遮罩,自定义使用的时候uni.showLoading({mask:true})可以这样配置,这样用户不会误触,那么引入云对象该如何配置?

收起阅读 »

vue3.5+electron35+deepseek-v3+arco搭建桌面版AI模板

2025最新跨平台AI落地实战:基于Vue3.5+Electron35+DeepSeek+Vite6+ArcoDesign从0-1打造一款高性能桌面AI流式对话模板。

前段时间有分享两个vue3+deepseek实战mobile版和PC版智能ai对话模板。
Vue3-DeepSeek-Chat流式AI对话|vite6+vant4+deepseek智能ai聊天助手
vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果

使用技术

  • 编码工具:VScode
  • 技术框架:vite^6.2.0+vue^3.5.13+vue-router^4.5.0
  • 大模型ai框架:DeepSeek-V3-0324 + OpenAI
  • 跨平台框架:electron^35.1.2
  • 组件库:arco-design^2.57.0 (字节桌面端组件库)
  • 状态插件:pinia^3.0.1
  • 会话缓存:pinia-plugin-persistedstate^4.2.0
  • 高亮插件:highlight.js^11.11.1
  • markdown解析:markdown-it

项目结构框架

electron-deepseek客户端AI系统已经发布到我的原创作品集,感谢支持!
electron35+deepseek+vite6桌面端AI流式聊天对话

整个项目使用最新跨平台框架Electron35和Vite6构建项目模板,接入最新DeepSeek-v3聊天大模型框架。

目前该项目已经正式完结,想要了解更多技术实现细节,可以看看下面这篇分享文章。

Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板

作者:xiaoyan2017
链接: https://segmentfault.com/a/1190000046461214
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

继续阅读 »

2025最新跨平台AI落地实战:基于Vue3.5+Electron35+DeepSeek+Vite6+ArcoDesign从0-1打造一款高性能桌面AI流式对话模板。

前段时间有分享两个vue3+deepseek实战mobile版和PC版智能ai对话模板。
Vue3-DeepSeek-Chat流式AI对话|vite6+vant4+deepseek智能ai聊天助手
vue3-webseek网页版AI问答|Vite6+DeepSeek+Arco流式ai聊天打字效果

使用技术

  • 编码工具:VScode
  • 技术框架:vite^6.2.0+vue^3.5.13+vue-router^4.5.0
  • 大模型ai框架:DeepSeek-V3-0324 + OpenAI
  • 跨平台框架:electron^35.1.2
  • 组件库:arco-design^2.57.0 (字节桌面端组件库)
  • 状态插件:pinia^3.0.1
  • 会话缓存:pinia-plugin-persistedstate^4.2.0
  • 高亮插件:highlight.js^11.11.1
  • markdown解析:markdown-it

项目结构框架

electron-deepseek客户端AI系统已经发布到我的原创作品集,感谢支持!
electron35+deepseek+vite6桌面端AI流式聊天对话

整个项目使用最新跨平台框架Electron35和Vite6构建项目模板,接入最新DeepSeek-v3聊天大模型框架。

目前该项目已经正式完结,想要了解更多技术实现细节,可以看看下面这篇分享文章。

Electron35-DeepSeek桌面端AI系统|vue3.5+electron+arco客户端ai模板

作者:xiaoyan2017
链接: https://segmentfault.com/a/1190000046461214
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

收起阅读 »

什么时候能支持设置网络访问代理功能?

Hbuilder X什么时候能支持设置网络访问代理功能?让我们这些内网开发者也能丝滑使用起来?

Hbuilder X什么时候能支持设置网络访问代理功能?让我们这些内网开发者也能丝滑使用起来?

关于uniapp vue2项目 使用地图和定位模块踩的坑和解决方案

高德地图 百度地图 uniapp

在写uniapp vue2项目时需要写考勤相关的功能,在定位和地图踩了很多坑,在此记录分享一下踩坑记录和解决方案

一、关于我使用下来 百度、高德、腾讯 踩的坑

系统定位不在我的选择范围内,此处没有讨论,有经验的可以在评论区补充。

  1. 百度
    HBuilder X(4.28.2024092502) 这个版本前我一直使用百度地图 百度定位,其中会有偶发的定位偏移问题,这个问题有人在社群反馈但一直未解决【百度地图定位偏移问题(可点击)】。HBuilder X(4.28.2024092502) 移除了百度地图和百度定位,加上定位偏移问题很突出,决定更换运营商。

  1. 高德
    更换成高德地图和定位后,地图显示正常,定位在ios端使用uni.getLocation获取慢(大概要用10s),这个问题我在社群反馈单一直为解决【高德定位ios端获取慢问题(可点击)】。最近(2025.4.15)重新尝试发现高德定位在安卓端连address都不能返回详细地址了,不满足需求,所以决定再次更换运营商。

  2. 腾讯
    更换成腾讯地图和定位后,弹出问题:打包时未添加maps模块,这个问题有人在社群反馈已找到原因(maps仅支持vue3项目)但未解决【腾讯地图报错未添加maps模块(可点击)】。大bug,不满足需求。

二、我的解决方案

首先我得到的结论:

  1. 百度地图未来版本已不支持,所以排除百度地图和百度定位。
  2. 高德地图好用,但高德定位获取地址有问题。
  3. 腾讯定位好用,但腾讯地图报错。

思考后尝试用高德地图 腾讯定位,在HBuilder X(4.57)下打包后地图可以正常显示,定位可以正常获取地址。此问题暂时解决。

继续阅读 »

在写uniapp vue2项目时需要写考勤相关的功能,在定位和地图踩了很多坑,在此记录分享一下踩坑记录和解决方案

一、关于我使用下来 百度、高德、腾讯 踩的坑

系统定位不在我的选择范围内,此处没有讨论,有经验的可以在评论区补充。

  1. 百度
    HBuilder X(4.28.2024092502) 这个版本前我一直使用百度地图 百度定位,其中会有偶发的定位偏移问题,这个问题有人在社群反馈但一直未解决【百度地图定位偏移问题(可点击)】。HBuilder X(4.28.2024092502) 移除了百度地图和百度定位,加上定位偏移问题很突出,决定更换运营商。

  1. 高德
    更换成高德地图和定位后,地图显示正常,定位在ios端使用uni.getLocation获取慢(大概要用10s),这个问题我在社群反馈单一直为解决【高德定位ios端获取慢问题(可点击)】。最近(2025.4.15)重新尝试发现高德定位在安卓端连address都不能返回详细地址了,不满足需求,所以决定再次更换运营商。

  2. 腾讯
    更换成腾讯地图和定位后,弹出问题:打包时未添加maps模块,这个问题有人在社群反馈已找到原因(maps仅支持vue3项目)但未解决【腾讯地图报错未添加maps模块(可点击)】。大bug,不满足需求。

二、我的解决方案

首先我得到的结论:

  1. 百度地图未来版本已不支持,所以排除百度地图和百度定位。
  2. 高德地图好用,但高德定位获取地址有问题。
  3. 腾讯定位好用,但腾讯地图报错。

思考后尝试用高德地图 腾讯定位,在HBuilder X(4.57)下打包后地图可以正常显示,定位可以正常获取地址。此问题暂时解决。

收起阅读 »