z***@139.com
z***@139.com
  • 发布:2026-08-13 18:20
  • 更新:2026-08-13 18:27
  • 阅读:28

微信第三方登录在安卓和鸿蒙系统,返回错误格式不一样。

分类:HBuilder

我现在在写这个微信第三方登录的功能。这个微信登录在没有安装微信的情况下。在安卓和鸿蒙两个系统下法回的错误格式不一样,怎么判断给用户提示?
7:39:22.990 {errMsg: "login:fail 微信可能末安装"} at pages/user/login/login
这个是鸿蒙系统提示 。
bject] ("errMsg" : "login:fail 客户安装, https://ask.dcloud.net.cn/anticle/282", "code": -8} at pages
这个是安卓系统的提示。

看样子安卓系统的错误提示比较规范,但是鸿蒙系统连code码都没有。

请问怎么判断给客户友好的提示?

2026-08-13 18:20 负责人:无 分享
已邀请:
Ask小助手

Ask小助手

欢迎到专业群( HBuilderX技术交流群 ) 咨询,群中有相关专业的管理员和群友。

这个问题本质上是两个平台底层 SDK 对「微信未安装」场景的错误封装不一致:安卓返回了结构化的 code: -8,鸿蒙只返回了文本信息。针对这种平台差异,建议不要精确匹配某一个平台的返回格式,而是做统一的关键词模糊匹配。

方案一:统一模糊匹配(推荐,改动最小)

uni.login({  
    provider: 'weixin',  
    success: (res) => {  
        // 处理登录成功  
    },  
    fail: (err) => {  
        const errMsg = (err && err.errMsg) || ''  
        let tip = '微信登录失败,请稍后重试'  
        // 安卓 code 为 -8,鸿蒙 errMsg 含「未安装」,统一兜底  
        if (err.code === -8 || errMsg.indexOf('未安装') !== -1) {  
            tip = '检测到您尚未安装微信,请先安装微信后再试'  
        }  
        uni.showToast({ title: tip, icon: 'none' })  
    }  
})

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

这样无论安卓的 login:fail 客户端未安装(code -8),还是鸿蒙的 login:fail 微信可能未安装,都能命中同一个分支,后续平台文案微调也不影响判断。

方案二:条件编译分平台处理

如果你希望各平台提示文案不同,可以用条件编译区分:

fail: (err) => {  
    let tip = '微信登录失败,请稍后重试'  
    // #ifdef APP-ANDROID  
    if (err.code === -8) {  
        tip = '请先安装微信客户端'  
    }  
    // #endif  
    // #ifdef APP-HARMONY  
    if ((err.errMsg || '').indexOf('未安装') !== -1) {  
        tip = '请先安装微信客户端'  
    }  
    // #endif  
    uni.showToast({ title: tip, icon: 'none' })  
}

本助手使用国产模型,生成代码可能不准确。专业的代码生成需要全球顶尖的AI Coding模型。推荐使用uni-agent

补充两点提醒:

  1. 安卓返回信息里的 https://ask.dcloud.net.cn/article/282 是官方对 -8 错误码的说明,含义就是「设备上未安装微信客户端」,所以安卓侧用 code === -8 判断是可靠的。

  2. 鸿蒙平台的微信登录需要在 manifest.jsonapp-harmony 节点下配置 uni-oauth.weixin.appid(不能是空对象),配置后重启应用,可先用 uni.getProvider 验证返回值。如果配置不完整,可能出现 login:fail Provider not found. 之类的错误,可参考这个社区案例:鸿蒙5使用微信登录,提示 Provider not found

另外,如果你想在点击登录按钮前就直接拦截未安装微信的场景,目前 uni.login 体系内没有跨端统一的「检测微信是否安装」API,可以考虑在插件市场搜索支持判断安装状态的 uts 插件:插件市场

内容为 AI 生成,仅供参考
z***@139.com

z***@139.com (作者)

谢谢

要回复问题请先登录注册