clSDKShanYanSDKModule

preLogin finishAuthActivity preGetPhonenumber finishAuthControllerCompletion

论坛示例

为帮助用户更好更快的使用模块,论坛维护了一个示例,示例中包含示例代码、知识点讲解、注意事项等,供您参考。

概述

本模块封装了创蓝闪验SDK,用于进行一键登录,本机号校验功能。

本机号码校验使用场景:
用户输入手机号码,通过SDK获取token,服务端携带输入的手机号码和token去运营商网关进行校验(服务端调用mobile-validate接口),返回的结果时用户当前上网使用的号码与输入的号码是否一致。
一键登录使用场景:
用户无需输入手机号码,SDK会拉起授权页,用户确认授权后,SDK会获取token,服务端携带token到运营商网关获取用户当前上网使用的号码(服务端调用mobile-query接口),并返回给APP服务端。

创建应用
应用的创建流程及APPID的获取,请查看「」文档
注意:如果应用有多个包名或签名不同的马甲包,须创建多个对应包名和签名的应用,否则马甲包将报包名或签名校验不通过。

快速体验示例Demo
注:需运行真机到真机,安装SIM卡,打开手机流量开关,允许网络权限

  1. 到闪验官网申请创建应用,提供包名包签名/bundleID,得到对应的appID/appKey
  2. 搜索初始化方法shanyan.init,将appID换成自己的appid(appid安卓/iOS不同,分别与包名包签名/bundleID绑定)
  3. 在模块管理中导入闪验离线插件或云插件
  4. 在APP设置中上传对应包名包签名/bundleID的安卓iOS证书
  5. 分别云打包安卓iOS自定义Loader
  6. 手机安装自定义Loader,运行,设置自定义Loader的IP和端口,连接到APICloudStudio2示例工程
  7. WIFI同步APICloudStudio2项目到自定义Loader

详细接入文档以官网为准

引用方式(Android&iOS)

init

初始化方法
init({appid:’loXN4jDs’},function(ret,err))

appid:

  • 类型:字符串
  • 描述:闪验平台获取到的appId(ios平台和android平台appid不同)。

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. code:"",//code为1022成功,其他失败
  2. result:'',//返回信息
  3. }

示例代码

  1. shanyan = api.require('clSDKShanYanSDKModule')
  2. shanyan.init({appid:'loXN4jDs'},
  3. function(ret, err){
  4. alert(JSON.stringify(ret));
  5. console.log("callback---button--shanyanSdkInit========"+ret.code+"result===="+ret.result);
  6. });

可用性

ios系统,Android系统

可提供的1.0.0及更高版本

preLogin

预取号方法
preLogin(function(ret, err){});

params

callback(ret)

ret:

  • 类型:JSON 对象
  1. {
  2. code:"",//code为1022成功,其他失败
  3. result:'',//返回信息
  4. }

示例代码

  1. shanyan.preLogin(function(ret, err){
  2. alert(JSON.stringify(ret));
  3. console.log("callback---button--shanyanSdkGetPhoneInfo========"+ret.code+"result===="+ret.result);
  4. });

补充说明

  • 建议在判断当前用户属于未登录状态时使用,**已登录状态用户请不要调用该方法**
  • 建议在执行拉取授权登录页的方法前,提前一段时间调用预取号方法,中间最好有2-3秒的缓冲(因为预取号方法需要1~3s的时间取得临时凭证)
  • 请勿频繁的多次调用、请勿与拉起授权登录页同时和之后调用。
  • 避免大量资源下载时调用,例如游戏中加载资源或者更新补丁的时候要顺序执行

可用性

Android系统

可提供的1.0.0及更高版本

openActivity

拉起授权页方法
openActivity(param,function(ret, err){})

params

isFinish:

  • 类型:布尔值
  • 描述:true:自动销毁;false:不自动销毁,开发者需主动调用销毁授权页方法进行授权页销毁操作

    callback(ret)

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. type:"" //type=0时是拉起授权页回调;type=1时是一键登录回调
  3. code:"",//code为1000成功,其他失败
  4. result:"",//返回信息
  5. }

示例代码

