最近更新:2024-12-31
展开全部
HarmonyOS SDK 接口说明
- JVerificationInterface,包含 SDK 所有接口
设置 Debug 模式
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.setDebugMode(enable: boolean)
- 接口说明:
- 设置是否开启 debug 模式。true 则会打印更多的日志信息。建议在 init 接口之前调用。
- 参数说明:
- enable:debug 开关
- 调用示例:
- 接口说明:
JVerificationInterface.setDebugMode(true);
JVerificationInterface.setDebugMode(true);
此代码块在浮窗中显示
SDK 初始化
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.init(appkey:string, callback:(code:number, msg:string)=>void)
- 接口说明:
- 初始化接口。
- 参数说明:
- appkey:极光appkey
- callback:回调接口
- 回调说明:
- code: 返回码,8000 代表初始化成功,其他为失败,详见错误码描述
- msg:结果描述
- 调用示例:
- 接口说明:
JVerificationInterface.init("你的APPKEY", (code, msg) => {
});
JVerificationInterface.init("你的APPKEY", (code, msg) => {
});
此代码块在浮窗中显示
获取初始化是否成功标识
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.isInitSuccess()
- 接口说明:
- 获取 sdk 是否整体初始化成功的标识
- 返回结果
- boolean : true - 成功,false - 失败
- 调用示例:
- 接口说明:
let isSuccess = JVerificationInterface.isInitSuccess();
let isSuccess = JVerificationInterface.isInitSuccess();
此代码块在浮窗中显示
判断网络环境是否支持一键登录
支持的版本
开始支持的版本 1.0.0
接口定义
- async JVerificationInterface.checkVerifyEnable()
- 接口说明:
- 判断当前的手机网络环境是否可以使用认证。
- 返回说明:
- 返回 true 代表可以使用;返回 false 建议使用其他验证方式。
- 调用示例:
- 接口说明:
let verifyEnable = await JVerificationInterface.checkVerifyEnable();
let verifyEnable = await JVerificationInterface.checkVerifyEnable();
此代码块在浮窗中显示
预取号
- SDK 会缓存预取号结果,提升之后授权页拉起速度。所以建议拉起授权页前,比如在开屏页或者业务入口页预先调用此接口进行预取号。
- 请求成功后,不要频繁重复调用。
- 不要在预取号回调中重复调用预取号或者拉起授权页接口。
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.prelogin(callback:(code:number, msg:string, operatorMsg:string)=>void, timeout = 10000)
- 接口说明:
- 验证当前运营商网络是否可以进行一键登录操作,该方法会缓存取号信息,提高一键登录效率。建议发起一键登录前先调用此方法。
- 参数说明:
- timeOut: 超时时间(毫秒), 有效取值范围(5000,30000], 若小于等于 5000 或大于 30000 则取默认值 10000. 推荐设置为 5001-10000.
- listener:接口回调
- 回调说明:
- code: 返回码,7000 代表获取成功,其他为失败,详见错误码描述
- content:调用结果信息描述
- operatorMsg: 运营商信息
- 调用示例:
- 接口说明:
JVerificationInterface.prelogin((code,msg,operateRet)=>{
console.log("code:" + code + ", msg:" + msg + ", operateRet:" + operateRet);
});
JVerificationInterface.prelogin((code,msg,operateRet)=>{
console.log("code:" + code + ", msg:" + msg + ", operateRet:" + operateRet);
});
此代码块在浮窗中显示
判断预取号是否有效
支持的版本
开始支持的版本 1.0.0
接口定义
- async JVerificationInterface.isValidePreloginCache()
- 接口说明:
- 判断当前预取号是否有效。
- 返回说明:
- 返回 true 代表可以使用;返回 false 建议使用其他验证方式。
- 调用示例:
- 接口说明:
let enable = await JVerificationInterface.isValidePreloginCache();
let enable = await JVerificationInterface.isValidePreloginCache();
此代码块在浮窗中显示
清除预取号缓存
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.clearPreLoginCache()
- 接口说明:
- 清除 sdk 当前预取号结果缓存。
- 调用示例:
- 接口说明:
JVerificationInterface.clearPreLoginCache();
JVerificationInterface.clearPreLoginCache();
此代码块在浮窗中显示
拉起授权页面
- 一键登录需要依赖预取号结果,如果没有预取号,一键登录时会自动预取号。
- 建议拉起授权页前,比如在开屏页或者业务入口页预先调用此接口进行预取号,可以提升授权页拉起速度,优化体验。
- 一键登录请求成功后,不要频繁重复调用。运营商会限制单位时间内请求次数。
- 不要在一键登录回调中重复调用预取号或者拉起授权页接口。
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.loginAuth(settings:JVerificationLoginSettings, callback:(code:number, msg:string, operatorMsg:string)=>void)
- 接口说明:
- 调起一键登录授权页面,在用户授权后获取 loginToken
- 参数说明:
- settings:登录接口设置项。
- callback:登录授权结果回调
- 回调说明:
- code: 返回码,6000 代表 loginToken 获取成功,6001 代表 loginToken 获取失败,其他返回码详见描述
- content:返回码的解释信息,若获取成功,内容信息代表 loginToken。
- operatorReturn: 运营商结果信息
- 调用示例:
- 接口说明:
let settings = new JVerificationLoginSettings();
JVerificationInterface.loginAuth(settings, (code,msg,operateRet)=>{
console.log("code:" + code + ", msg:" + msg + ", operateRet:" + operateRet);
});
let settings = new JVerificationLoginSettings();
JVerificationInterface.loginAuth(settings, (code,msg,operateRet)=>{
console.log("code:" + code + ", msg:" + msg + ", operateRet:" + operateRet);
});
此代码块在浮窗中显示
一键登录参数JVerificationLoginSettings
export class JVerificationLoginSettings {
autoFinish = true;//自动关闭,仅限联通,电信
timeout = 10*1000;//超时时间}
export class JVerificationLoginSettings {
autoFinish = true;//自动关闭,仅限联通,电信
timeout = 10*1000;//超时时间}
此代码块在浮窗中显示
说明 :获取到一键登录的 loginToken 后,将其返回给应用服务端,从服务端调用 REST API 来获取手机号码
关闭授权页面
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.dismissLoginAuthActivity()
- 接口说明:
- 关闭登录授权页,如果当前授权正在进行,则 loginAuth 接口会立即触发 6002 取消回调。
- 支持移动、联通、电信
- 调用示例:
- 接口说明:
JVerificationInterface.dismissLoginAuthActivity()
JVerificationInterface.dismissLoginAuthActivity()
此代码块在浮窗中显示
关闭隐私协议二次弹窗
支持的版本
开始支持的版本 1.1.0
接口定义
- JVerificationInterface.closeCheckDialog()
- 接口说明:
- 关闭隐私协议二次弹窗
- 仅限联通,电信
- 调用示例:
- 接口说明:
JVerificationInterface.closeCheckDialog()
JVerificationInterface.closeCheckDialog()
此代码块在浮窗中显示
自定义授权页面 UI 样式
支持的版本
开始支持的版本 1.1.0
接口定义
- JVerificationInterface.setCustomUIWithConfig(config:JVerifyUIConfig)
- 接口说明:
- 修改授权页面主题,开发者可以通过 setCustomUIWithConfig 方法修改授权页面主题,需在 loginAuth 接口之前调用
- 参数说明:
- uiConfig:主题配置对象,开发者在 JVerifyUIConfig.java 类中调用对应的方法配置授权页中对应的元素,详情参考 JVerifyUIConfig 配置元素说明。
- 调用示例:
- 接口说明:
let builder = new JVerifyUIConfigBuilder();
builder.enableDialogMode(true)
.setDialogWidth(275)
.setDialogHeight(400)
.setLogoOffsetY(30)
.setDialogPage(this)
.setLogBtnOffsetY(30)
.setLogBtnWidth(150)
.setPrivacyMargin({left:10, right:20, bottom:20})
................................
let uiconfig:JVerifyUIConfig = builder.build();
JVerificationInterface.setCustomUIWithConfig(uiconfig);
let builder = new JVerifyUIConfigBuilder();
builder.enableDialogMode(true)
.setDialogWidth(275)
.setDialogHeight(400)
.setLogoOffsetY(30)
.setDialogPage(this)
.setLogBtnOffsetY(30)
.setLogBtnWidth(150)
.setPrivacyMargin({left:10, right:20, bottom:20})
................................
let uiconfig:JVerifyUIConfig = builder.build();
JVerificationInterface.setCustomUIWithConfig(uiconfig);
此代码块在浮窗中显示
JVerifyUIConfig 一键登录-配置元素说明
- 支持的版本 :1.1.0
- 使用 JVerifyUIConfigBuilder 配置对应属性
- 设置授权页背景
- 一键登录-弹窗模式
方法 | 参数类型 | 说明 |
---|---|---|
enableDialogMode | boolean | 设置为true时为弹窗模式,默认false |
setDialogPage | object | 展示弹窗的Component页面 |
setDialogWidth | number | 弹窗宽度 |
setDialogHeight | number | 弹窗高度 |
- 页面背景
方法 | 参数类型 | 说明 |
---|---|---|
setAuthBGImgPath | string | 背景图片 |
setAuthBGVideoPath | string,string | 参数1:背景视频,需要设置在resources/rawfile目录下,参数2:视频加载前预置图片 |
setAuthBGGifPath | string | gif背景图片 |
- 安全区域和返回按钮
方法 | 参数类型 | 说明 |
---|---|---|
setTopSafeAreaHeight | number | 顶部安全高度 |
setBottomSafeAreaHeight | number | 底部安全高度 |
setReturnBtnImgPath | string | 返回按钮图片图片 |
setReturnBtnHidden | boolean | 是否隐藏返回按钮 |
setReturnBtnWidth | number | 返回按钮宽度 |
setReturnBtnHeight | number | 返回按钮高度 |
setReturnBtnOffsetX | number | 返回按钮x轴偏移 |
setReturnBtnOffsetY | number | 返回按钮y轴偏移 |
- logo
方法 | 参数类型 | 说明 |
---|---|---|
setLogoImgPath | string | logo图片 |
setLogoWidth | number | 设置logo宽度 |
setLogoHeight | number | 设置logo高度 |
setLogoOffsetX | number | logo x轴偏移 |
setLogoOffsetY | number | logo y轴偏移 |
setLogoHidden | boolean | 是否隐藏logo |
- 手机号码
方法 | 参数类型 | 说明 |
---|---|---|
setNumberColor | ResourceColor | 手机号颜色 |
setNumberSize | number | 手机号字号 |
setNumberFieldOffsetX | number | 手机号x轴偏移 |
setNumberFieldOffsetY | number | 手机号y轴偏移 |
setNumberFieldWidth | number | 手机号文本宽度 |
setNumberFieldHeight | number | 手机号文本高度 |
setNumberTextBold | boolean | 手机号是否加粗 |
- slogan
方法 | 参数类型 | 说明 |
---|---|---|
setSloganTextColor | ResourceColor | slogan颜色 |
setSloganTextSize | number | slogan字号 |
setSloganOffsetX | number | slogan x轴偏移 |
setSloganOffsetY | number | slogan y轴偏移 |
setSloganTextBold | boolean | slogan是否加粗 |
- 登录按钮
方法 | 参数类型 | 说明 |
---|---|---|
setLogBtnText | string | 登录按钮文本 |
setLogBtnTextColor | ResourceColor | 登录按钮颜色 |
setLogBtnImgPath | string | 登录按钮背景图片 |
setLogBtnOffsetX | number | 登录按钮x轴偏移 |
setLogBtnOffsetY | number | 登录按钮y轴偏移 |
setLogBtnWidth | number | 登录按钮宽度 |
setLogBtnHeight | number | 登录按钮高度 |
setLogBtnTextSize | number | 登录按钮文本字号 |
setLogBtnTextBold | boolean | 登录按钮是否加粗 |
- 隐私协议部分
方法 | 参数类型 | 说明 |
---|---|---|
setPrivacyColor | ResourceColor,ResourceColor | 参数1:隐私协议基础颜色 参数2:隐私协议本体颜色 |
setPrivacyMargin | Margin | 隐私协议边缘距离 |
setPrivacyText | string,string | 参数1:隐私协议前置文本 参数2:隐私协议后置文本 |
setUncheckedImgPath | string | 未选中时checkbox图片 |
setCheckedImgPath | string | 选中时checkbox图片 |
setPrivacyState | boolean | 隐私协议勾选状态 |
setPrivacyTextCenterGravity | boolean | 隐私协议是否居中 |
setPrivacyTextSize | number | 隐私协议字号 |
setPrivacyCheckboxSize | number | checkbox尺寸 |
setPrivacyCheckboxInCenter | boolean | checkbox是否垂直居中 |
setEnableHintToastText | string | 未勾选隐私协议时点击登录提示文本 |
setEnablePrivacyCheckDialog | boolean | 是否支持隐私协议二次弹窗 |
setPrivacyTextBold | boolean | 隐私协议是否加粗 |
setPrivacyUnderlineText | boolean | 隐私协议是否增加下划线 |
setPrivacyNameAndUrlBeanList | Array |
隐私协议数组 |
- PrivacyBean-隐私协议模型
方法 | 参数类型 | 说明 |
---|---|---|
name | string | 页面名称 |
url | string | url地址 |
separator | string | 分隔符 |
text | string | 显示文本 |
- 隐私协议页面
方法 | 参数类型 | 说明 |
---|---|---|
setPrivacyNavColor | ResourceColor | 隐私协议页面导航栏颜色 |
setPrivacyNavTitleTextColor | ResourceColor | 隐私协议页面导航栏标题颜色 |
setPrivacyNavTitleTextSize | number | 隐私协议页面导航栏标题字号 |
setPrivacyNavReturnBtnPath | string | 隐私协议页面导航栏返回按钮图片 |
setPrivacyNavTitleTextBold | boolean | 隐私协议页面导航栏标题是否加粗 |
- 隐私协议二次弹窗
方法 | 参数类型 | 说明 |
---|---|---|
setPrivacyCheckDialogTitleText | string | 二次弹窗标题 |
setPrivacyCheckDialogLogBtnText | string | 二次弹窗登录按钮文本 |
setPrivacyCheckDialogTitleTextSize | number | 二次弹窗标题文本字号 |
setPrivacyCheckDialogTitleTextColor | ResourceColor | 二次弹窗标题颜色 |
setPrivacyCheckDialogContentTextGravityCenter | boolean | 二次弹窗内容是否居中 |
setPrivacyCheckDialogContentTextSize | number | 二次弹窗内容字号 |
setPrivacyCheckDialogContentTextMargin | Margin | 二次弹窗内容边缘距离 |
setPrivacyCheckDialogLogBtnImgPath | string | 二次弹窗登录按钮背景图片 |
setPrivacyCheckDialoglogBtnTextColor | ResourceColor | 二次弹窗登录按钮文本颜色 |
setPrivacyCheckDialogWidth | number | 二次弹窗宽度 |
setPrivacyCheckDialogHeight | number | 二次弹窗高度 |
setPrivacyCheckDialogLogBtnWidth | number | 二次弹窗登录按钮宽度 |
setPrivacyCheckDialogLogBtnHeight | number | 二次弹窗登录按钮高度 |
setPrivacyCheckDialogLogBtnMargin | Margin | 二次弹窗登录按边缘距离 |
setPrivacyCheckDialogBackgroundColor | ResourceColor | 二次弹窗背景颜色 |
setPrivacyCheckDialogBackgroundImgPath | string | 二次弹窗背景图片 |
- 设置自定义UI
方法 | 参数类型 | 说明 |
---|---|---|
addCustomView | WrappedBuilder<[]> | 设置一个@Builder自定义UI到一键登录页面 |
addCustomViewToCheckDialog | WrappedBuilder<[]> | 设置一个@Builder自定义UI到二次弹窗 |
- 导入一键登录页面使用的默认图片
- 需要将SDK用的图片导入至AppScope/resources/base/media文件夹内
文件名 | 说明 |
---|---|
jverify_background.png | 一键登录主背景图片 |
jverify_ctlogo.png | 电信logo |
jverify_culogo.png | 联通logo |
jverify_dialog_background.png | 一键登录弹窗背景图片 |
jverify_dialog_close.png | 一键登录弹窗关闭按钮 |
jverify_return.png | 一键登录页面关闭按钮 |
- 设置移动运营商 UI
因移动运营商 SDK 提供了全套 UI 且无法删除他们的 UI 后再进行自定义设计,因此需要使用移动提供的 UI 构建器来构建移动运营商的 UI。
具体的配置元素请阅读移动 UI 配置元素说明
方法 | 参数类型 | 说明 |
---|---|---|
setCmUIConfig | GenAuthThemeConfigBuilder | 配置移动 UI |
移动UI配置元素说明
- 支持的版本 :1.1.0
- 使用 GenAuthThemeConfigBuilder 配置对应属性
- 设置移动授权页背景
cmUIConfig(jgBuilder: JVerifyUIConfigBuilder, isDialog: boolean) {
let builder = new GenAuthThemeConfigBuilder();
builder.setNumberMargin({top:100})
if (isDialog) {
builder.setWindowMode(new CustomDialogController({
builder: GenAuthLoginDialog({ dialogWidth: "100%", dialogHeight: "80%" }),
customStyle: false,
gridCount: 4,
autoCancel: false,
cancel: () => {
console.log('dialogController cancel');
},
alignment: DialogAlignment.Center,
}))
}
builder.setLogBtnText("登录")
builder.setLoginBtnTextColor(Color.White)
builder.setLoginBtnColor(Color.Black)
...................
jgBuilder.setCmUIConfig(builder);
}
cmUIConfig(jgBuilder: JVerifyUIConfigBuilder, isDialog: boolean) {
let builder = new GenAuthThemeConfigBuilder();
builder.setNumberMargin({top:100})
if (isDialog) {
builder.setWindowMode(new CustomDialogController({
builder: GenAuthLoginDialog({ dialogWidth: "100%", dialogHeight: "80%" }),
customStyle: false,
gridCount: 4,
autoCancel: false,
cancel: () => {
console.log('dialogController cancel');
},
alignment: DialogAlignment.Center,
}))
}
builder.setLogBtnText("登录")
builder.setLoginBtnTextColor(Color.White)
builder.setLoginBtnColor(Color.Black)
...................
jgBuilder.setCmUIConfig(builder);
}
此代码块在浮窗中显示
- 状态栏
方法 | 说明 |
---|---|
setSystemBarProperties | 设置窗口内导航栏、状态栏属性。 |
- 服务条款对话框
方法 | 说明 |
---|---|
setNavTextColor | 设置服务条款标题字体颜色 |
setNavColor | 设置服务条款标题颜色 |
setNavTextSize | 设置服务条款标题字体大小 |
setClauseComponent | 设置服务条款标题栏自定义view |
- 授权页布局
方法 | 说明 |
---|---|
setLoginPageComponent | 设置授权页布局自定义View |
setLoginPageGrayScale | 设置授权页灰度值,范围0-1 |
- 授权页号码栏
方法 | 说明 |
---|---|
setNumberColor | 设置手机号码字体颜色 |
setNumberSize | 设置号码栏字体大小,加粗 |
setNumberMargin | 设置号码栏偏移 |
setNumberAlignRuleOption | 设置号码栏相对布局偏移规则 |
- 授权页登录按钮
方法 | 说明 |
---|---|
setLoginBtnWidth | 设置登录按钮宽度 |
setLoginBtnHeight | 设置登录按钮高度 |
setLogBtnText | 设置登录按钮文本内容 |
setLoginBtnTextSize | 设置授权登录文本字体大小 |
setLoginBtnTextColor | 设置授权登录按钮字体颜色 |
setLogBtnMargin | 设置登录按钮边缘边距 |
setLoginBtnAlignRuleOption | 设置登录按钮相对布局偏移规则 |
setLoginBtnImgPath | 设置登录按钮背景图片 |
setLoginBtnColor | 设置登录按钮背景颜色。可选参数loginBtnStateEffect设置是否显示按压效果:false无按压效果;true或空有按压效果 |
setLoginBtnBorderRadius | 设置登录按钮圆角 |
setLogBtnClickListener | 设置登录按钮点击监听事件 |
- 授权页隐私栏
方法 | 说明 |
---|---|
setClauses | 设置隐私条款的协议文本,自定义条款,自定义条款链接、字体颜色 |
setClauseMargin | 设置隐私条款偏移边距 |
setClauseAlignRuleOption | 设置隐私条款相对布局偏移规则 |
setCheckBox | 设置隐私条款勾选框宽高 |
setClauseState | 设置隐私条款勾选框勾选状态 |
setCheckBoxMargin | 设置隐私条款勾选框偏移边距 |
setCheckBoxShape | 设置勾选框类型(圆角矩形/圆形) |
setCheckBoxImg | 设置 checkbox 勾选和未勾选图片 |
setCheckBoxAlignRuleOption | 设置隐私条款勾选框相对布局偏移规则 |
setGenCheckBoxListener | 设置授权页勾选框和登录按钮的监听事件 |
setGenCheckedChangeListener | 设置授权页勾选框是否勾选的监听事件 |
setCheckTipText | 设置未勾选提示的自定义提示文案。不设置则无提示。 |
setClauseNavMarginTop | 设置协议页标题栏margin top,范围为 0-99 单位为 vp |
- 弹窗模式
方法 | 说明 |
---|---|
setWindowMode | 设置授权页窗口宽高、偏移、窗口属性等 |
- 设置隐私协议页面
方法 | 说明 |
---|---|
setWebDomStorage | 支持隐私协议 Web 组件 DomStorage |
- 授权页语言切换
方法 | 说明 |
---|---|
setLanguageType | 设置默认元素语言,0.中文简体1.中文繁体2.英文 |
- 拉起授权页监听
方法 | 说明 |
---|---|
setGenLoginPageInListener |
- 返回键监听
方法 | 说明 |
---|---|
setGenBackPressedListener | 设置授权页返回键监听事件 |
- 授权按钮监听
方法 | 说明 |
---|---|
setGenAuthLoginListener | 设置授权按钮监听事件,入参回调GenAuthLoginListener,用户点击登录按钮时如果未勾选协议,触发GenAuthLoginListener的(context: UIContext,callBack:AuthLoginCallBack) 方法。可以实现二次弹窗确认的功能 |
AuthLoginCallBack | 授权回调,通过onAuthLoginCallBack(b:boolean)决定是否继续登录流程。可以实现二次弹窗确认的功能 |
JVerifyUIConfig 一键登录-配置元素说明(已废弃)
- 设置授权页背景
- 支持的版本 :1.0.0
- 登录页导航栏
方法 | 参数类型 | 说明 |
---|---|---|
authPageType | number | 登录模式0全屏 1弹窗 |
dialogPage | object | 展示弹窗的Component页面 |
btnName | string | 按钮名字 |
loginBtnColor | number | 登录按钮颜色HEX |
loginTextColor | number | 登录按钮文本颜色HEX |
privacyList | string[][] | 自定义隐私协议,[["隐私协议名","隐私协议地址"]] |
customPolicyLinkColor | number | 用户协议文字颜色HEX |
cmDialogController | CustomDialogController | 中国移动弹窗一键登录专用,暂时必须要设置该属性才能使用 |
号码认证
支持的版本
开始支持的版本 1.0.0
接口定义
- JVerificationInterface.getToken(callback:(code:number, msg:string)=>void, timeout = 10000)
- 接口说明:
- 在预定时间内获取当前在线的 sim 卡所在运营商及 token,如果超过所设时间,接口回调返回超时。
- 参数说明:
- timeOut: 超时时间(毫秒), 有效取值范围(5000,30000], 若小于等于 5000 或大于 30000 则取默认值 10000. 推荐设置为 5001-10000.
- callback:接口回调
- 回调说明:
- code: 返回码,2000 代表获取成功,其他为失败,详见错误码描述
- content:成功时为 token,可用于调用验证手机号接口。token 有效期为 1 分钟,超过时效需要重新获取才能使用。失败时为失败信息
- operatorReturn: 运营商结果信息
- 调用示例:
- 接口说明:
JVerificationInterface.getToken((code,msg,operateRet)=>{
console.log("code:" + code + ", msg:" + msg + ", operateRet:" + operateRet);
});
JVerificationInterface.getToken((code,msg,operateRet)=>{
console.log("code:" + code + ", msg:" + msg + ", operateRet:" + operateRet);
});
此代码块在浮窗中显示
文档内容是否对您有帮助?