创蓝闪验接入文档

Android v2.3.0集成文档-简版

一.准备工作

概述

本文是闪验SDK_Android版本的接入文档,用于指导SDK的使用方法,默认读者已经熟悉 IDE(Eclipse 或者 Android Studio)的基本使用方法,以及具有一定的 Android 编程知识基础。

闪验SDK支持minSdkVersion 16及以上版本

闪验SDK支持中国移动3/4G、联通3/4G、电信4G的取号能力,在3G网络下时延会更高

闪验SDK支持单数据网络/数据网络与WiFi网络双开,不支持单WiFi网络

对于双卡手机,闪验SDK只对当前流量卡取号,双卡均未开数据流量SDK将会返回错误码

创建应用

应用的创建流程及APPID的获取,请查看「账号创建」文档

快速体验demo

Android压缩包附带的apk文件夹中是闪验demo的安装包,可以直接安装到Android手机上。并快速体验闪验在您的手机上的表现。

Android压缩包附带的demo文件夹中是闪验的示例工程,使用Android studio打开示例工程,完成以下步骤配置,然后直接运行起来测试。

a.将build里面的applicationId换成对应的测试包名

b.将签名配置改成您的签名配置

c.将AppId和AppKey换成您在闪验平台创建应用后生成的信息

开发环境搭建

(1)将开发包拷贝到工程

a.将SDK中libs目录下的aar包拷贝到自己工程的libs目录下,如没有该目录需新建。

b.SDK中jniLibs目录下包含多个so库,分别支持armeabi,armeabi-v7a,arm64-v8a,x86,x86_64等cpu架构,请根据项目情况,选择相应的so库。如果您的项目包含某个abi目录,则复制对应的so文件到您的项目,例如,您的项目中只有armeabi-v7a目录,则只复制jniLibs中的armeabi-v7a文件到您的项目;如果您的项目没有abi目录,请自行创建并复制。

jniLibs所在目录结构如下图:

在app文件夹下的build.gradle的dependencies中配置对应版本的aar依赖并添加repositories,详细代码如下:

repositories{flatDir{dirs'../app/libs'}}dependencies{api(name:'aar包名',ext:'aar')}

(2)配置AndroidManifest.xml文件

在manifest标签内添加必要的权限支持


建议的权限:如果选用该权限,需要在预取号步骤前提前动态申请。

配置权限说明

权限名称权限说明使用说明

INTERNET允许应用程序联网用于访问网关和认证服务器

ACCESS_WIFI_STATE允许访问WiFi网络状态信息

ACCESS_NETWORK_STATE允许访问网络状态区分移动网络或WiFi网络

CHANGE_NETWORK_STATE允许改变网络连接状态设备在WiFi跟数据双开时,强行切换使用数据网络

READ_PHONE_STATE允许读取手机状态(可选)获取IMSI用于判断双卡和换卡

WRITE_SETTINGS允许读写系统设置项6.0以下添加,可增加电信成功率,6.0以上可去除

GET_TASKS允许应用程序访问TASK

在application标签内配置授权登录activity

配置Android9.0对http协议的支持两种方式:

方式一:

android:usesCleartextTraffic="true"

示例代码:

(3) 混淆规则:

-dontwarncom.cmic.sso.sdk.**-dontwarncom.sdk.**-keepclasscom.cmic.sso.sdk.**{*;}-keepclasscom.sdk.**{*;}-keepclasscn.com.chinatelecom.account.api.**{*;}

通过上面的几个步骤,工程就配置完成了,接下来就可以在工程中使用闪验SDK进行开发了。

二.SDK使用说明

1.初始化

使用一键登录功能前,必须先进行初始化操作,放在Application的onCreate() 方法中(必须放在主线程)。

OneKeyLoginManager.getInstance().init(getApplicationContext(),appId,newInitListener() {@OverridepublicvoidgetInitStatus(intcode,Stringresult) {                            }                        });

2.预取号

在初始化成功回调里调用,可缩短拉起授权页时间,该方法会进行网络流量请求。

OneKeyLoginManager.getInstance().getPhoneInfo(newGetPhoneInfoListener() {@OverridepublicvoidgetPhoneInfoStatus(intcode,Stringresult) {    }});

3.拉起授权页

调用拉起授权页方法后将会调起运营商授权页面。已登录状态请勿调用 。

方法原型:

OneKeyLoginManager.getInstance().openLoginAuth(false,newOpenLoginAuthListener() {@OverridepublicvoidgetOpenLoginAuthStatus(intcode,Stringresult) {    }},newOneKeyLoginListener() {@OverridepublicvoidgetOneKeyLoginStatus(intcode,Stringresult) {    }});

