主题
云函数调用与打包上线(四)
本页对应 云函数调用与打包上线,共 7 段视频,约 1 小时 11 分。
学习目标
- 能够独立完成未绑定手机号用户的绑定流程:按
bindMobile类型获取验证码、提交手机号/验证码/openId 调用绑定接口,并在成功后保存 token 与用户 ID、按登录来源跳转页面。 - 能够根据登录接口返回的
code与 token 判断用户是否已绑定手机号,并实现已绑定状态下直接登录与页面跳转。 - 能够调用解绑手机号测试接口(PUT 方式、传手机号或 openId),并说明为何测试后需注释该代码以避免误解绑。
- 能够完成 H5 端发行与部署:选择发行入口、打包到 H5 目录或上传前端页面托管空间,并定位、修复打包后登录跳转不兼容语法导致的运行错误。
- 能够完成微信小程序端打包与聊天功能验证:填写 AppID、安装并替换兼容小程序的 socket.io 客户端、重新打包,并通过已支付订单 ID 进入问诊室验证消息收发。
- 能够完成 App 端打包配置与产物验证:设置应用图标和启动页、配置最小 SDK 版本与相机模块、使用云端证书云打包,并确认生成可安装的 APK 文件。
知识点
绑定手机号的整体顺序
本节笔记未附图片文件,以下不虚构图片地址;代码按转写稿中出现的片段整理,字段名以实际接口为准。
为什么需要:QQ 登录后可能拿到 openId/token,但用户还没绑定手机号,业务上不能直接进入问诊等页面。
怎么想:先判断“是否已绑定”:未绑定就展示表单;已绑定就直接登录跳转。
怎么做:未绑定时走“获取验证码 → 提交手机号和验证码 → 绑定成功 → 记录登录状态 → 跳转”。
易错点:不要一上来就绑定;先确认接口返回的 code,再决定展示表单还是跳转。
获取验证码:先拿手机号再发请求
为什么需要:绑定手机号必须验证手机号归属,验证码接口要先拿到用户输入的手机号。
怎么想:表单用 v-model 收手机号和验证码;点击“获取验证码”时调用之前写过的验证码接口,但 type 要改成绑定场景。
怎么做:模板中保留类似代码:
html
<input v-model="formData.mobile" placeholder="请输入手机号" />
<input v-model="code" placeholder="请输入验证码" />
<button @click="getCode">获取验证码</button>js
async function getCode() {
await getCodeApi({
mobile: formData.value.mobile,
type: 'bindMobile' // 转写中强调:不能再用 login
})
}易错点:转写里的“ban mobile”应理解为 bindMobile;验证码接口的 type 不改,后端会按登录场景处理。手机号没通过 v-model 接到表单上,请求参数就是空的。
调用绑定接口:参数与大小写
为什么需要:验证码只是前置条件,真正把手机号和当前 QQ 登录身份关联起来的是绑定接口。
怎么想:绑定接口通常需要手机号、验证码、openId 三个参数。
怎么做:在用户服务里封装 API,再在页面引入;点击“绑定手机号”时 await 调用:
js
const res = await bindMobile({
mobile: formData.value.mobile,
code: code.value,
openId: userInfo.value.openId
})易错点:转写中反复强调 openId 的大小写——官方字段和后端字段可能不一致,必须按后端接口写;mobile、code 要从表单/响应式数据里取,不能写死。
绑定成功后的登录状态与跳转
为什么需要:绑定成功只代表手机号关联成功,页面还要记录登录态并回到业务页面。
怎么想:接口返回 code === 10000 视为成功;失败用提示展示 message。成功后把 token、用户 ID 存到 Pinia,再按之前保存的 redirectURL 和跳转方式跳转。
怎么做:转写中把跳转封装成 jumpRoute(data),内部用 Pinia:
js
if (res.code !== 10000) {
uni.showToast({ title: res.message, icon: 'none' })
return
}
jumpRoute(res.data)js
const userStore = useUserStore()
userStore.token = data.token
userStore.userId = data.userId易错点:token 要存,用户 ID 也要存,后续聊天、医生评价等会用到;跳转前要判断 redirectURL 是否存在,别把空地址传给跳转 API。
已绑定状态直接登录
为什么需要:用户已经绑过手机号,再展示绑定表单没有意义。
怎么想:再次 QQ 登录时,如果接口直接返回 code === 10000 且带 token,就说明已绑定,可直接登录。
怎么做:在登录回调里补判断:
js
if (res.code === 10000) {
jumpRoute(res.data)
}易错点:转写中演示时出现“刚绑定又被解绑”的怪现象,原因是首页测试代码里留着解绑调用,保存代码刷新就执行了。测试时先停掉别人的解绑代码。
解绑手机号仅用于测试
为什么需要:开发时要反复测“已绑定/未绑定”两种状态,但真实用户只有一个手机号。
怎么想:后端提供测试解绑接口,用 PUT,传手机号或 openId 即可。
怎么做:在登录页临时调用,测完立刻注释掉。
易错点:转写明确提醒“不要永远开着”,否则每次刷新都解绑;重复解绑可能提示找不到要解绑的信息,说明已经解绑过。
H5 打包发布与条件跳转兼容问题
为什么需要:开发时用“运行”,上线要用“发行”。
怎么想:HBuilderX 点“发行”→H5,生成 unpackage/dist/build/h5,可上传服务器或用前端网页托管。
怎么做:转写中线上登录报“不是一个方法”,原因是打包后某些高级条件跳转写法解析不了;改成普通 if/else 跳转即可。
易错点:本地能跑不代表打包后能跑;改完要重新发行上传。
小程序打包与 socket.io 兼容
为什么需要:uni-app 一套代码多端发布,但小程序不支持原来的 socket.io client。
怎么想:换兼容小程序的封装包,改引入路径,重新打包。
怎么做:安装转写中给出的兼容包,把聊天页原来的 socket.io-client 引入替换掉;小程序不能支付宝支付时,可先在 H5 支付拿到 orderId,再用编译模式带 orderId 进问诊室测试聊天。
易错点:只安装不改引入无效;改完必须重新发行小程序。
App 打包
为什么需要:最终要生成安卓 APK。
怎么想:先配图标、启动页、最低 SDK 21、相机模块,再运行到安卓基座真机测试,最后云打包。
怎么做:manifest.json 里设置 App 图标和启动界面;发行→云打包,包名用域名倒写且至少两段,选云端证书、正式包。
易错点:转写中“报名”应为“包名”;苹果打包需付费账号,课程只演示安卓;打包成功后在项目目录取 APK。
本节要解决的问题
为什么需要:QQ 登录后会出现两类用户:一类没有绑定手机号,需要先展示绑定表单;另一类已经绑定手机号,应该直接完成登录。上一节只处理了“未绑定”的分支,所以已绑定用户走完登录接口后既没有绑定表单,也没有跳转页面,容易出现白屏。
怎么想:不要靠“页面上有没有表单”判断,而要看登录接口的返回。转写稿中已绑定状态再次登录时,接口返回 code === 10000,并且 data 里带有 token,说明后端已经完成登录,前端只需要记录登录状态并跳转。
怎么做:在 QQ 登录接口的成功分支里调用已经封装好的 jumpRoute(data),把登录后的跳转逻辑复用起来。
易错点:转写稿里的“扣”是 code,“头根”是 token;“open IDD”应理解为 openID,后端使用大写,官方字段可能大小写不同,不能混用。code 不等于 10000 时要提示 message,不能静默失败。
已绑定状态的判断依据
为什么需要:已绑定用户不需要再填手机号和验证码,如果仍按未绑定流程处理,就会多出无意义页面,甚至阻塞登录。
怎么想:绑定手机号成功时接口返回 code === 10000 和 token;已绑定用户再次登录时同样返回 code === 10000 和 token。因此“已绑定直接登录”的判断点应放在登录接口返回之后。
怎么做:在登录回调中判断成功码,成功后直接进入跳转函数。转写稿中明确提到 code 等于 10000 表示成功,并把 data 传给 jumpRoute。
js
// 按转写稿整理的关键逻辑,变量名以实际项目为准
if (res.code === 10000) {
jumpRoute(res.data)
}易错点:不要重复写一套“存 token、存 userId、跳页面”的代码;已绑定和绑定成功后的后续动作是一样的,应复用同一个函数。转写稿中“校转”是“跳转”,“柚子”是 useStore,“P泥”是 Pinia。
复用 jumpRoute 完成登录状态记录与跳转
为什么需要:绑定手机号成功后要记录登录状态并跳转;已绑定用户直接登录后也要做同样的事。如果两处各写一遍,后续改跳转规则容易漏改。
怎么想:把“存 token、存 userId、按 redirectURL 跳转”收口到一个函数里,登录成功分支只负责调用。
怎么做:在 jumpRoute 中用 Pinia 的 userStore 保存 token 和 userId,再根据 openType 选择 uni.switchTab 或 uni.redirectTo。转写稿中明确提到要存 token、用户 ID,并根据地址跳转。
js
// jumpRoute 的关键逻辑(按转写稿整理,非完整源码)
function jumpRoute(data) {
const userStore = useUserStore()
userStore.token = data.token
userStore.userId = data.userId
if (userStore.openType === 'switchTab') {
uni.switchTab({ url: userStore.redirectURL })
} else {
uni.redirectTo({ url: userStore.redirectURL })
}
}易错点:useStore 调用要加括号;token 和 userId 都要存,后续聊天、医生评价等场景会用到用户 ID;switchTab 只能跳 tabBar 页面,普通页面要用 redirectTo。转写稿中“user 知道”是 userStore 的口述。
调试过程:从白屏到跳首页
为什么需要:已绑定用户登录后没有绑定表单,页面看起来“什么都没发生”,必须通过接口返回定位问题。
怎么想:先看登录接口返回,确认是否已经返回 code === 10000 和 token;如果有,就说明缺的是前端跳转,而不是后端登录失败。
怎么做:转写稿中的调试过程是:先绑定手机号,再退出登录,重新走 QQ 登录;观察接口返回成功且带 token;然后在成功分支调用 jumpRoute;保存后页面刷新,直接跳到首页。
易错点:测试时不要一直开着首页的解绑代码。转写稿中遇到“怎么又变成未绑定”的现象,就是怀疑有人保存代码时触发了首页解绑逻辑。解绑接口只用于测试,需要时再打开,平时应注释掉。
打包后的补充坑
为什么需要:本地能跳转,不代表打包后也能跳转。转写稿中 H5 打包上线后,点击登录报“不是一个函数”,问题就出在跳转写法上。
怎么想:打包环境对某些高级写法解析不稳定,既然报错指向 switchTab 相关判断,就把“根据 openType 选择跳转方式”改成明确的 if/else。
怎么做:不要用打包后解析不了的高级写法,改成普通条件判断:是 switchTab 就调 uni.switchTab,否则调 uni.redirectTo。改完重新发行上传。
易错点:不要以为本地通过就线上通过;改完跳转逻辑后要重新打包验证。本节原笔记未附独立图片和完整源码,以上只保留转写稿明确提到的代码逻辑,未补造未出现的代码。
先理解:解绑手机号是开发测试接口
为什么需要:QQ 登录联调时,需要反复验证“未绑定手机号”和“已绑定手机号”两种状态。真实用户只有一个手机号,绑定后很难回到未绑定状态,所以后端提供了一个解绑接口,方便测试。
怎么想:解绑不是正式业务主流程,而是辅助联调的小接口。它不需要像登录、绑定那样封装成完整业务模块,但调用方式要清楚:用 PUT 请求,参数可以传手机号,也可以传 openId。因为 openId 较长,测试时通常传手机号更直观。
怎么做:在登录相关页面里临时调用解绑 API。转写稿中的做法是:进入 login 页面时执行解绑代码,观察 Network 中是否请求成功。解绑后再重新走 QQ 登录,检查是否回到“绑定手机号”表单页。
易错点:解绑代码不能长期开着。否则你每次保存代码、页面刷新,它都会自动解绑,导致刚绑定完又变成未绑定。转写稿里出现的“刚绑定就被解绑”的奇怪现象,就是有人把解绑代码一直保留着。重复解绑时,接口可能提示“找不到要解绑的信息”,这通常表示已经解绑过,不一定是代码错误。
解绑后回到绑定手机号流程
为什么需要:解绑后用户处于未绑定状态,必须补手机号和验证码,才能继续登录。
怎么想:绑定流程仍是“获取验证码 → 提交手机号、验证码、openId → 根据返回码判断是否成功”。注意获取验证码时的 type 要用绑定手机号对应的值,不能沿用登录时的 login。转写稿口述的“ban mobile”应理解为绑定手机号对应的 type 枚举,具体写法以后端文档为准。
怎么做:用 v-model 接收手机号和验证码,例如绑定到 formData.mobile 和验证码字段;点击“获取验证码”时调用验证码接口;点击“绑定”时 await 绑定接口,传 mobile、code、openId。成功后保存 token 和 userId,再执行跳转。
易错点:openId 的大小写要跟后端接口一致;转写稿特别强调“官方没有大写,但后端接口是大写”。另外,绑定成功后不要只弹提示,还要记录登录状态并跳转,否则用户仍停在表单页。
已绑定状态直接登录:不要再展示绑定表单
为什么需要:如果用户已经绑定手机号,再次 QQ 登录时不应重复绑定,否则流程冗余。
怎么想:登录接口返回后先判断业务码。若成功码表示已绑定并直接登录,就复用已经封装好的跳转函数;若未绑定,才展示绑定表单。转写稿口述“1万”即成功码 10000,具体以接口为准。
怎么做:在登录回调里判断 code === 10000 时调用 jumpRoute(data);跳转前把 token、userId 存入 Pinia 的 useUserStore。转写稿中的 P泥 是 Pinia,athink 是 await,cold 是 code,open IDD 是 openId。
易错点:跳转逻辑要统一封装,避免绑定成功和直接登录各写一套。存状态时注意 userStore.token = data.token、userStore.userId = data.userId,字段名以项目为准。
H5 打包上线后的条件跳转坑
为什么需要:开发环境能跑,不代表打包后能跑。H5 发行后要验证真实线上行为。
怎么想:转写稿中 H5 打包后出现“不是一个函数”的报错,问题集中在用中括号动态调用 uni[openType] 这类写法。打包后解析异常时,应改成显式 if/else。
怎么做:判断 openType 是否为 switchTab:是则 uni.switchTab({ url: redirectUrl }),否则 uni.reLaunch({ url: redirectUrl })。修改后重新发行上传。
易错点:不要为了代码“高级”而保留动态调用;线上报错时先看 Network 和控制台,再定位到跳转代码。
小程序端 socket.io 兼容处理
为什么需要:小程序不支持原先 H5 使用的原生 socket.io 写法,聊天会报错。
怎么想:使用转写稿提到的兼容包替换原 socket.io-client,改引入路径后重新打包小程序。具体包名以群内资料为准,不能随意编造。
怎么做:安装兼容包,找到聊天 room 页面,把原来的 socket.io 引入替换为新包;重新发行微信小程序。测试时先在网页端支付拿到 orderId,再用编译模式拼到问诊室地址后验证聊天收发。
易错点:只安装包但不改引入代码,等于没修;改完必须重新打包。
App 端打包与图标、启动页
为什么需要:App 端要有图标、启动页和基础模块配置,才能安装验证。
怎么想:在 manifest.json 中配置 App 图标并自动生成多尺寸;启动界面选自定义,上传对应尺寸图片;最小 SDK 设为 21;按需勾选相机模块。先运行到安卓基座测试,再云打包正式包。
怎么做:发行 → 云打包,安卓包名按“至少两段、可多段”的规则写,常用公司域名倒写;证书可选云端证书;生成 .apk 后安装到手机。
易错点:包名只能包含数字、字母、下划线,并以点分段;图片尺寸传错会影响清晰度;云打包需要等待,不要看到窗口关闭就以为完成。
代码示例
示例一:utils/jump.js —— 登录状态记录 + 页面跳转(绑定成功/已绑定直接登录共用)
js
// utils/jump.js
import { useUserStore } from '@/stores/user'
/**
* 登录成功后统一处理:记录登录状态 + 跳转页面
* @param {Object} data 接口返回的 data(含 token、userId)
*/
export const jump = (data) => {
// 注意:useUserStore 必须在使用时调用,不能写在文件顶层
const userStore = useUserStore()
// 1. 记录登录状态
userStore.token = data.token
userStore.userId = data.userId
// 2. 根据登录前存好的跳转方式跳转
// 不要写成 uni[userStore.openType]({ url: userStore.redirectURL })
if (userStore.openType === 'switchTab') {
uni.switchTab({ url: userStore.redirectURL })
} else {
uni.redirectTo({ url: userStore.redirectURL })
}
}要点与易错点
userStore.token/userStore.userId必须一起存:聊天、医生评价等地方要用到userId。redirectURL、openType是登录前就已经存在 store(本地)里的,这里只读取,不重新赋值。- H5 打包大坑:
uni[userStore.openType]({ url })这种动态取方法的写法,本地运行正常,一旦发行到 unicloud 云空间就会报“不是一个函数”。必须改成if / else分别写uni.switchTab和uni.redirectTo,两段代码效果完全一致。
示例二:pages/bind-mobile/bind-mobile.vue —— 绑定手机号(获取验证码 + 绑定 + 跳转)
vue
<!-- pages/bind-mobile/bind-mobile.vue -->
<template>
<view class="bind-page">
<view class="form-item">
<input v-model="fromData.mobile" type="number" placeholder="请输入手机号" />
</view>
<view class="form-item">
<input v-model="fromData.code" type="number" placeholder="请输入验证码" />
<text class="code-btn" @click="getCode">获取验证码</text>
</view>
<button class="submit-btn" @click="bindMobile">绑定手机号</button>
</view>
</template>
<script setup>
import { ref } from 'vue'
import { getCodeAPI, bindMobileAPI } from '@/api/user.js'
import { useUserStore } from '@/stores/user'
import { jump } from '@/utils/jump'
const userStore = useUserStore()
// 表单数据:手机号 + 验证码都用 v-model 接收
const fromData = ref({
mobile: '',
code: ''
})
// 1. 获取验证码
const getCode = async () => {
const { code, data, message } = await getCodeAPI({
mobile: fromData.value.mobile,
type: 'bindMobile' // 关键:绑定场景的 type 不是 login
})
if (code !== 10000) {
return uni.showToast({ title: message, icon: 'none' })
}
uni.showToast({ title: '验证码已发送', icon: 'none' })
}
// 2. 绑定手机号
const bindMobile = async () => {
const { code, data, message } = await bindMobileAPI({
mobile: fromData.value.mobile,
code: fromData.value.code,
openId: userStore.openId // 注意大小写:openId,与后端接口保持一致
})
if (code !== 10000) {
return uni.showToast({ title: message, icon: 'none' })
}
// 3. 绑定成功 -> 记录登录状态并跳转
jump(data)
}
</script>
<style>
.bind-page {
padding: 40rpx;
}
.form-item {
display: flex;
align-items: center;
border-bottom: 1rpx solid #eee;
padding: 20rpx 0;
}
.form-item input {
flex: 1;
height: 80rpx;
}
.code-btn {
color: #1989fa;
font-size: 28rpx;
}
.submit-btn {
margin-top: 60rpx;
background-color: #1989fa;
color: #fff;
border-radius: 40rpx;
}
</style>要点与易错点
- 获取验证码时
type必须改成bindMobile,之前登录用的是login,写错会拿不到正确验证码。 - 手机号、验证码都要通过
v-model绑到fromData上,调用接口时用fromData.value.mobile/fromData.value.code。 - 绑定接口三个参数:
mobile、code、openId;openId是之前 QQ 授权拿到并存下来的,直接取userStore.openId,不要再重新获取。 - 验证码有时效,转写稿里就出现过“验证码已失效”,重新获取再点绑定即可。
- 绑定成功也走统一的
jump(data),不要在页面里再写一遍跳转逻辑。
示例三:pages/login/login.vue —— 已绑定状态直接登录(含解绑手机号的测试代码)
vue
<!-- pages/login/login.vue -->
<template>
<view class="login-page">
<!-- 未绑定手机号时才展示绑定表单 -->
<bind-mobile v-if="showBind" />
</view>
</template>
<script setup>
import { ref, onMounted } from 'vue'
import { qqLoginAPI, unbindMobileAPI } from '@/api/user.js'
import { useUserStore } from '@/stores/user'
import { jump } from '@/utils/jump'
import bindMobile from '@/pages/bind-mobile/bind-mobile.vue'
const userStore = useUserStore()
const showBind = ref(false)
onMounted(async () => {
// ========== 测试用:解绑手机号,不需要时一定要注释掉 ==========
// await unbindMobileAPI({ mobile: '13212345678' }) // PUT 方式,也可传 openId
// ==========================================================
const { code, data, message } = await qqLoginAPI({
openId: userStore.openId
})
if (code !== 10000) {
return uni.showToast({ title: message, icon: 'none' })
}
// code === 10000:接口直接返回了 token,说明该 QQ 已绑定手机号,直接登录
if (data.token) {
jump(data)
} else {
// 未绑定:展示绑定手机号表单
showBind.value = true
}
})
</script>
<style>
.login-page {
min-height: 100vh;
}
</style>要点与易错点
- 已绑定的用户再次 QQ 登录时,接口会直接返回
token(code === 10000),此时不需要再展示表单,直接jump(data)即可。 - 只有未绑定的情况才把
showBind置为true展示绑定页,否则会出现白屏。 - 解绑代码只是辅助测试的接口:用 PUT 方式,参数可以是手机号也可以是
openId。测完必须注释掉,否则每次保存代码页面刷新都会自动解绑,转写稿里讲师就是被别人的解绑代码“误伤”了。 - 重复解绑可能提示“找不到要解绑的信息”,说明已经解绑过,属于正常现象。
常见错误
现象:绑定手机号时验证码能发,但绑定接口始终失败。
原因:获取验证码时type仍沿用登录场景的login,没有改为绑定场景需要的bindMobile。
修法:绑定手机号流程中单独传type=bindMobile,不要复用登录验证码参数。现象:点击“获取验证码”提示手机号为空或请求参数缺失。
原因:手机号输入框未用v-model绑定到表单数据,或绑定字段与请求参数不一致。
修法:检查表单v-model是否落到手机号字段上,并在发请求前确认手机号、验证码字段都能取到值。现象:绑定接口返回失败,后端提示缺少
openId或参数名不匹配。
原因:前端按官方习惯写成小写openid,但后端接口要求大写openId。
修法:严格按接口文档/后端字段名传参,联调时重点核对大小写和字段层级。现象:H5 本地运行正常,打包发布后登录跳转报“不是一个函数”之类错误。
原因:跳转逻辑使用了较“高级”的中括号函数调用写法,uni-app 打包后解析异常。
修法:改为普通if/else判断,按switchTab与非switchTab分别调用对应跳转 API。现象:小程序端进入问诊室后聊天不可用,控制台报 socket.io 相关错误。
原因:微信小程序不支持原先直接使用的socket.io-client。
修法:安装兼容小程序的 socket.io 封装包,替换聊天页面中的引用,并重新打包小程序验证。现象:每次保存代码或刷新页面,手机号又被解绑了。
原因:测试用解绑接口代码一直开着,页面加载就自动执行解绑。
修法:解绑代码只在需要测试时临时打开,测试完立即注释或删除,避免影响他人联调。现象:App 打包后图标或启动页不生效、安装失败。
原因:图标/启动图尺寸不匹配,或最低 SDK 版本等基础配置未按要求设置。
修法:按平台要求生成各尺寸图标和启动图,检查最低 SDK 版本、模块配置后再云打包。
练习
- 口述“绑定手机号”完整链路:从发现未绑定,到获取验证码、提交绑定、记录登录状态、跳转页面,指出每一步关键参数。
- 对比“未绑定手机号”和“已绑定手机号”两种 QQ 登录分支,说明页面展示和接口返回判断上的差异。
- 给定一个 H5 打包后跳转报错的场景,写出排查顺序,并说明为什么要把条件跳转改成普通
if/else。 - 在小程序端复现聊天不可用问题,记录报错信息,完成兼容包替换并重新打包验证。
- 设计一次安全测试流程:如何用解绑接口反复测试“未绑定/已绑定”状态,同时避免误影响其他同学联调。
课堂画面






