可选options: LoginOptions可选的授权配置。不传、传 {} 或 scopes: undefined 时只申请隐式
identity;需要昵称和头像时传 { scopes: ['profile'] }。
Promise 成功时返回 LoginResult,包含 code、有效期、实际授权 scope 和
新 Host 提供的本地 accountKey;不包含用户资料、app_user_id、token、cookie 或应用密钥。
HbMiniProgramSDKError INVALID_PARAMS:scopes 不是数组、包含未知值或
重复值,或当前 Host 尚未启用请求的 steam_account scope。
HbMiniProgramSDKError PERMISSION_NOT_IN_SNAPSHOT 或 PERMISSION_DENIED:
当前运行快照缺少或未启用 userInfo 权限。
HbMiniProgramSDKError SERVER_API_REQUIRED:当前处于无网络的 local
模式,不能获取授权码;需要为当前版本启用有效网络权限。
HbMiniProgramSDKError USER_GESTURE_REQUIRED:本次需要展示黑盒登录或
授权 UI,但调用没有可信用户手势;AUTHORIZATION_CANCELLED:用户取消、关闭授权页,
或没有同意必选的 identity。
HbMiniProgramSDKError HEYBOX_APP_LOGIN_REQUIRED:当前黑盒账号未登录或
登录态已失效;AUTHORIZATION_CONTEXT_CHANGED:授权期间发生账号切换、授权撤销等
上下文变化;AUTHORIZATION_PRESENTATION_UNAVAILABLE:Host 无法展示授权界面。
HbMiniProgramSDKError REQUEST_FAILED、REQUEST_UNSUPPORTED、
INVALID_RESPONSE、INVALID_STATE、METHOD_FORBIDDEN 或 RUNTIME_DESTROYED:Host
请求、响应、身份上下文、能力支持或 Runtime 生命周期不满足调用要求。
HbMiniProgramSDKError RATE_LIMITED:登录或授权上下文请求遇到上游 403/429,
或该 endpoint 处于 Runtime 熔断窗口;error.data.retryAfterMs(可能缺失)给出建议退避时长。
HbMiniProgramSDKError RATE_LIMITED_BY_RUNTIME:Runtime 本地配额或循环检测
拒绝,请求没有到达上游;error.data.origin 为 'budget' 或 'loop'。两者都应停止立即重试。
HbMiniProgramSDKError SDK 握手、bridge 请求超时或 SDK 销毁时,抛出对应
初始化/transport 错误;业务应根据稳定的 error.code 分支,不比较 message。
在项目根 package.json#heybox.permissions.userInfo.enabled 中声明 true 后才能调用。
userInfo 是开发者权限声明,LoginOptions.scopes 是用户资料授权,两层门禁互不
替代。
SDK 会自动等待握手,但可能展示 UI 的调用必须直接发生在登录、绑定账号等明确的用户
操作回调中。页面应提前用 getHandshakeState() 和 onHandshakeStateChange() 启用按钮,
不要在点击后先等待其他异步工作。所需 scope 已授权时,Host 可以不展示 UI,直接签发
新 code;调用方仍不能假定以后每次都能静默完成。
本能力通过 Host 的受信请求完成登录。平台为当前版本启用 Steam 账号能力后,无网络的
local 模式会拒绝调用;兼容 legacy 模式保持既有行为。页面若用
network.request() 把 code 发给自己的服务端,该网络调用仍须另行声明并获得 network
平台批准。页面不能直接访问平台换票接口,也不能持有服务端应用凭据。
import hbSDK, { HbMiniProgramSDKError } from '@heybox/hb-sdk'
async function loginFromUserAction() {
try {
const result = await hbSDK.auth.login({ scopes: ['profile'] })
// 这是开发者自己的 HTTPS 接口;服务端负责换票并建立业务 session。
await hbSDK.network.request({
url: 'https://api.example.com/session/heybox',
method: 'POST',
data: { code: result.code },
})
if (!result.scopes.includes('profile')) {
renderWithoutProfile()
}
} catch (error) {
if (error instanceof HbMiniProgramSDKError && error.code === 'AUTHORIZATION_CANCELLED') {
return
}
throw error
}
}
为当前小程序获取一次性短期授权码,由开发者服务端建立用户会话。