一键登录鸿蒙next报错-20100传入参数错误在uni-app中

一键登录鸿蒙next报错-20100传入参数错误在uni-app中

类别 信息
产品分类 uniapp/App
PC开发环境 Mac
PC版本号 26.1
HBuilderX类型 正式
HBuilderX版本 4.87
手机系统 HarmonyOS NEXT
手机版本号 HarmonyOS 6.0.0
手机厂商 华为
手机机型 mate 60 pro
页面类型 nvue
Vue版本 vue3
打包方式 离线
项目创建方式 HBuilderX

示例代码:

const login = () => {  
    const numberTextElement = uni.getElementById("number-text") as UniElement;  
    const sloganTextElement = uni.getElementById("slogan-text") as UniElement;  
    const loginButtonElement = uni.getElementById("login-button") as UniElement;  
    const privacyCheckBoxElement = uni.getElementById("privacy-checkbox") as UniElement;  
    const privacyTextElement = uni.getElementById("privacy-text") as UniElement;  
    uni.getUniVerifyManager().customLogin({  
        numberTextElement: numberTextElement,  
        sloganTextElement: sloganTextElement,  
        loginButtonElement: loginButtonElement,  
        privacyCheckBoxElement: privacyCheckBoxElement,  
        privacyTextElement: privacyTextElement,  
        success: (res) => {  
            takePhoneNumber(res.accessToken, res.openId);  
        },  
        fail: (error) => {  
            console.log(error);  
        }  
    });  
};

bug描述:

uniapp x,一键登录,安卓和iOS都正常,鸿蒙next让@个推技术支持-恒锋 帮忙查了,说是20100传入参数错误


更多关于一键登录鸿蒙next报错-20100传入参数错误在uni-app中的实战教程也可以访问 https://www.itying.com/category-93-b0.html

11 回复

该bug反馈内容不完整,主要缺失复现步骤、预期结果和实际结果的具体描述,仅说明"鸿蒙next报错-20100传入参数错误"。代码示例虽展示了customLogin调用,但未提供对应UI元素的HTML结构,无法直接验证元素是否符合规范。分类信息较完整,包含HBuilderX 4.87、HarmonyOS 6.0.0等关键版本信息。
bug成立可能性高。根据uni-app-x一键登录规范,错误码20100(4001)表示"参数异常",常见原因包括:1) 未先调用预登录接口获取必要参数;2) UI元素未严格遵循五要素规范(如元素类型错误、未正确展示运营商协议等)。特别要注意鸿蒙Next平台对UI组件有特殊要求,必须使用指定组件实现,且不得动态变更元素。
建议用户:1) 确认是否已执行预登录流程;2) 检查UI元素是否完全符合文档要求;3) 参考官方示例重构代码。当前HBuilderX 4.87为正式版,但需注意uni-app-x的鸿蒙适配仍在迭代中。 内容为 AI 生成,仅供参考

更多关于一键登录鸿蒙next报错-20100传入参数错误在uni-app中的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


已经预登录,并且拿到了脱敏的手机号,并且安卓和iOS都正常,只有鸿蒙next报错,麻烦官方查一下什么情况

<view class="items-center"> <text class="mt-12 text-[24px] text-[#1b1d33]" id="number-text">{{ oneClickInfo?.number }}</text> <text class="mt-4 text-[#8d8e99]" id="slogan-text">{{ oneClickInfo?.slogan }}</text> <button id="login-button" class="w-full mt-[48px] text-white bg-[#006aff] rounded-[100px]" @tap="login" > 本机号码一键登录 </button> </view> <view class="flex-row mt-4"> <checkbox-group @change="onPrivacyChange"> <checkbox id="privacy-checkbox" class="privacy-checkbox" :checked="checked" value="1" ></checkbox> </checkbox-group> <view class="flex-1 flex-row items-center flex-wrap"> <text class="text-[14px] text-[#8d8e99]" @tap="checked = !checked" >我已阅读并同意</text > <text class="text-[14px] text-[#006aff]" id="privacy-text" @tap="toProtocol" >《{{ oneClickInfo?.privacyName }}》</text > <text class="text-[14px] text-[#8d8e99]">和</text> <text class="text-[14px] text-[#006aff]" @tap="toPrivacyPolicy" >《隐私政策》</text > <text class="text-[14px] text-[#8d8e99]">以及</text> <text class="text-[14px] text-[#006aff]" @tap="toUserProtocol" >《用户协议》</text > </view> </view>

const preLogin = () => {
uni.getUniVerifyManager().preLogin({
success: (res) => {
oneClickInfo.value = res;
},
fail: (err) => {
toMLogin();
console.error("pre login fail => " + JSON.stringify(err));
}
});
};

下载这里的 har 包 放到 /项目根目录/harmony-configs/libs 下,然后重新运行试试看

包放进去之后,调试环境竟然也可以用了,这样直接打包上线就好了吗?

回复 李棣同學: 调试可以用了,但记得修改你后台配置的证书指纹,否则发布证书是调不通的

回复 DCloud_UNI_LXH: 上线了,线上版本也正常了

刚刚还在聊这个问题

这个个推也知道,运营商要求的,后续可能会改进在鸿蒙上的验证。现在可以先分别使用发布证书、调试证书创建两个应用来规避这个问题

错误码-20100通常表示调用一键登录API时传入的参数不符合规范。根据你的代码和鸿蒙Next环境,问题可能出在以下几个方面:

  1. 元素引用问题uni.getElementById获取的元素对象在鸿蒙Next环境下可能格式与预期不符。建议先检查这些元素是否成功获取:
console.log('元素检查:', {
  numberTextElement,
  sloganTextElement,
  loginButtonElement,
  privacyCheckBoxElement,
  privacyTextElement
});
  1. 参数类型验证:确保所有传入的element参数都是有效的DOM元素引用。在鸿蒙Next中,可能需要确保这些元素已经完成渲染:
onReady(() => {
  // 在页面就绪后再执行登录逻辑
});
  1. 鸿蒙Next适配问题:由于鸿蒙Next是较新的系统,可能需要检查uni-app原生插件是否已完全适配。可以尝试:
  • 更新HBuilderX到最新版本
  • 重新安装uni-app原生插件
  • 检查manifest.json中是否已正确配置鸿蒙相关权限
  1. 备用方案:如果问题持续存在,可以考虑使用条件编译暂时绕过:
// #ifdef HARMONYOS_NEXT
// 鸿蒙Next特殊处理
// #else
uni.getUniVerifyManager().customLogin({
  // 原有参数
});
// #endif
回到顶部