4.销毁授权页

OneKeyLoginManager.getInstance().finishAuthActivity();

5.置换手机号

当一键登录外层code为1000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现获取手机号码的步骤。

三.授权页界面修改

1.授权页配置

调用该方法可实现对三网运营商授权页面个性化设计,每次调用拉起授权页方法前必须先调用该方法,否则授权界面会展示异常。

//自定义运营商授权页界面OneKeyLoginManager.getInstance().setAuthThemeConfig(ConfigUtils.getUiConfig(getApplicationContext()));

2.添加自定义控件

调用该方法可实现在授权页添加自定义控件。

方法原型

publicShanYanUIConfig.BuilderaddCustomView(Viewview,booleanisFinish,booleantype,ShanYanCustomInterfaceshanYanCustomInterface) {}

参数说明

参数参数类型说明

view(必填)View自定义控件对象

isFinish(必填)boolean是否需要销毁授权页:true销毁 false不销毁

type(必填)boolean设置自定义控件的位置:

true为授权页导航栏

false为授权页空白处

shanYanCustomInterfaceShanYanCustomInterface自定义控件监听

注意:如果添加布局为自定义控件,监听实现请参考demo示例。

示例代码:

/*** 闪验三网运营商授权页配置类** @param context* @return*/publicstaticShanYanUIConfiggetUiConfig(Contextcontext) {/************************************************自定义控件**************************************************************/Buttonclose=newButton(context);close.setBackgroundResource(context.getResources().getIdentifier("close_black","drawable",context.getPackageName()));RelativeLayout.LayoutParamsmLayoutParamsClose=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);mLayoutParamsClose.setMargins(0,AbScreenUtils.dp2px(context,15),AbScreenUtils.dp2px(context,10),0);mLayoutParamsClose.width=AbScreenUtils.dp2px(context,20);mLayoutParamsClose.height=AbScreenUtils.dp2px(context,20);mLayoutParamsClose.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);close.setLayoutParams(mLayoutParamsClose);//其他方式登录TextViewotherTV=newTextView(context);otherTV.setText("其他方式登录");otherTV.setTextColor(0xff3a404c);otherTV.setTextSize(TypedValue.COMPLEX_UNIT_SP,13);RelativeLayout.LayoutParamsmLayoutParams1=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);mLayoutParams1.setMargins(0,AbScreenUtils.dp2px(context,175),0,0);mLayoutParams1.addRule(RelativeLayout.CENTER_HORIZONTAL);otherTV.setLayoutParams(mLayoutParams1);Viewview=newView(context);view.setBackgroundColor(0xffe8e8e8);RelativeLayout.LayoutParamsmLayoutParams3=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT,AbScreenUtils.dp2px(context,1));mLayoutParams3.setMargins(0,AbScreenUtils.dp2px(context,44),0,0);view.setLayoutParams(mLayoutParams3);TextViewtip=newTextView(context);tip.setText("使用该手机号登录");tip.setTextColor(0xff1E3179);tip.setTextSize(TypedValue.COMPLEX_UNIT_SP,15);RelativeLayout.LayoutParamsmLayoutParamsTip=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);mLayoutParamsTip.setMargins(AbScreenUtils.dp2px(context,15),AbScreenUtils.dp2px(context,65),0,0);mLayoutParamsTip.addRule(RelativeLayout.ALIGN_PARENT_LEFT);tip.setLayoutParams(mLayoutParamsTip);LayoutInflaterinflater1=LayoutInflater.from(context);RelativeLayoutrelativeLayout=(RelativeLayout)inflater1.inflate(R.layout.other_login_item_view,null);RelativeLayout.LayoutParamslayoutParamsOther=newRelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);layoutParamsOther.addRule(RelativeLayout.CENTER_HORIZONTAL);layoutParamsOther.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);relativeLayout.setLayoutParams(layoutParamsOther);ImageViewweixin=relativeLayout.findViewById(R.id.weixin);ImageViewqq=relativeLayout.findViewById(R.id.qq);ImageViewweibo=relativeLayout.findViewById(R.id.weibo);weixin.setOnClickListener(newView.OnClickListener() {@OverridepublicvoidonClick(Viewv) {Toast.makeText(context,"微信登录",Toast.LENGTH_SHORT).show();            }        });qq.setOnClickListener(newView.OnClickListener() {@OverridepublicvoidonClick(Viewv) {Toast.makeText(context,"qq登录",Toast.LENGTH_SHORT).show();            }        });weibo.setOnClickListener(newView.OnClickListener() {@OverridepublicvoidonClick(Viewv) {Toast.makeText(context,"微博登录",Toast.LENGTH_SHORT).show();            }        });/****************************************************设置授权页*********************************************************/DrawableauthNavHidden=context.getResources().getDrawable(R.drawable.sysdk_login_bg);DrawablenavReturnImgPath=context.getResources().getDrawable(R.drawable.sy_sdk_left);DrawablelogoImgPath=context.getResources().getDrawable(R.drawable.sy_logo);DrawablelogBtnImgPath=context.getResources().getDrawable(R.drawable.login_btn_bg);DrawableuncheckedImgPath=context.getResources().getDrawable(R.drawable.umcsdk_uncheck_image);DrawablecheckedImgPath=context.getResources().getDrawable(R.drawable.umcsdk_check_image);ShanYanUIConfiguiConfig=newShanYanUIConfig.Builder()                .setDialogTheme(true,460,240,0,0,false)//授权页导航栏:.setNavColor(Color.parseColor("#ffffff"))//设置导航栏颜色.setNavText("")//设置导航栏标题文字.setNavTextColor(0xff080808)//设置标题栏文字颜色.setNavReturnImgPath(navReturnImgPath)//.setNavReturnImgHidden(false)                .setAuthBGImgPath(authNavHidden)                .setAuthNavHidden(true)//授权页logo(logo的层级在次底层,仅次于自定义控件).setLogoImgPath(logoImgPath)//设置logo图片.setLogoWidth(108)//设置logo宽度.setLogoHeight(36)//设置logo高度.setLogoOffsetY(5)//设置logo相对于标题栏下边缘y偏移.setLogoOffsetX(15)                .setLogoHidden(false)//是否隐藏logo//授权页号码栏:.setNumberColor(0xff333333)//设置手机号码字体颜色.setNumFieldOffsetY(100)//设置号码栏相对于标题栏下边缘y偏移.setNumberSize(18)                .setNumFieldWidth(110)                .setNumFieldOffsetX(15)//授权页登录按钮:.setLogBtnText("本机号码一键登录")//设置登录按钮文字.setLogBtnTextColor(0xffffffff)//设置登录按钮文字颜色.setLogBtnImgPath(logBtnImgPath)//设置登录按钮图片.setLogBtnOffsetY(93)//设置登录按钮相对于标题栏下边缘y偏移.setLogBtnTextSize(15)                .setLogBtnWidth(150)                .setLogBtnHeight(45)//授权页隐私栏:.setAppPrivacyOne("用户自定义协议条款","https://www.253.com")//设置开发者隐私条款1名称和URL(名称,url).setAppPrivacyTwo("用户服务条款","https://www.253.com")//设置开发者隐私条款2名称和URL(名称,url)//.setAppPrivacyColor(0xff666666, 0xff0085d0)  //  设置隐私条款名称颜色(基础文字颜色,协议文字颜色).setPrivacyOffsetY(156)                .setUncheckedImgPath(uncheckedImgPath)                .setCheckedImgPath(checkedImgPath)//授权页slogan:.setSloganTextColor(0xff999999)//设置slogan文字颜色.setSloganOffsetY(130)//设置slogan相对于标题栏下边缘y偏移.setSloganTextSize(9)                .setSloganOffsetX(15)// 添加自定义控件://其他方式登录及监听,可以不写.addCustomView(close,true,false,newShanYanCustomInterface() {@OverridepublicvoidonClick(Contextcontext,Viewview) {Toast.makeText(context,"点击关闭",Toast.LENGTH_SHORT).show();                    }                })//标题栏下划线,可以不写.addCustomView(view,false,false,null)                .addCustomView(tip,false,false,null)                .addCustomView(relativeLayout,false,false,null)                .build();returnuiConfig;}

四.本机认证

注:本机认证同免密登录,需要初始化,本机认证、免密登录可共用初始化,两个功能同时使用时,只需调用一次初始化即可。

1.初始化

同SDK使用说明-->初始化

2.本机号校验

在初始化执行之后调用,本机号校验界面需自行实现,可以在多个需要校验的页面中调用。

OneKeyLoginManager.getInstance().startAuthentication(phone,newAuthenticationExecuteListener() {@OverridepublicvoidauthenticationRespond(intcode,Stringresult) {                        }                    });

3.校验手机号

当本机号校验外层code为2000时,您将获取到返回的参数,请将这些参数传递给后端开发人员,并参考「服务端」文档来实现校验本机号的步骤

你可能感兴趣的:(创蓝闪验接入文档)