diff --git a/API.md b/API.md new file mode 100644 index 0000000..55786dd --- /dev/null +++ b/API.md @@ -0,0 +1,507 @@ +# JVerification React Native SDK + +极光认证 React Native SDK,提供一键登录和短信验证码登录功能。 + +## 常量 + +- `LoginEvent`: 登录事件 +- `SmsLoginEvent`: 短信登录事件 +- `UnCheckBox`: iOS 未选中隐私协议 CheckBox 点击登录按钮的回调事件 + +## 方法 + +### setLoggerEnable + +设置调试模式,默认关闭状态。该接口需在 init 接口之前调用,避免出现部分日志没打印的情况。 + +```typescript +static setLoggerEnable(enable: boolean): void +``` + +### init + +SDK 初始化。 + +```typescript +static init(params: { + time: number, // 初始化超时时间,单位毫秒,合法范围是(0,30000],推荐设置为5000-10000,默认值为10000 + appkey: string, // 极光系统应用唯一标识,必填 (仅ios) + channel?: string, // 应用发布渠道,可选 (仅ios) + advertisingId?: string, // 广告标识符,可选 (仅ios) + isProduction?: boolean // 是否生产环境。如果为开发状态,设置为false;如果为生产状态,应改为true。默认为false,可选 (仅ios) +}, callback: (result: {code: number, content: string}) => void): void +``` + +### isInitSuccess + +获取 SDK 初始化是否成功标识。 + +```typescript +static isInitSuccess(callback: (result: {enable: boolean}) => void): void +``` + +### checkLoginEnable + +SDK 判断网络环境是否支持-是否开启严格模式。 + +```typescript +static checkLoginEnable(strictMode: boolean, callback: (result: {enable: boolean}) => void): void +``` + +### getToken + +SDK 获取号码认证 token。 + +```typescript +static getToken(time: number, callback: (result: { + code: number, // 返回码,2000代表获取成功,其他为失败,详见错误码描述 + content: string, // 成功时为token,可用于调用验证手机号接口。token有效期为1分钟,超过时效需要重新获取才能使用。失败时为失败信息 + operator: string // 成功时为对应运营商,CM代表中国移动,CU代表中国联通,CT代表中国电信。失败时可能为null +}) => void): void +``` + +参数说明: +- `time`: 超时时间(毫秒),有效取值范围(0,10000],若小于等于0则取默认值5000.大于10000则取10000.为保证获取token的成功率,建议设置为3000-5000ms. + +### preLogin + +SDK 获取预取号 token。 + +```typescript +static preLogin(time: number, callback: (result: { + code: number, // 返回码,7000代表获取成功,其他为失败,详见错误码描述 + content: string // 调用结果信息描述 +}) => void): void +``` + +参数说明: +- `time`: 超时时间(毫秒),有效取值范围(0,10000],若小于等于0则取默认值5000.大于10000则取10000, 为保证预取号的成功率,建议设置为3000-5000ms + +### clearPreLoginCache + +SDK 清除预取号缓存。 + +```typescript +static clearPreLoginCache(): void +``` + +### login + +SDK 请求授权一键登录。 + +```typescript +static login(enable: boolean, time: number, callback: (result: { + code: number, // 返回码,6000代表获取成功,其他为失败,详见错误码描述 + content: string // 成功时为logintoken,用于置换手机号 +}) => void): void +``` + +参数说明: +- `enable`: 是否自动关闭授权页,true - 是,false - 否;若此字段设置为false,请在收到一键登录回调后调用SDK提供的关闭授权页面方法 +- `time`: 超时时间(毫秒),有效取值范围(0,10000],若小于等于0则取默认值5000.大于10000则取10000.为保证获取token的成功率,建议设置为3000-5000ms. + +### dismissLoginPage + +SDK 关闭授权页面。 + +```typescript +static dismissLoginPage(): void +``` + +### smsLogin + +拉起短信登录页。 + +```typescript +static smsLogin(enable: boolean, time: number, callback: (result: { + code: number, // 返回码,4000代表获取成功,其他为失败,详见错误码描述 + content: string, // 说明信息 + phoneNumber: string // 成功时为手机号 +}) => void): void +``` + +参数说明: +- `enable`: 是否自动关闭授权页,true - 是,false - 否;若此字段设置为false,请在收到一键登录回调后调用SDK提供的关闭授权页面方法 +- `time`: 超时时间(毫秒), 有效取值范围(5000,30000], 若小于等于 5000 或大于 30000 则取默认值 10000. 推荐设置为 5001-10000. + +### addLoginCustomConfig + +设置一键登录页面样式。所有配置项均为可选,需要在 login 前调用生效。 + +```typescript +static addLoginCustomConfig(customConfigParams: { + // 基础配置 + backgroundImage?: string, // 背景图 + backgroundGifImage?: string, // 背景gif + backgroundVideo?: string, // 背景视频 + backgroundVideoPlaceHolderImage?: string, // 背景视频默认图 + appLanguageType?: string, // 语言 0.中文简体(默认) 1.中文繁体 2.英文 + + // 状态栏配置 + statusBarTransparent?: boolean, // 状态栏是否透明 + statusBarHidden?: boolean, // 状态栏是否隐藏 + statusBarMode?: string, // 状态栏模式 light,dark + + // 导航栏配置 + navHidden?: boolean, // 导航栏是否隐藏 + navColor?: number, // 导航栏颜色 + navTitle?: string, // 导航栏标题 + navTitleSize?: number, // 导航栏标题文字字体大小(单位:sp) + navTitleColor?: number, // 导航栏标题文字颜色 + navReturnHidden?: boolean, // 导航栏返回按钮是否隐藏 + navTransparent?: boolean, // 导航栏是否透明 + navReturnImage?: string, // 导航栏左侧返回按钮图标 + navReturnX?: number, // 导航栏返回按钮距屏幕左侧偏移 + navReturnY?: number, // 导航栏返回按钮距屏幕右侧偏移 + navReturnW?: number, // 导航栏返回按钮宽度 (仅Android) + navReturnH?: number, // 导航栏返回按钮高度 (仅Android) + + // Logo配置 + logoHidden?: boolean, // logo是否隐藏 + logoImage?: string, // logo(android默认为应用图标;ios默认无) + logoX?: number, // logo相对于屏幕左边x轴偏移 + logoY?: number, // logo相对于标题栏下边缘y偏移 + logoW?: number, // logo宽 + logoH?: number, // logo高 + + // 号码栏配置 + numberSize?: number, // 手机号码字体大小(单位:sp) + numberColor?: number, // 手机号码字体颜色 + numberX?: number, // 号码栏相对于屏幕左边x轴偏移 + numberY?: number, // 号码栏相对于标题栏下边缘y偏移 + numberW?: number, // 号码栏宽度 + numberH?: number, // 号码栏高度 + + // Slogan配置 + sloganHidden?: boolean, // slogan是否隐藏 + sloganTextSize?: number, // slogan字体大小 + sloganTextColor?: number, // slogan文字颜色 + sloganX?: number, // slogan相对于屏幕左边x轴偏移 + sloganY?: number, // slogan相对于标题栏下边缘y偏移 + sloganW?: number, // slogan宽度 (仅iOS) + sloganH?: number, // slogan高度 (仅iOS) + + // 登录按钮配置 + loginBtnText?: string, // 登录按钮文字 + loginBtnTextSize?: number, // 登录按钮字体大小 + loginBtnTextColor?: number, // 登录按钮文字颜色 + loginBtnImage?: string, // 登录按钮selector选择样式 (仅android) + loginBtnNormalImage?: string, // 登录按钮正常图片 (仅ios,三个同时设置生效) + loginBtnDisabledImage?: string, // 登录按钮失效图片 (仅ios,三个同时设置生效) + loginBtnSelectedImage?: string, // 登录按钮按下图片 (仅ios,三个同时设置生效) + loginBtnX?: number, // 登录按钮相对于屏幕左边x轴偏移 + loginBtnY?: number, // 登录按钮相对于标题栏下边缘y偏移 + loginBtnW?: number, // 登录按钮宽度 + loginBtnH?: number, // 登录按钮高度 + + // 隐私条款配置 + privacyOne?: string[], // [隐私条款一名称,隐私条款一链接] + privacyTwo?: string[], // [隐私条款二名称,隐私条款二链接] + privacyNameAndUrlBeanList?: Array<{ // 隐私条款配置数组 + name: string, // 条款名称 + url: string, // 条款链接 + separator: string // 分隔符 + }>, + privacyColor?: number[], // [隐私条款名称颜色,隐私条款链接颜色] + privacyText?: string[], // [隐私条款名称外的文字,隐私条款名称外的文字,隐私条款名称外的文字,隐私条款名称外的文字] + privacyTextSize?: number, // 隐私条款文字字体大小 + privacyTextGravityMode?: string, // 隐私条款文本对齐方式,目前仅支持 left、center + privacyBookSymbolEnable?: boolean, // 隐私条款运营商协议名是否加书名号 + privacyX?: number, // 隐私条款相对于屏幕左边x轴偏移 + privacyY?: number, // 隐私条款相对于页面下边缘y偏移 + privacyW?: number, // 隐私条款宽度 + privacyH?: number, // 隐私条款高度 + textVerAlignment?: string, // 设置条款文字是否垂直居中对齐(默认居中对齐) 0是top 1是m 2是b only iOS + openPrivacyInBrowser?: boolean, // 是否在浏览器中打开隐私条款 默认是false + + // 隐私条款复选框配置 + privacyCheckboxHidden?: boolean, // 隐私条款checkbox是否隐藏 + privacyCheckEnable?: boolean, // 隐私条款默认选中状态。默认不选中 + privacyCheckedImage?: string, // 隐私条款复选框选中图片 + privacyUncheckedImage?: string, // 隐私条款复选框未选中图片 + privacyCheckboxSize?: number, // 设置隐私条款checkbox尺寸 默认是10 + isAlertPrivacyVC?: boolean, // 是否在未勾选隐私协议的情况下 弹窗提示窗口 iOS + enablePrivacyCheckDialog?: boolean, // 是否在未勾选隐私协议的情况下 弹窗提示窗口 Android + + // 隐私条款Web页面配置 + privacyWebNavColor?: number, // 协议展示web页面导航栏背景颜色 + privacyWebNavTitle?: string, // 协议页导航栏标题(仅iOS) + privacyWebNavTitleSize?: number, // 协议展示web页面导航栏标题文字大小 + privacyWebNavTitleColor?: number, // 协议展示web页面导航栏标题文字颜色 + privacyWebNavReturnImage?: string, // 协议展示web页面导航栏返回按钮图标 + + // iOS 二次弹窗配置 + agreementAlertViewCornerRadius?: number, // 协议二次弹窗的圆角 + agreementAlertViewBackgroundColor?: number, // 协议二次弹窗背景颜色 + agreementAlertViewBackgroundImgPath?: string, // 协议二次弹窗背景图片 + agreementAlertViewTitleText?: string, // 协议二次弹窗标题文本 + agreementAlertViewTitleTexSize?: number, // 协议二次弹窗标题文本样式 + agreementAlertViewTitleTextColor?: number, // 协议二次弹窗标题文本颜色 + agreementAlertViewContentTextAlignment?: string, // 协议二次弹窗内容文本对齐方式 + agreementAlertViewContentTextFontSize?: number, // 协议二次弹窗内容文本字体大小 + agreementAlertViewLogBtnText?: string, // 协议二次弹窗登录按钮文本 + agreementAlertViewLogBtnTextFontSize?: number, // 协议二次弹窗登录按钮文本字体大小 + agreementAlertViewLoginBtnNormalImagePath?: string, // 协议二次弹窗登录按钮背景图片 - 激活状态的图片 + agreementAlertViewLoginBtnPressedImagePath?: string, // 协议二次弹窗登录按钮背景图片 - 高亮状态的图片 + agreementAlertViewLoginBtnUnableImagePath?: string, // 协议二次弹窗登录按钮背景图片 - 失效状态的图片 + agreementAlertViewLogBtnTextColor?: number, // 协议二次弹窗登录按钮文本颜色 + agreementAlertViewUIFrames?: { // 协议二次弹窗各控件的frame设置 + superViewFrame: [number, number, number, number], + alertViewFrame: [number, number, number, number], + titleFrame: [number, number, number, number], + contentFrame: [number, number, number, number], + buttonFrame: [number, number, number, number] + }, + + // Android 二次弹窗配置 + privacyCheckDialogGravityModeCenter?: boolean, // 协议的二次弹窗对齐方式 目前仅支持 bottom、center + setPrivacyCheckDialogOffsetX?: number, // 隐私二次弹窗相对于屏幕左边x轴偏移 + setPrivacyCheckDialogOffsetY?: number, // 隐私二次弹窗相对于屏幕左边x轴偏移 + setPrivacyCheckDialogWidth?: number, // 隐私二次弹窗 宽 + setPrivacyCheckDialogHeight?: number, // 隐私二次弹窗 高 + setPrivacyCheckDialogTitleText?: string, // 协议二次弹窗标题 + setPrivacyCheckDialogTitleTextSize?: number, // 协议二次弹窗标题字号 + setPrivacyCheckDialogTitleTextColor?: number, // 协议二次弹窗标题文字颜色 + setPrivacyCheckDialogContentTextGravity?: string, // 协议的二次弹窗对齐方式 目前仅支持 left、center + setPrivacyCheckDialogContentTextSize?: number, // 协议的二次弹窗文字大小 + setPrivacyCheckDialogLogBtnMarginL?: number, // 隐私二次弹窗相对于屏幕左边x轴偏移 + setPrivacyCheckDialogLogBtnMarginT?: number, // 协议二次弹窗相对于屏幕左边y轴偏移 + setPrivacyCheckDialogLogBtnMarginB?: number, // 协议二次弹窗相对于屏幕左边b轴偏移 + setPrivacyCheckDialogLogBtnMarginR?: number, // 协议二次弹窗相对于屏幕右边x轴偏移 + setPrivacyCheckDialogLogBtnImgPath?: string, // 协议的二次弹窗按钮背景图片 + setPrivacyCheckDialoglogBtnTextColor?: number, // 协议二次弹窗按钮字体颜色 + setPrivacyCheckDialogLogBtnWidth?: number, // 隐私二次弹窗 登录按钮宽 + setPrivacyCheckDialogLogBtnHeight?: number, // 隐私二次弹窗 登录按钮高 + setPrivacyCheckDialogLogBtnText?: string, // 协议的二次弹窗按钮标题字体 + setPrivacyCheckDialogContentTextPaddingL?: number, // 隐私协议弹窗内容文字左边距 + setPrivacyCheckDialogContentTextPaddingT?: number, // 隐私协议弹窗内容文字上边距 + setPrivacyCheckDialogContentTextPaddingR?: number, // 隐私协议弹窗内容文字右边距 + setPrivacyCheckDialogContentTextPaddingB?: number, // 隐私协议弹窗内容文字下边距 + + // 短信登录UI配置 + smsUIConfig?: { + smsAuthPageBackgroundImagePath?: string, // 登录界面背景图片 + smsNavText?: string, // 导航栏标题文字 + smsNavTextColor?: number, // 导航栏标题颜色 only iOS + smsNavTextBold?: boolean, // 导航栏标题是否加粗 only iOS + smsNavTextSize?: number, // 导航栏标题大小 only iOS + smsSloganTextSize?: number, // 设置slogan字体大小 + isSmsSloganHidden?: boolean, // 设置slogan字体是否隐藏 only android + isSmsSloganTextBold?: boolean, // 设置slogan字体是否加粗 only android + smsSloganOffsetX?: number, // 设置slogan相对于屏幕左边x轴偏移 + smsSloganOffsetY?: number, // 设置slogan相对于标题栏下边缘y偏移 + smsSloganOffsetBottomY?: number, // 设置slogan相对于屏幕底部下边缘y轴偏移 + smsSloganWidth?: number, // 设置slogan宽度 only iOS + smsSloganHeight?: number, // 设置slogan高度 only iOS + smsSloganTextColor?: number, // 设置移动slogan文字颜色 + smsLogoWidth?: number, // 设置logo宽度(单位:dp) + smsLogoHeight?: number, // 设置logo高度(单位:dp) + smsLogoOffsetX?: number, // 设置logo相对于屏幕左边x轴偏移 + smsLogoOffsetY?: number, // 设置logo相对于标题栏下边缘y偏移 + smsLogoOffsetBottomY?: number, // 设置logo相对于屏幕底部y轴偏移 + isSmsLogoHidden?: boolean, // 隐藏logo + smsLogoResName?: string, // 设置logo图片 + smsPhoneTextViewOffsetX?: number, // 设置号码标题相对于屏幕左边x轴偏移 only android + smsPhoneTextViewOffsetY?: number, // 设置号码标题相对于标题栏下边缘y偏移 only android + smsPhoneTextViewTextSize?: number, // 设置号码标题字体大小 only android + smsPhoneTextViewTextColor?: number, // 设置号码标题文字颜色 only android + smsPhoneInputViewOffsetX?: number, // 设置号码输入框相对于屏幕左边x轴偏移 + smsPhoneInputViewOffsetY?: number, // 设置号码输入框相对于屏幕底部y轴偏移 + smsPhoneInputViewWidth?: number, // 设置号码输入框宽度 + smsPhoneInputViewHeight?: number, // 设置号码输入框高度 + smsPhoneInputViewTextColor?: number, // 设置手机号码输入框字体颜色 + smsPhoneInputViewTextSize?: number, // 设置手机号码输入框字体大小 + smsPhoneInputViewPlaceholderText?: string, // 设置手机号码输入框提示词 only iOS + smsVerifyCodeTextViewOffsetX?: number, // 设置验证码标题相对于屏幕左边x轴偏移 only android + smsVerifyCodeTextViewOffsetY?: number, // 设置验证码标题相对于标题栏下边缘y偏移 only android + smsVerifyCodeTextViewTextSize?: number, // 设置验证码标题字体大小 only android + smsVerifyCodeTextViewTextColor?: number, // 设置验证码标题文字颜色 only android + smsVerifyCodeEditTextViewTextSize?: number, // 设置验证码输入框字体大小 + smsVerifyCodeEditTextViewTextColor?: number, // 设置验证码输入框字体颜色 + smsVerifyCodeEditTextViewPlaceholderText?: string, // 设置验证码输入框提示词 only iOS + smsVerifyCodeEditTextViewOffsetX?: number, // 设置验证码输入框相对于屏幕左边x轴偏移 + smsVerifyCodeEditTextViewOffsetY?: number, // 设置验证码输入框相对于标题栏下边缘y偏移 + smsVerifyCodeEditTextViewOffsetR?: number, // 设置验证码输入框相对于屏幕右边偏移 + smsVerifyCodeEditTextViewWidth?: number, // 设置验证码输入框宽度 + smsVerifyCodeEditTextViewHeight?: number, // 设置验证码输入框高度 + smsGetVerifyCodeTextViewOffsetX?: number, // 设置获取验证码按钮相对于屏幕左边x轴偏移 + smsGetVerifyCodeTextViewOffsetY?: number, // 设置获取验证码按钮相对于标题栏下边缘y偏移 + smsGetVerifyCodeTextViewTextSize?: number, // 设置获取验证码按钮字体大小 + smsGetVerifyCodeTextViewTextColor?: number, // 设置获取验证码按钮文字颜色 + smsGetVerifyCodeTextViewOffsetR?: number, // 设置获取验证码按钮相对于屏幕右边偏移 + smsGetVerifyCodeBtnWidth?: number, // 设置获取验证码按钮宽度 only iOS + smsGetVerifyCodeBtnHeight?: number, // 设置获取验证码按钮高度 only iOS + smsGetVerifyCodeBtnCornerRadius?: number, // 设置获取验证码按钮圆角度数 only iOS + smsGetVerifyCodeBtnBackgroundPath?: string, // 设置获取验证码按钮图片 + smsGetVerifyCodeBtnBackgroundPaths?: string[], // 设置获取验证码按钮图片[激活状态,失效状态,高亮状态] only iOS + smsGetVerifyCodeBtnText?: string, // 设置获取验证码按钮文字 only iOS + smsLogBtnOffsetX?: number, // 设置登录按钮相对于屏幕左边x轴偏移 + smsLogBtnOffsetY?: number, // 设置登录按钮相对于标题栏下边缘y偏移 + smsLogBtnWidth?: number, // 设置登录按钮宽度 + smsLogBtnHeight?: number, // 设置登录按钮高度 + smsLogBtnTextSize?: number, // 设置登录按钮字体大小 + smsLogBtnBottomOffsetY?: number, // 设置登录按钮相对屏幕底部y轴偏移 + smsLogBtnText?: string, // 设置登录按钮文字 + smsLogBtnTextColor?: number, // 设置登录按钮文字颜色 + isSmsLogBtnTextBold?: boolean, // 设置登录按钮字体是否加粗 + smsLogBtnBackgroundPath?: string, // 设置授权登录按钮图片 + smsLogBtnBackgroundPaths?: string, // 设置授权登录按钮图片[激活状态,失效状态,高亮状态] only iOS + smsFirstSeperLineOffsetX?: number, // 第一分割线相对于屏幕左边x轴偏移 only android + smsFirstSeperLineOffsetY?: number, // 第一分割线相对于标题栏下边缘y偏移 only android + smsFirstSeperLineOffsetR?: number, // 第一分割线相对于屏幕右边偏移 only android + smsFirstSeperLineColor?: number, // 第一分割线颜色 only android + smsSecondSeperLineOffsetX?: number, // 第二分割线相对于屏幕左边x轴偏移 only android + smsSecondSeperLineOffsetY?: number, // 第二分割线相对于标题栏下边缘y偏移 only android + smsSecondSeperLineOffsetR?: number, // 第二分割线相对于屏幕右边偏移 only android + smsSecondSeperLineColor?: number, // 第二分割线颜色 only android + isSmsPrivacyTextGravityCenter?: boolean, // 设置隐私条款文字是否居中对齐(默认左对齐) + smsPrivacyColor?: number[], // 设置隐私条款名称颜色[基础文字颜色,协议文字颜色] only iOS + smsPrivacyTextVerAlignment?: number, // 设置隐私条款垂直对齐方式 0:top 1:middle 2:bottom only iOS + smsPrivacyOffsetX?: number, // 协议相对于屏幕左边x轴偏移 + smsPrivacyOffsetY?: number, // 协议相对于底部y偏移 + smsPrivacyTopOffsetY?: number, // 协议相对于标题栏下边缘y偏移 + smsPrivacyWidth?: number, // 协议宽度 only iOS + smsPrivacyHeight?: number, // 协议高度 only iOS + smsPrivacyMarginL?: number, // 设置协议相对于登录页左边的间距 only android + smsPrivacyMarginR?: number, // 设置协议相对于登录页右边的间距 only android + smsPrivacyMarginT?: number, // 设置协议相对于登录页顶部的间距 only android + smsPrivacyMarginB?: number, // 设置协议相对于登录页底部的间距 only android + smsPrivacyCheckboxSize?: number, // 设置隐私条款checkbox尺寸 + smsPrivacyCheckboxOffsetX?: number, // 设置隐私条款checkbox相对于屏幕左边x轴偏移 + smsPrivacyCheckboxOffsetY?: number, // 设置隐私条款checkbox相对于屏幕y轴偏移 + isSmsPrivacyCheckboxInCenter?: boolean, // 设置隐私条款checkbox是否相对协议文字纵向居中 + smsPrivacyCheckboxState?: boolean, // 设置隐私条款checkbox默认状态:是否选择 默认:NO + smsPrivacyCheckboxMargin?: number[], // 设置协议相对于登录页的间距 only android + smsPrivacyCheckboxUncheckedImgPath?: string, // 设置隐私条款checkbox未选中时图片 only iOS + smsPrivacyCheckboxCheckedImgPath?: string, // 设置隐私条款checkbox选中时图片 only iOS + smsPrivacyBeanList?: Array<{ // 隐私条款配置数组 + name: string, // 条款名称 + url: string, // 条款链接 + separator: string // 分隔符 + }>, + smsPrivacyClauseStart?: string, // 设置协议条款开头文本 + smsPrivacyClauseEnd?: string, // 设置协议条款结尾文本 + enableSMSService?: boolean, // 如果开启了短信服务,在认证服务失败时,短信服务又可用的情况下拉起短信服务 + smsPrivacyUncheckedMsg?: string, // 短信协议没有被勾选的提示 (仅Android) + smsGetCodeFailMsg?: string, // 短信获取失败提示 (仅Android) + smsPhoneInvalidMsg?: string // 手机号无效提示 (仅Android) + } +}, customViewParams?: { + customViewName: string, // 在index.js中注册的component + customViewPoint: number[] // [int,int,int,int] 基于屏幕左上角的x,y,w,h +}): void +``` + +注意事项: +1. 关于图片资源: + - Android:请将图片放到 res/drawable 目录下 + - iOS:请将图片放到 JVerificationResour.bundle +2. 关于颜色:为 colorInt,可在 Android 代码中直观的看到数值,例如 Color.BLACK = -16777216, Color.WHITE = -1 +3. 关于 x,y,w,h:为保障显示效果,请同时设置 + +### addLoginEventListener + +登录事件监听。 + +```typescript +static addLoginEventListener(callback: (result: { + code: number, + content: string, + operator: string +}) => void): void +``` + +### addUncheckBoxEventListener + +iOS 未选中隐私协议 CheckBox 点击登录按钮的回调事件监听。 + +```typescript +static addUncheckBoxEventListener(callback: (result: any) => void): void +``` + +### removeListener + +移除事件监听。 + +```typescript +static removeListener(callback: Function): void +``` + +### getVerifyCode + +SDK 获取验证码。 + +```typescript +static getVerifyCode(params: { + phonenum: string, // 手机号 + signid: string, // 签名ID + tempid: string // 模板ID +}, callback: (result: { + code: number, // 返回码 + msg: string // 返回信息 +}) => void): void +``` + +### setCodeTime + +设置前后两次获取验证码的时间间隔。 + +```typescript +static setCodeTime(time: number): void +``` + +参数说明: +- `time`: 时间间隔(毫秒) + + + + +## 错误码 + +|code|message|备注| +|:-----:|:----:|:-----:| +|1000|verify consistent|手机号验证一致| +|1001|verify not consistent|手机号验证不一致| +|1002|unknown result|未知结果| +|1003|token expired|token失效| +|1004|sdk verify has been closed|SDK 发起认证未开启| +|1005|包名和 AppKey 不匹配|请检查客户端配置的包名与官网对应 Appkey 应用下配置的包名是否一致| +|1006|frequency of verifying single number is beyond the maximum limit|同一号码自然日内认证消耗超过限制| +|1007|beyond daily frequency limit|appKey 自然日认证消耗超过限制| +|1008|AppKey 非法|请到官网检查此应用信息中的 appkey,确认无误| +|1009||请到官网检查此应用的应用详情;更新应用中集成的极光 SDK 至最新| +|1010|verify interval is less than the minimum limit|同一号码连续两次提交认证间隔过短| +|1011|appSign invalid|应用签名错误,检查签名与 Portal 设置的是否一致| +|2000|内容为token|获取 token 成功| +|2001|fetch token failed|获取 token 失败| +|2002|init failed|SDK 初始化失败| +|2003|network not reachable|网络连接不通| +|2004|get uid failed|极光服务注册失败| +|2005|request timeout|请求超时| +|2006|fetch config failed|获取应用配置失败| +|2007|内容为异常信息|验证遇到代码异常| +|2008|Token requesting, please try again later|正在获取 token 中,稍后再试| +|2009|verifying, please try again later|正在认证中,稍后再试 | +|2010|don't have READ_PHONE_STATE permission|未开启读取手机状态权限| +|2011|内容为异常信息|获取配置时代码异常| +|2012|内容为异常信息|获取 token 时代码异常| +|2013|内容为具体错误原因|网络发生异常| +|2014|internal error while requesting token|请求 token 时发生内部错误| +|2016|network type not supported|当前网络环境不支持认证| +|4001|parameter invalid|参数错误。请检查参数,比如是否手机号格式不对| +|4018||没有足够的余额| +|4031||不是认证 SDK 用户| +|4032||获取不到用户配置| +|4033|appkey is not support login|不是一键登录用户| +|5000|bad server|服务器未知错误| +|6000|内容为token|获取 loginToken 成功| +|6001|fetch loginToken failed|获取 loginToken 失败| +|6002|fetch loginToken canceled|用户取消获取 loginToken| +|6003|UI 资源加载异常|未正常添加 sdk 所需的资源文件| +|6004|authorization requesting, please try again later|正在登录中,稍后再试| +|7000|preLogin success|sdk 预取号成功| +|7001|preLogin failed|sdk 预取号失败| +|7002|preLogin requesting, please try again later|正在预取号中,稍后再试| +|-994|网络连接超时| | +|-996|网络连接断开| | +|-997|注册失败/登录失败|(一般是由于没有网络造成的)如果确保设备网络正常,还是一直遇到此问题,则还有另外一个原因:JPush 服务器端拒绝注册。而这个的原因一般是:你当前 App 的 Android 包名以及 AppKey,与你在 Portal 上注册的应用的 Android 包名与 AppKey 不相同。| diff --git "a/API\350\257\246\347\273\206\350\257\264\346\230\216.md" "b/API\350\257\246\347\273\206\350\257\264\346\230\216.md" deleted file mode 100644 index 036bb07..0000000 --- "a/API\350\257\246\347\273\206\350\257\264\346\230\216.md" +++ /dev/null @@ -1,548 +0,0 @@ - -# JVerification React Native API - -## 引用方式 -```javascript -import React from 'react'; -import JVerification from 'jverification-react-native'; -``` - -## 设置 debug 模式 - -### API -setLoggerEnable(enable) -开启 debug 模式,请在初始化前调用 -#### 接口定义 -```javascript -static setLoggerEnable(enable) { - if (Platform.OS == 'android') { - JVerificationModule.setDebugMode(enable); - } else { - JVerificationModule.setDebug(enable); - } -} -``` - -#### 参数说明 -- true - 开启,false - 关闭 - -#### 示例 -```javascript -JVerification.setLoggerEnable(true); -``` - -## 初始化 - -### API - init(params, callback) -初始化接口 -#### 接口定义 -```javascript -static init(params, callback) { - if (Platform.OS == 'android') { - JVerificationModule.init(params, callback); - } else { - JVerificationModule.setupWithConfig(params, callback); - } -} -``` - -#### 参数说明 -- params 字典 -{'time':int,'appkey':String,'channel':String,'advertisingId':String,'isProduction':boolean} - -|参数名称|参数类型|参数说明| -|:-----:|:----:|:-----:| -|time|int|设置初始化超时时间,单位毫秒,合法范围是(0,30000],推荐设置为 5000-10000,默认值为 10000。| -|isProduction|boolean|是否生产环境。如果为开发状态,设置为 false;如果为生产状态,应改为 true。可选,默认为 false。(仅作用与 iOS)| -|channel |string|应用发布渠道,可选 (仅作用与 iOS)| -|advertisingId|string|广告标识符,可选。(仅作用与 iOS)| - -- callback 回调 类型字典 {"code":int,'content':String} -|参数名称|参数类型|参数说明| -|:-----:|:----:|:-----:| -|code|int| 错误码| -|content|string| 详细信息说明| - -#### 示例 -```javascript -const initParams = { - 'time': 5000, - 'appKey': 'a0e6ace8d5b3e0247e3f58db', //仅iOS - 'channel': 'channel', //仅iOS - 'advertisingId': 'advertisingId', //仅iOS - 'isProduction': false, //仅iOS -}; - -JVerification.init(initParams, result => { - console.log('init:' + JSON.stringify(result)); -}) - -``` - -## 获取初始化状态 - -### API - isInitSuccess(callback) -初始化是否成功 -#### 接口定义 -```javascript -static isInitSuccess(callback) { - if (Platform.OS == 'android') { - JVerificationModule.isInitSuccess(callback); - } else { - JVerificationModule.isSetupClient(callback); - } -} -``` -#### 参数说明 -callback = (result) => {"enable":boolean} - -#### 示例 -```javascript -JVerification.isInitSuccess(result => - console.log('isInitSuccess:' + JSON.stringify(result)) -) -``` - -## 判断网络环境是否支持 - -### API - checkLoginEnable(callback) -判断当前网络环境是否可以发起认证 -#### 接口定义 -```javascript -static checkLoginEnable(callback) { - if (Platform.OS == 'android') { - JVerificationModule.checkVerifyEnable(callback); - } else { - JVerificationModule.checkVerifyEnable(callback); - } -} -``` -#### 参数说明 -callback = (result) => {"enable":boolean} - -#### 示例 -```javascript -JVerification.checkLoginEnable(result => - console.log('checkLoginEnable:' + JSON.stringify(result)) -) -``` - -## SDK获取号码认证token - -### API - getToken(time, callback) - 获取手机号校验token -#### 接口定义 -```javascript -static getToken(time, callback) { - JVerificationModule.getToken(time, callback); -} -``` - -#### 参数说明 -- time:设置初始化超时时间,单位毫秒,合法范围是(0,10000],推荐设置为 5000-10000,默认值为 5000。 - -#### 示例 -```javascript -JVerification.getToken(5000, result => { - console.log('getToken:' + JSON.stringify(result)); -}) -``` - -## 登录预取号 - -### API - preLogin(time, callback) -验证当前运营商网络是否可以进行一键登录操作,该方法会缓存取号信息,提高一键登录效率。建议发起一键登录前先调用此方法。 -#### 接口定义 -```javascript -static preLogin(time, callback) { - JVerificationModule.preLogin(time, callback); -} -``` - -#### 参数说明 -- time:设置初始化超时时间,单位毫秒,合法范围是(0,30000],推荐设置为 5000-10000,默认值为 10000。 -- callback = (result) => {"code":int,'content':String} code:返回码,7000代表获取成功,其他为失败,详见错误码描述; content:调用结果信息描述 - -#### 示例 -```javascript -JVerification.preLogin(5000, result => { - console.log('preLogin:' + JSON.stringify(result)); -}) - -``` - - -## 清除预取号缓存 - -### API - clearPreLoginCache( ) -清除预取号缓存。 - -#### 接口定义 -```javascript -static clearPreLoginCache() { - JVerificationModule.clearPreLoginCache(); -} -``` - -#### 示例 -```javascript - JVerification.clearPreLoginCache() -``` - -## 请求授权一键登录 -注意项说明 -- 一键登录需要依赖预取号结果,如果没有预取号,一键登录时会自动预取号。 -- 建议拉起授权页前,比如在开屏页或者业务入口页预先调用此接口进行预取号,可以提升授权页拉起速度,优化体验。 -- 一键登录请求成功后,不要频繁重复调用。运营商会限制单位时间内请求次数。 -- 不要在一键登录回调中重复调用预取号或者拉起授权页接口。 - -### API - login(enable) -调起一键登录授权页面,在用户授权后获取 loginToken,同时支持授权页事件监听。 -#### 接口定义 -```javascript -static login(enable) { - if (Platform.OS == 'android') { - JVerificationModule.loginAuth(enable); - } else { - JVerificationModule.getAuthorizationWithController(enable); - } -} -``` -#### 参数说明 -- enable: boolean, 是否自动关闭授权页,true - 是,false - 否;若此字段设置为false,请在收到一键登录回调后调用SDK提供的关闭授权页面方法 - -#### 示例 -```javascript - JVerification.login(true); -``` -## 一键登录事件监听 -### API - addLoginEventListener(callback) -#### 接口定义 - ```javascript - //添加一键登录事件监听 - static addLoginEventListener(callback) { - listeners[callback] = DeviceEventEmitter.addListener( - LoginEvent, result => { - callback(result); - }); - } - - //移除事件 - static removeListener(callback) { - if (!listeners[callback]) { - return; - } - listeners[callback].remove(); - listeners[callback] = null; - } - ``` - #### 参数说明 - - 参数 callback = result => {'code':int,'content':String,'operator':String} - - #### 示例 - ``` - this.LoginListener = result => { - console.log('LoginListener:' + JSON.stringify(result)); - }; - JVerification.addLoginEventListener(this.LoginListener); - ``` - - -## API - dismissLoginPage( ) -隐藏登录页.当授权页被拉起以后,可调用此接口隐藏授权页。当一键登录自动隐藏授权页时,不建议调用此接口。 -#### 接口定义 -```javascript -static dismissLoginPage() { - if (Platform.OS == 'android') { - JVerificationModule.dismissLoginAuthActivity(); - } - else { - JVerificationModule.dismissLoginController(); - } -} -``` -#### 示例 -```javascript - JVerification.dismissLoginPage() -``` - -## 获取短信验证码 - -### API - getVerifyCode(params,callback) -- 获取短信验证码,使用此功能需要在Portal控制台中极光短信模块添加短信签名和验证码短信模版,或者使用默认的签名或模版。详见:[操作指南](https://docs.jiguang.cn//jsms/guideline/JSMS_consoleguide/#_3) -- 通过此接口获得到短信验证码后,需要调用极光验证码验证API来进行验证,详见:[验证码验证 API](https://docs.jiguang.cn//jsms/server/rest_api_jsms/#api_3) - -#### 接口定义 -```javascript - static getVerifyCode(params,callback) { - JVerificationModule.getSmsCode(params,callback); - } -``` -#### 参数说明 -- params = {'phoneNumber':String,'signID':String,'templateID':String} - -|参数名称|参数类型|参数说明| -|:-----:|:----:|:-----:| -|phoneNumber|string|电话号码| -|signID|string|短信签名ID,如果为nil,则为默认短信签名ID| -|templateID|string|短信模板ID,如果为nil,则为默认短信模板ID| - -#### 示例 -```javascript -const codeConfig = { - phoneNumber : "18925241111", //在此替换你的phoneNumber - signID : "1", //在此替换你的signID - templateID : "1" //在此替换你的templateID -}; - -JVerification.getVerifyCode(codeConfig, result => { - console.log('获取验证码:' + JSON.stringify(result)); -})} -``` - -## 设置前后两次获取验证码的时间间隔 - -### API - setCodeTime(time) -设置前后两次获取验证码的时间间隔。 -#### 接口定义 -```javascript -static setCodeTime(time) { - JVerificationModule.setTimeWithConfig(time); -} -``` - -#### 参数说明 -- time:默认30000ms,有效范围(0,300000)。 - -#### 示例 -```javascript -JVerification.setCodeTime(10000); -``` - -## 自定义认证SDK授权页面UI样式布局 -iOS 页面和 Android页面可以分开设置,详细API文档 参考[授权页面元素配置说明](认证SDK授权页面元素配置API说明.md) - -### API - addLoginCustomConfig 统一设置授权页面元素配置,需在 login 接口之前调用。 - -#### 接口定义 - -```javascript -static addLoginCustomConfig(customConfigParams, customViewParams) { - if (Platform.OS == 'android') { - JVerificationModule.setCustomUIWithConfig(customConfigParams, customViewParams); - } else { - JVerificationModule.customUIWithConfig(customConfigParams, customViewParams); - } -} -``` -#### 参数说明 -+ customConfigParams 授权页元素设置,详细使用参考[授权页面元素配置说明](认证SDK授权页面元素配置API说明.md) -+ customViewParams 自定义RN 视图元素,时候参考demo - -#### 示例 -``` -//一键登录页面自定义配置,需要在调用login之前设置,全屏模式 -const customConfigParams = { - backgroundImage: '', //背景图 - - statusBarHidden: false, //状态栏是否隐藏 - statusBarMode: 'light', //状态栏模式 light,dark - - navHidden: false, //导航栏是否隐藏 - navColor: -16777216, //导航栏颜色 - - navTitle: 'RN-JVerification', //导航栏标题 - navTitleSize: 16, //导航栏标题文字字体大小(单位:sp) - navTitleColor: -1, //导航栏标题文字颜色 - - navReturnHidden: false, //导航栏返回按钮是否隐藏 - navReturnImage: 'close', //导航栏左侧返回按钮图标 - //为保障显示效果,请同时设置x,y,w,h - // navReturnX: 10, //导航栏左侧返回按钮图标距屏幕上端偏移(仅Android) - // navReturnY: 10, //导航栏左侧返回按钮图标距屏幕左侧偏移(仅Android) - // navReturnW: 30, //导航栏左侧返回按钮图标宽度(仅Android) - // navReturnH: 30, //导航栏左侧返回按钮图标高度(仅Android) - - logoHidden: false, //logo是否隐藏 - logoImage: 'umcsdk_mobile_logo', //logo(android默认为应用图标;ios默认无) - //为保障显示效果,请同时设置x,y,w,h - //logoX: 50, //logo相对于屏幕左边x轴偏移 - //logoY: 50, //logo相对于标题栏下边缘y偏移 - //logoW: 250, //logo宽 - //logoH: 25, //logo高 - - numberSize: 16, //手机号码字体大小(单位:sp) - numberColor: -16777216, //手机号码字体颜色 - //为保障显示效果,请同时设置x,y,w,h - //numberX: 50, //号码栏相对于屏幕左边x轴偏移 - //numberY: 100, //号码栏相对于标题栏下边缘y偏移 - //numberW: 250, //号码栏宽度 - //numberH: 25, //号码栏高度 - - sloganHidden: false, //slogan是否隐藏 - sloganTextSize: 16, //slogan字体大小 - sloganTextColor: -16777216, //slogan文字颜色 - //为保障显示效果,请同时设置x,y,w,h - //sloganX: 50, //slogan相对于屏幕左边x轴偏移 - //sloganY: 150, //slogan相对于标题栏下边缘y偏移 - //sloganW: 250, //slogan宽度 (仅iOS) - //sloganH: 25, //slogan高度 (仅iOS) - - loginBtnText: '登录按钮', //登录按钮文字 - loginBtnTextSize: 16, //登录按钮字体大小 - loginBtnTextColor: -16777216, //登录按钮文字颜色 - - loginBtnImage: 'login_btn_selector', //登录按钮selector选择样式 (仅android) - loginBtnNormalImage: 'loginBtn_Nor', //登录按钮正常图片 (仅ios,三个同时设置生效) - loginBtnDisabledImage: 'loginBtn_Dis', //登录按钮失效图片 (仅ios,三个同时设置生效) - loginBtnSelectedImage: 'loginBtn_Hig', //登录按钮按下图片 (仅ios,三个同时设置生效) - //为保障显示效果,请同时设置x,y,w,h - //loginBtnX: 50, //登录按钮相对于屏幕左边x轴偏移 - //loginBtnY: 200, //登录按钮相对于标题栏下边缘y偏移 - //loginBtnW: 250, //登录按钮宽度 - //loginBtnH: 25, //登录按钮高度 - - privacyOne: ['隐私条款一', 'https://www.jiguang.cn/about'], //隐私条款一(显示名称和url,请严格按照格式) - privacyTwo: ['隐私条款二', 'https://www.jiguang.cn/about'], //隐私条款二(显示名称和url,请严格按照格式) - privacyColor: [-16777216, -65536], //隐私条款颜色 (显示名称和url的颜色,请严格按照格式) - privacyText: ['登录即同意', '和', '、', '并使用本机号码登录'], //隐私条款名称外的文字 - privacyTextSize: 15, //隐私条款文字字体大小 - privacyTextGravityMode: 'left', //隐私条款文本对齐方式,目前仅支持 left、center - privacyBookSymbolEnable: false, //隐私条款是否显示书名号,默认不显示 - //为保障显示效果,请同时设置x,y,w,h - // privacyX:50, //隐私条款相对于屏幕左边x轴偏移 - // privacyY:20, //隐私条款相对于授权页面底部下边缘y偏移 - // privacyW:200, //隐私条款宽度 - // privacyH:100, //隐私条款高度 - - privacyCheckboxHidden: false, //checkBox是否隐藏,默认不隐藏 - privacyCheckEnable: false, //checkBox默认状态 默认:NO - privacyCheckedImage: 'checkbox_selected', //checkBox选中时图片 - privacyUncheckedImage: 'checkbox_unSelected', //checkBox未选中时图片 - privacyCheckboxSize:10, //设置隐私条款checkbox尺寸 默认是10, 仅android - - privacyWebNavColor: -16777216, //协议页导航栏背景颜色 - privacyWebNavTitle: '服务条款', //协议页导航栏标题(仅iOS) - privacyWebNavTitleSize: 16, //协议页导航栏标题字体大小 - privacyWebNavTitleColor: -1, //协议页导航栏标题字体颜色 - privacyWebNavReturnImage: 'close', //协议页导航栏返回按钮图片 -}; -const customViewParams = [ - {customViewName: 'customView1', customViewPoint: [20, 200, 150, 30]}, - {customViewName: 'customView2', customViewPoint: [20, 300, 150, 30]}, - {customViewName: 'customView3', customViewPoint: [20, 400, 150, 30]}, -]; - -JVerification.addLoginCustomConfig(customConfigParams, customViewParams) - - -//弹窗模式: -const iosDialogConfig = { - navHidden:true, //导航栏是否隐藏 - logoImage: 'umcsdk_mobile_logo', //logo(android默认为应用图标;ios默认无) - logoConstraints:[0,-100,60,60], //LOGO图片布局对象 - logoHidden: false, //logo是否隐藏 - numberConstraints:[0,-42,200,14], //号码栏布局对象 - sloganConstraints:[0,-20,200,14], //slogan布局对象 - logBtnConstraints:[0,20,220,40], - loginBtnText: '登录按钮', //登录按钮文字 - loginBtnTextSize: 16, //登录按钮字体大小 - loginBtnTextColor: -16777216, //登录按钮文字颜色 - privacyConstraints:[0,100,200,40], //隐私条款布局对象 - checkViewConstraints:[-108,100,10,10], //checkBox布局对象 - loadingConstraints:[0,0,20,20], - showWindow:true, // 是否弹窗,默认no - windowBackgroundImage:"bg", // 弹框内部背景图片 - windowBackgroundAlpha: 0.3, //弹窗外侧 透明度 0~1.0 - windowCornerRadius:10, //弹窗圆角数值 - windowConstraints:[0,0,500,500], //弹窗布局对象 - windowCloseBtnImgs:["windowClose","windowClose"],//弹窗close按钮图片 @[普通状态图片,高亮状态图片] - windowCloseBtnConstraints:[0,-135,20,20],//弹窗close按钮布局, -} - -//安卓授权页弹窗模式 -const androidDialogConfig = { - privacyNeedClose:true, //弹窗是否需要关闭按钮 - privacyCloseTheme:[10, 60, 0, 0], //弹窗关闭按钮偏移量 privacyNeedClose为true时,必须设置它的偏移量 - privacyDialogTheme: [300, 400, 0, 0, false], //授权页弹窗模式 - privacyNeedStartAnim: true, //设置拉起授权页时是否需要显示默认动画 默认展示 - privacyNeedCloseAnim: true, //设置关闭授权页时是否需要显示默认动画 默认展示 - navColor:0xff000000, - loginBtnText:" 极光认证测试 ", - privacyCheckEnable:false, - privacyColor:[0xff00f000,0xff000000], - loginBtnWidth:40, - privacyOne: ['隐私条款一', 'https://www.jiguang.cn/about'], //隐私条款一(显示名称和url,请严格按照格式) - privacyColor: [-16777216, -65536], //隐私条款颜色 (显示名称和url的颜色,请严格按照格式) - privacyText: ['登录即同意', '和', '、', '并使用本机号码登录'], //隐私条款名称外的文字 - privacyTextSize: 12, -} - -if(Platform.OS == 'android'){ - JVerification.addLoginCustomConfig(androidDialogConfig, undefined); - } else { - JVerification.addLoginCustomConfig(iosDialogConfig, []); -} - - -``` - -#### API - addCustomViewsClickCallback -添加自定义 view 回调。配合 setCustomUIWithConfigAndroid 的 addCustomViews 属性一起使用 - -##### 示例 -```javascript -jv.addCustomViewsClickCallback(id=>{ - -}) -``` - - -## 错误码 - -|code|message|备注| -|:-----:|:----:|:-----:| -|1000|verify consistent|手机号验证一致| -|1001|verify not consistent|手机号验证不一致| -|1002|unknown result|未知结果| -|1003|token expired|token失效| -|1004|sdk verify has been closed|SDK 发起认证未开启| -|1005|包名和 AppKey 不匹配|请检查客户端配置的包名与官网对应 Appkey 应用下配置的包名是否一致| -|1006|frequency of verifying single number is beyond the maximum limit|同一号码自然日内认证消耗超过限制| -|1007|beyond daily frequency limit|appKey 自然日认证消耗超过限制| -|1008|AppKey 非法|请到官网检查此应用信息中的 appkey,确认无误| -|1009||请到官网检查此应用的应用详情;更新应用中集成的极光 SDK 至最新| -|1010|verify interval is less than the minimum limit|同一号码连续两次提交认证间隔过短| -|1011|appSign invalid|应用签名错误,检查签名与 Portal 设置的是否一致| -|2000|内容为token|获取 token 成功| -|2001|fetch token failed|获取 token 失败| -|2002|init failed|SDK 初始化失败| -|2003|network not reachable|网络连接不通| -|2004|get uid failed|极光服务注册失败| -|2005|request timeout|请求超时| -|2006|fetch config failed|获取应用配置失败| -|2007|内容为异常信息|验证遇到代码异常| -|2008|Token requesting, please try again later|正在获取 token 中,稍后再试| -|2009|verifying, please try again later|正在认证中,稍后再试 | -|2010|don't have READ_PHONE_STATE permission|未开启读取手机状态权限| -|2011|内容为异常信息|获取配置时代码异常| -|2012|内容为异常信息|获取 token 时代码异常| -|2013|内容为具体错误原因|网络发生异常| -|2014|internal error while requesting token|请求 token 时发生内部错误| -|2016|network type not supported|当前网络环境不支持认证| -|4001|parameter invalid|参数错误。请检查参数,比如是否手机号格式不对| -|4018||没有足够的余额| -|4031||不是认证 SDK 用户| -|4032||获取不到用户配置| -|4033|appkey is not support login|不是一键登录用户| -|5000|bad server|服务器未知错误| -|6000|内容为token|获取 loginToken 成功| -|6001|fetch loginToken failed|获取 loginToken 失败| -|6002|fetch loginToken canceled|用户取消获取 loginToken| -|6003|UI 资源加载异常|未正常添加 sdk 所需的资源文件| -|6004|authorization requesting, please try again later|正在登录中,稍后再试| -|7000|preLogin success|sdk 预取号成功| -|7001|preLogin failed|sdk 预取号失败| -|7002|preLogin requesting, please try again later|正在预取号中,稍后再试| -|-994|网络连接超时| | -|-996|网络连接断开| | -|-997|注册失败/登录失败|(一般是由于没有网络造成的)如果确保设备网络正常,还是一直遇到此问题,则还有另外一个原因:JPush 服务器端拒绝注册。而这个的原因一般是:你当前 App 的 Android 包名以及 AppKey,与你在 Portal 上注册的应用的 Android 包名与 AppKey 不相同。| diff --git a/AwesomeProject/.bundle/config b/AwesomeProject/.bundle/config new file mode 100644 index 0000000..848943b --- /dev/null +++ b/AwesomeProject/.bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/AwesomeProject/.eslintrc.js b/AwesomeProject/.eslintrc.js new file mode 100644 index 0000000..187894b --- /dev/null +++ b/AwesomeProject/.eslintrc.js @@ -0,0 +1,4 @@ +module.exports = { + root: true, + extends: '@react-native', +}; diff --git a/example/.gitignore b/AwesomeProject/.gitignore similarity index 62% rename from example/.gitignore rename to AwesomeProject/.gitignore index 828cc88..de99955 100644 --- a/example/.gitignore +++ b/AwesomeProject/.gitignore @@ -20,7 +20,7 @@ DerivedData *.hmap *.ipa *.xcuserstate -project.xcworkspace +**/.xcode.env.local # Android/IntelliJ # @@ -29,6 +29,11 @@ build/ .gradle local.properties *.iml +*.hprof +.cxx/ +*.keystore +!debug.keystore +.kotlin/ # node.js # @@ -36,11 +41,6 @@ node_modules/ npm-debug.log yarn-error.log -# BUCK -buck-out/ -\.buckd/ -*.keystore - # fastlane # # It is recommended to not store the screenshots in the git repo. Instead, use fastlane to re-generate the @@ -48,12 +48,28 @@ buck-out/ # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/ -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output # Bundle artifact *.jsbundle -# CocoaPods -/ios/Pods/ +# Ruby / CocoaPods +**/Pods/ +/vendor/bundle/ + +# Temporary files created by Metro to check the health of the file watcher +.metro-health-check* + +# testing +/coverage + +# Yarn +.yarn/* +!.yarn/patches +!.yarn/plugins +!.yarn/releases +!.yarn/sdks +!.yarn/versions diff --git a/example/.prettierrc.js b/AwesomeProject/.prettierrc.js similarity index 65% rename from example/.prettierrc.js rename to AwesomeProject/.prettierrc.js index 5c4de1a..2b54074 100644 --- a/example/.prettierrc.js +++ b/AwesomeProject/.prettierrc.js @@ -1,6 +1,7 @@ module.exports = { + arrowParens: 'avoid', + bracketSameLine: true, bracketSpacing: false, - jsxBracketSameLine: true, singleQuote: true, trailingComma: 'all', }; diff --git a/AwesomeProject/.watchmanconfig b/AwesomeProject/.watchmanconfig new file mode 100644 index 0000000..0967ef4 --- /dev/null +++ b/AwesomeProject/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/example/App.js b/AwesomeProject/App.tsx similarity index 73% rename from example/App.js rename to AwesomeProject/App.tsx index 78ee0a8..78453ad 100644 --- a/example/App.js +++ b/AwesomeProject/App.tsx @@ -1,8 +1,7 @@ import React from 'react'; -import {StyleSheet, Text, View,Alert, TouchableHighlight, Platform} from 'react-native'; +import {StyleSheet, Text, View,Alert, TouchableHighlight, Platform, Dimensions} from 'react-native'; import JVerification from 'jverification-react-native'; - const styles = StyleSheet.create({ container: { flex: 1, @@ -48,8 +47,8 @@ class Button extends React.Component { const initParams = { - 'time': 5000, - 'appKey': 'a0e6ace8d5b3e0247e3f58db', //仅iOS + 'time': 10000, + 'appKey': '4fcc3e237eec4c4fb804ad49', //仅iOS 'channel': 'channel', //仅iOS 'advertisingId': 'advertisingId', //仅iOS 'isProduction': false, //仅iOS @@ -59,6 +58,12 @@ const initParams = { const customUIWithConfigiOS = { + backgroundImage: 'cmBackground.jpeg', // 背景图 + // backgroundGifImage: 'auth.gif', // 背景gif图 + // backgroundVideo: 'videoBg.mp4', // 背景视频 + // backgroundVideo: 'http://vjs.zencdn.net/v/oceans.mp4', // 背景视频,可以是网络视频 + // backgroundVideoPlaceHolderImage: 'cmBackground.jpeg', //背景视频占位图 + showWindow:false, navReturnHidden:false, //logo @@ -76,30 +81,61 @@ const customUIWithConfigiOS = { checkViewConstraints:[-108,180,10,10], unAgreePrivacyCallBack:true, - privacyOne: ['隐私条款一', 'https://www.jiguang.cn/about'], //隐私条款一(显示名称和url,请严格按照格式) - privacyTwo: ['隐私条款二', 'https://www.jiguang.cn/about'], //隐私条款二(显示名称和url,请严格按照格式) + privacyNameAndUrlBeanList: [{'name':'隐私条款一','url':'https://www.jiguang.cn/about','separator':'、'}, {'name':'隐私条款一','url':'https://www.jiguang.cn/about','separator':'、'}], privacyColor: [-16777216, -65536], //隐私条款颜色 (显示名称和url的颜色,请严格按照格式) - privacyText: ['登录即同意', '和', '、', '并使用本机号码登录'], //隐私条款名称外的文字 + privacyText: ['登录即同意', '并使用本机号码登录'], //隐私条款名称外的文字 privacyTextSize: 15, //隐私条款文字字体大小 privacyTextGravityMode: 'left', //隐私条款文本对齐方式,目前仅支持 left、center privacyBookSymbolEnable: false, //隐私条款是否显示书名号,默认不显示 - + appLanguageType: '0', + navTransparent: true, + textVerAlignment: 1, + isAlertPrivacyVC: true, + agreementAlertViewBackgroundColor: 0xffffff, + agreementAlertViewCornerRadius: 10, + agreementAlertViewContentTextFontSize: 16, + agreementAlertViewLogBtnText: '同意', + agreementAlertViewUIFrames: { + "superViewFrame": [ + (Dimensions.get('window').width / 2) - 140, + (Dimensions.get('window').height / 2) - 150, + 280, + 220 + ], + "alertViewFrame": [0, 0, 280, 200], + "titleFrame": [10, 10, 260, 60], + "contentFrame": [15, 70, 250, 110], + "buttonFrame": [70, 160, 140, 40] + }, + loadingConstraints:[0,0,20,20], + smsUIConfig:{ + smsAuthPageBackgroundImagePath:'cmBackground.jpeg', + smsLogBtnBackgroundPath:"loginBtn_Hig", + privacyText: ['开头', '结尾'], //隐私条款名称外的文字 + smsPrivacyBeanList:[{'name':'隐私条款一','url':'https://www.jiguang.cn/about','separator':'、'}, {'name':'隐私条款一','url':'https://www.jiguang.cn/about','separator':'、'}], + enableSMSService:true, + + } } const customUIWithConfigAndroid = { - backgroundImage: '', //背景图 + backgroundImage: 'main_bg', //背景 + // backgroundGifImage: 'main_gif' , //背景gif + // backgroundVideo: 'test', //背景视频 + // backgroundVideoPlaceHolderImage: 'main_bg', //背景视频默认图 + statusBarTransparent: true, //状态栏是否透明 statusBarHidden: false, //状态栏是否隐藏 - statusBarMode: 'light', //状态栏模式 light,dark + statusBarMode: 'dark', //状态栏模式 light,dark - navHidden: false, //导航栏是否隐藏 + navTransparent: true, navColor: -16777216, //导航栏颜色 navTitle: 'RN-JVerification', //导航栏标题 navTitleSize: 16, //导航栏标题文字字体大小(单位:sp) navTitleColor: -1, //导航栏标题文字颜色 - navReturnHidden: false, //导航栏返回按钮是否隐藏 - navReturnImage: 'close', //导航栏左侧返回按钮图标 + navReturnHidden: true, //导航栏返回按钮是否隐藏 + // navReturnImage: 'close', //导航栏左侧返回按钮图标 //为保障显示效果,请同时设置x,y,w,h navReturnX: 5, //导航栏左侧返回按钮图标距屏幕上端偏移(仅Android) navReturnY: 5, //导航栏左侧返回按钮图标距屏幕左侧偏移(仅Android) @@ -144,18 +180,17 @@ const customUIWithConfigAndroid = { // loginBtnW: 250, //登录按钮宽度 // loginBtnH: 40, //登录按钮高度 - privacyOne: ['隐私条款一', 'https://www.jiguang.cn/about'], //隐私条款一(显示名称和url,请严格按照格式) - privacyTwo: ['隐私条款二', 'https://www.jiguang.cn/about'], //隐私条款二(显示名称和url,请严格按照格式) + privacyOne: ['隐私条款一', 'https://www.jiguang.cn/about'], //隐私条款一(显示名称和url,请严格按照格式)过期 2.7.3+不生效 + privacyTwo: ['隐私条款二', 'https://www.jiguang.cn/about'], //隐私条款二(显示名称和url,请严格按照格式)过期 2.7.3+不生效 + privacyNameAndUrlBeanList: [{'name':'隐私条款一','url':'https://www.jiguang.cn/about','beforeName':'、'}, {'name':'隐私条款一','url':'https://www.jiguang.cn/about','beforeName':'、'}], privacyColor: [-16777216, -65536], //隐私条款颜色 (显示名称和url的颜色,请严格按照格式) - privacyText: ['登录即同意', '和', '、', '并使用本机号码登录'], //隐私条款名称外的文字 + privacyText: ['登录即同意', '并使用本机号码登录1'], //隐私条款名称外的文字 privacyTextSize: 15, //隐私条款文字字体大小 privacyTextGravityMode: 'left', //隐私条款文本对齐方式,目前仅支持 left、center privacyBookSymbolEnable: false, //隐私条款是否显示书名号,默认不显示 //为保障显示效果,请同时设置x,y,w,h - // privacyX:50, //隐私条款相对于屏幕左边x轴偏移 - // privacyY:20, //隐私条款相对于授权页面底部下边缘y偏移 - // privacyW:200, //隐私条款宽度 - // privacyH:100, //隐私条款高度 + privacyY:60, //隐私条款相对于授权页面底部下边缘y偏移 + privacyCheckboxHidden: false, //checkBox是否隐藏,默认不隐藏 privacyCheckEnable: false, //checkBox默认状态 默认:NO @@ -168,7 +203,21 @@ const customUIWithConfigAndroid = { privacyWebNavTitle: '服务条款', //协议页导航栏标题(仅iOS) privacyWebNavTitleSize: 16, //协议页导航栏标题字体大小 privacyWebNavTitleColor: -1, //协议页导航栏标题字体颜色 - privacyWebNavReturnImage: 'close', //协议页导航栏返回按钮图片 + // privacyWebNavReturnImage: 'close', //协议页导航栏返回按钮图片 + enablePrivacyCheckDialog: true, //是否开启协议二次弹窗 + appLanguageType: '0', + + privacyCheckDialogGravityModeCenter: true, + setPrivacyCheckDialogTitleText: "测试协议标题", + setPrivacyCheckDialogLogBtnText: "同11意", + setPrivacyCheckDialogTitleTextSize: 22, + setPrivacyCheckDialogContentTextSize: 15, + + smsUIConfig:{ + smsPrivacyBeanList:[{'name':'隐私条款一','url':'https://www.jiguang.cn/about','beforeName':'、'}, {'name':'隐私条款一','url':'https://www.jiguang.cn/about','beforeName':'、'}], + enableSMSService:true, + smsPrivacyOffsetY: 60, + } }; const customViewParams = [ @@ -192,7 +241,7 @@ const androidDialogConfig = { navColor:0xff000000, loginBtnText:" 极光认证测试 ", privacyCheckEnable:false, - privacyColor:[0xff00f000,0xff000000], + // privacyColor:[0xff00f000,0xff000000], loginBtnWidth:40, privacyOne: ['隐私条款一', 'https://www.jiguang.cn/about'], //隐私条款一(显示名称和url,请严格按照格式) privacyColor: [-16777216, -65536], //隐私条款颜色 (显示名称和url的颜色,请严格按照格式) @@ -226,7 +275,7 @@ const iosDialogConfig = { export default class App extends React.Component { - createAlert = (title) => + createAlert = (title: string) => Alert.alert( "提示", title, @@ -235,18 +284,21 @@ export default class App extends React.Component { ] ); - constructor(props) { + constructor(props: object) { super(props); } + LoginListener?: Function + UnCheckboxEvent?: Function + componentDidMount() { JVerification.setLoggerEnable(true); - this.LoginListener = result => { + this.LoginListener = (result: any) => { console.log('LoginListener:' + JSON.stringify(result)); }; JVerification.addLoginEventListener(this.LoginListener); if(Platform.OS == 'ios'){ - this.UnCheckboxEvent = result => { + this.UnCheckboxEvent = (result: any) => { console.log('UnCheckboxEvent:未选中隐私协议框'); this.createAlert('Listener:未选中隐私协议框' ); } @@ -259,32 +311,32 @@ export default class App extends React.Component {