补充说明

  • 调用拉起授权页方法后将会调起运营商授权页面。已登录状态请勿调用 。
  • 每次调用拉起授权页方法前均需先调用授权页配置方法,否则授权页可能会展示异常。
  • 对应两个回调,一个是拉起授权页的回调,一个是点击一键登录的回调(包含返回键) | 字段 | 类型 | 含义 | | —- | —- | —- | | isFinish | boolean | 点击授权页一键登录按钮有回调时是否自动销毁授权页:
    true:自动销毁
    false:不自动销毁,开发者需主动调用销毁授权页方法进行授权页销毁操作 |

当type=0时是拉起授权页回调(ret.type):

当type=1时是一键登录回调(ret.type):

当第二个回调外层code为1000时,result的返回为

  1. {
  2. "token": ""
  3. }

含义如下:

可用性

Android系统

可提供的1.0.0及更高版本

finishAuthActivity

销毁授权页方法
finishAuthActivity()

callback(ret)

示例代码

  1. shanyan.finishAuthActivity();

补充说明

A.授权页面自动销毁
1.在授权登录页面,当用户主动点击左左上角返回按钮时,返回码为1011,SDK将自动销毁授权页;
2.安卓 SDK,当用户点击手机的硬件返回键(相当于取消登录),返回码为1011,SDK将自动销毁授权页
3.当用户设置一键登录或者其他自定义控件为自动销毁时,得到回调后,授权页面会自动销毁

B.授权页手动销毁
1.当设置一键登录为手动销毁时,点击授权页一键登录按钮成功获取token不会自动销毁授权页,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。
2.当设置自定义控件为手动销毁时,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。
**

可用性

Android系统

可提供的1.0.0及更高版本

**

startAuthentication

本机号校验方法
startAuthentication(function(ret, err){})

params

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. code:"",//code为2000成功,其他失败
  3. result:'',//返回信息
  4. }

当外层code为2000时,result的返回为

  1. {
  2. "token":""
  3. }

示例代码

  1. shanyan.startAuthentication(function(ret,err){
  2. console.log("fff"+JSON.stringify(ret));
  3. });

可用性

Android系统

可提供的1.0.0及更高版本

preGetPhonenumber

ios预取号方法
preGetPhonenumber(callBack:function)

params

callback(ret,err)

示例代码

  1. <script type="text/javascript" src="../script/api.js"></script>
  2. apiready = function() {
  3. shanyan = api.require('clSDKShanYanSDKModule')
  4. };
  5. let platform = api.systemType;
  6. if (platform == 'android') {
  7. //安卓预取号
  8. shanyan.preLogin(function(ret, err) {
  9. api.toast({
  10. msg: JSON.stringify(ret),
  11. location: 'middle'
  12. });
  13. document.getElementById("codeid").innerHTML = "code:" + ret.code;
  14. document.getElementById("resultId").innerHTML = "result:" + JSON.stringify(ret);
  15. console.log("callback---button--shanyanSdkGetPhoneInfo========" + ret.code + "result====" + ret.result);
  16. });
  17. } else if (platform == 'ios') {
  18. //iOS预取号
  19. shanyan.preGetPhonenumber(
  20. function(ret, err) {
  21. if (err != null) {
  22. //iOS预取号失败
  23. } else {
  24. //iOS预取号成功
  25. }
  26. api.toast({
  27. msg: JSON.stringify(ret),
  28. location: 'middle'
  29. });
  30. console.log("callback---button--shanyanSdkGetPhoneInfo========" + JSON.stringify(ret));
  31. }
  32. }

补充说明

电信、联通、移动预取号 :初始化成功后,如果当前为电信/联通/移动,将调用预取号,可以提前获知当前用户的手机网络环境是否符合一键登录的使用条件,成功后将得到用于一键登录使用的临时凭证,默认的凭证有效期10min(电信)/30min(联通)/60min(移动)。
使用场景

  • 建议在执行一键登录的方法前,提前一段时间调用此方法,比如调一键登录的vc的onLoad中,或者rootVC的rootVC中,或者app启动后,此调用将有助于提高闪验拉起授权页的速度和成功率
  • 不建议调用后立即调用拉起授权页方法(此方法是异步)
  • 此方法需要1~2s的时间取得临时凭证,因此也不建议和拉起授权页方法一起串行调用
  • 不建议频繁的多次调用和在拉起授权页后调用
  • 建议在判断当前用户属于未登录状态时使用,已登录状态用户请不要调用该方法

可用性

iOS系统

可提供的1.0.0及更高版本

quickAuthLoginWithConfigure

ios拉起授权页方法
quickAuthLoginWithConfigure(clUIConfigure)

clUIConfigure:

  • 类型:CLUIConfigure
  • 描述:授权页控件属性配置对象

callback(ret,err)

示例代码

  1. function openActivity() {
  2. //调起授权页
  3. shanyan.quickAuthLoginWithConfigure(this.ios_uiConfigure);
  4. }
  5. }