原视频对照
| # | 视频 | 时长 |
|---|---|---|
| 1 | 优医咨询-绑定手机号 | 15:13 |
| 2 | 优医咨询-已绑定状态直接登录 | 06:33 |
| 3 | 优医咨询-解绑手机号 | 04:37 |
| 4 | 优医咨询-打包发布H5端 | 09:28 |
| 5 | 优医咨询-打包小程序端-1 | 15:57 |
| 6 | 优医咨询-打包小程序端-2 | 02:04 |
| 7 | 优医咨询-打包App端 | 18:01 |
小结
- 绑定手机号不是孤立表单,而是“验证码场景切换 + 手机号接收 + 绑定接口 + 登录态记录 + 页面跳转”的完整闭环。
- 绑定与登录共用验证码接口时,
type必须按业务场景区分,不能照搬登录参数。 - 接口字段名要以实际后端为准,
openId这类大小写问题在联调中最容易反复踩坑。 - 已绑定手机号时应跳过绑定表单,根据接口返回直接完成登录和跳转,避免出现空白页。
- H5、小程序、App 多端打包会暴露本地运行看不到的问题,必须把“打包后验证”纳入自测流程。
- 小程序端使用第三方能力前要先确认兼容性,聊天类 socket.io 需要替换为小程序可用方案。
- 解绑接口是测试辅助能力,不能长期留在自动执行路径中,否则会干扰自己和他人联调。
- 多端发布前要统一检查图标、启动图、SDK 版本、包名、证书、跳转地址等配置项。