补充说明

  • 用户进行一键登录操作时,调用一键登录方法,如果初始化成功,SDK将会拉起授权页面,用户授权后,SDK将返回取号 token给到应用客户端。
  • 可以在多处调用
  • 需在调用预初始化方法之后调用

一键登录逻辑说明

  • 存在调用预初始化时获取的临时凭证,调用一键登录方法将立即拉起授权页面
  • openLoginAuthListener 拉起授权页监听回调,拉起成功或失败均触发
  • 不存在临时凭证或临时凭证过期时(临时凭证有效期电信10min、联通30min、移动60min),调用一键登录方法,将有一个很短的时延,待取号成功后拉起授权页面
  • 取号失败时,返回失败

可用性

ios系统

可提供的1.0.0及更高版本

finishAuthControllerCompletion

销毁授权页方法
finishAuthControllerCompletion()

params

callback(ret,err)

调用示例

  1. shanyan.finishAuthControllerCompletion();

补充说明

A.授权页面自动销毁
1.在授权登录页面,当用户主动点击左左上角返回按钮时,返回码为1011,SDK将自动销毁授权页;
2.当用户设置一键登录或者其他自定义控件为自动销毁时,得到回调后,授权页面会自动销毁

B.授权页手动销毁
1.当设置一键登录为手动销毁时,点击授权页一键登录按钮成功获取token不会自动销毁授权页,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。
2.当设置自定义控件为手动销毁时,请务必在回调中处理完自己的逻辑后手动调用销毁授权页方法。

可用性

ios系统

可提供的1.0.0及更高版本

startAuthentication

本机号校验方法
startAuthentication(function(ret, err) {})

params

callback(ret,err)

ret:

  • 类型:JSON 对象
  • 内部字段:

    1. {
    2. "message":"本机号校验获取联通token成功",
    3. "data":
    4. {
    5. "token":"A2-7NA_jWQuN0XsJsZQOY8BtvdKtrhNK9QStebzzyzgh7ElebpB8xGy3rapp4yyxX8-VEVgMhiB3wO4P0PnCZNjtPAZO9KfeODdYxhgn5Qn8vnxOvgk4_Ov_39d56-v1p87-IcFHKlji4nhvCd1VmrxOSHx6KB6i6lZqFYqGgcbKfpG-yaGL6pcY4T9mbrtsOpbUhrdamE7eA1KaruyOdkL1SThGJZt_-8imf91EyrXckg="
    6. },
    7. }

示例代码

  1. function startAuthentication() {
  2. api.showProgress();
  3. setTimeout(function() {
  4. api.hideProgress();
  5. }, 5000);
  6. shanyan.startAuthentication(function(ret, err) {
  7. api.hideProgress();
  8. let platform = api.systemType;
  9. if (platform == 'android') {
  10. if (ret.code == 1000) {
  11. //成功
  12. api.alert({
  13. title: 'SDK获取Token成功',
  14. msg: JSON.stringify(ret.result.token),
  15. });
  16. } else {
  17. //失败
  18. }
  19. } else if (platform == 'ios') {
  20. if (err != null) {
  21. //iOS error存在即为失败
  22. } else {
  23. //成功
  24. api.alert({
  25. title: 'SDK获取Token成功',
  26. msg: JSON.stringify(ret.data.token),
  27. });
  28. }
  29. }
  30. api.toast({
  31. msg: JSON.stringify(ret),
  32. location: 'middle'
  33. });
  34. console.log(JSON.stringify(ret));
  35. }

可用性

ios系统