创蓝闪验接入文档

一.准备工作

概述

本文是闪验SDK_Android v2.3.0版本的接入文档,用于指导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标签内添加必要的权限支持

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>

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

<uses-permission android:name="android.permission.READ_PHONE_STATE"/>

配置权限说明


权限名称


权限说明


使用说明


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

<!--  **********************联通授权页activity**************************-->
<activity
    android:name="com.sdk.mobile.manager.login.cucc.OauthActivity"
    android:launchMode="singleTop"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait" />
<!--  **********************移动授权页activity**************************-->
<activity
    android:name="com.cmic.sso.sdk.activity.LoginAuthActivity"
    android:launchMode="singleTop"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait" />
<!--  **********************电信授权页activity**************************-->
<activity
    android:name="com.chuanglan.shanyan_sdk.view.ShanYanOneKeyActivity"
    android:launchMode="singleTop"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait" />
<!--  **********************协议页activity**************************-->
<activity
    android:name="com.chuanglan.shanyan_sdk.view.CTCCPrivacyProtocolActivity"
    android:launchMode="singleTop"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:screenOrientation="portrait" />

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

方式一:

android:usesCleartextTraffic="true"

示例代码:

<application
    android:name=".view.MyApplication"
    android:allowBackup="true"
    android:icon="@mipmap/shanyan_sdk_icon"
    android:label="@string/app_name"
    android:roundIcon="@mipmap/shanyan_sdk_icon"
    android:supportsRtl="true"
    android:theme="@style/AppTheme"
    android:usesCleartextTraffic="true"
    ></application>

(3) 混淆规则:

-dontwarn com.cmic.sso.sdk.**
-dontwarn com.sdk.**
-keep class com.cmic.sso.sdk.**{*;}
-keep class com.sdk.** { *;}
-keep class cn.com.chinatelecom.account.api.**{*;}

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

二.SDK使用说明

1.初始化

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

   OneKeyLoginManager.getInstance().init(getApplicationContext(), appId, new InitListener() {
                            @Override
                            public void getInitStatus(int code, String result) {
                            }
                        });

2.预取号

  • 在初始化成功回调里调用,可缩短拉起授权页时间,该方法会进行网络流量请求。
OneKeyLoginManager.getInstance().getPhoneInfo(new GetPhoneInfoListener() {
    @Override
    public void getPhoneInfoStatus(int code, String result) {
    }
});

3.拉起授权页

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

方法原型:

OneKeyLoginManager.getInstance().openLoginAuth(false, new OpenLoginAuthListener() {
    @Override
    public void getOpenLoginAuthStatus(int code, String result) {
    }
}, new OneKeyLoginListener() {
    @Override
    public void getOneKeyLoginStatus(int code, String result) {
    }
});

4.销毁授权页

OneKeyLoginManager.getInstance().finishAuthActivity();

5.置换手机号

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

三.授权页界面修改

1.授权页配置

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

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

2.添加自定义控件

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

方法原型

public ShanYanUIConfig.Builder addCustomView(View view, boolean isFinish, boolean type, ShanYanCustomInterface shanYanCustomInterface) {}

参数说明


参数


参数类型


说明


view(必填)


View


自定义控件对象


isFinish(必填)


boolean


是否需要销毁授权页:true销毁 false不销毁


type(必填)


boolean


设置自定义控件的位置:

true为授权页导航栏

false为授权页空白处


shanYanCustomInterface


ShanYanCustomInterface


自定义控件监听

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

示例代码:

/**
     * 闪验三网运营商授权页配置类
     *
     * @param context
     * @return
     */
public static ShanYanUIConfig getUiConfig(Context context) {

        /************************************************自定义控件**************************************************************/

        Button close = new Button(context);
        close.setBackgroundResource(context.getResources().getIdentifier("close_black", "drawable", context.getPackageName()));
        RelativeLayout.LayoutParams mLayoutParamsClose = new RelativeLayout.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);
        //其他方式登录
        TextView otherTV = new TextView(context);
        otherTV.setText("其他方式登录");
        otherTV.setTextColor(0xff3a404c);
        otherTV.setTextSize(TypedValue.COMPLEX_UNIT_SP, 13);
        RelativeLayout.LayoutParams mLayoutParams1 = new RelativeLayout.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);

        View view = new View(context);
        view.setBackgroundColor(0xffe8e8e8);
        RelativeLayout.LayoutParams mLayoutParams3 = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, AbScreenUtils.dp2px(context, 1));
        mLayoutParams3.setMargins(0, AbScreenUtils.dp2px(context, 44), 0, 0);
        view.setLayoutParams(mLayoutParams3);

        TextView tip = new TextView(context);
        tip.setText("使用该手机号登录");
        tip.setTextColor(0xff1E3179);
        tip.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15);
        RelativeLayout.LayoutParams mLayoutParamsTip = new RelativeLayout.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);

        LayoutInflater inflater1 = LayoutInflater.from(context);
        RelativeLayout relativeLayout = (RelativeLayout) inflater1.inflate(R.layout.other_login_item_view, null);
        RelativeLayout.LayoutParams layoutParamsOther = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        layoutParamsOther.addRule(RelativeLayout.CENTER_HORIZONTAL);
        layoutParamsOther.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
        relativeLayout.setLayoutParams(layoutParamsOther);
        ImageView weixin = relativeLayout.findViewById(R.id.weixin);
        ImageView qq = relativeLayout.findViewById(R.id.qq);
        ImageView weibo = relativeLayout.findViewById(R.id.weibo);
        weixin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "微信登录", Toast.LENGTH_SHORT).show();
            }
        });
        qq.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "qq登录", Toast.LENGTH_SHORT).show();

            }
        });
        weibo.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context, "微博登录", Toast.LENGTH_SHORT).show();

            }
        });

        /****************************************************设置授权页*********************************************************/
        Drawable authNavHidden = context.getResources().getDrawable(R.drawable.sysdk_login_bg);
        Drawable navReturnImgPath = context.getResources().getDrawable(R.drawable.sy_sdk_left);
        Drawable logoImgPath = context.getResources().getDrawable(R.drawable.sy_logo);
        Drawable logBtnImgPath = context.getResources().getDrawable(R.drawable.login_btn_bg);
        Drawable uncheckedImgPath = context.getResources().getDrawable(R.drawable.umcsdk_uncheck_image);
        Drawable checkedImgPath = context.getResources().getDrawable(R.drawable.umcsdk_check_image);
        ShanYanUIConfig uiConfig = new ShanYanUIConfig.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, new ShanYanCustomInterface() {
                    @Override
                    public void onClick(Context context, View view) {
                        Toast.makeText(context, "点击关闭", Toast.LENGTH_SHORT).show();
                    }
                })
                //标题栏下划线,可以不写
                .addCustomView(view, false, false, null)
                .addCustomView(tip, false, false, null)
                .addCustomView(relativeLayout, false, false, null)
                .build();
        return uiConfig;
}

 

四.本机认证

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

 

1.初始化

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

 

2.本机号校验

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

 OneKeyLoginManager.getInstance().startAuthentication(phone, new AuthenticationExecuteListener() {
                        @Override
                        public void authenticationRespond(int code, String result) {
                        }
                    });

 

3.校验手机号

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

原文地址:https://www.cnblogs.com/fugang123/p/11671049.html

时间: 2024-10-22 15:56:11

创蓝闪验接入文档的相关文章

支付宝接入文档中TRADE_SUCCESS和TRADE_FINISHED的本质区别

之前一直不知道这2种状态到底有什么不同.支付宝中担保交易和即时到账交易对其的描述为: TRADE_SUCCESS  交易成功(或支付成功) TRADE_FINISHED    交易完成 一头雾水......OK,找例子来说明吧: 例子一: 即时到账普通版.   普通版不支持支付完成后的退款操作,即用户充值完成后,该交易就算是完成了,这笔交易就不能再做任何操作了. 即时到账高级版.   这个版本在用户充值完成后,卖家可以执行退款操作进行退款,即该交易还没有彻底完成,卖家还可以修改这笔交易. OK,

word 2013 长篇文档排版案例教程

1 前言 平时偶尔可能会遇到需要制作长篇文档的情况,比如论文.书稿等,需要进行一些复杂的编辑,像设置级别标题.分节显示页码.封面.标题.目录.页眉.页脚.参考文献等等,不少同学为此犯愁,特别是非计算机专业的朋友们经常向我求救.其实,早在十几年前微软就曾经发布一个基于Office 2003长篇文档制作的视频教程,我就是从那个视频里学习了一些复杂的排版方法.现在,Office已经发展到2013版了,也没有发现微软再发新的教程.其实大体的流程和原理与Office 2003版的类似.我觉得很有必要把相关

360SDK文档

360  账号_ _ 社交_ _ 支付_ _ 数据_ _ 推送  SDK  接入 文档 版本号  修改时间  内容  修改人 1.1.0(270) 2014-11-13  修改: 修改AndroidManifest配置, 删除浮窗相关的activity 和service. 修改:修改混淆的proguard选项,增加-dontwarn参数. 360 手游中心 1.1.0(270) 2014-11-19  修改:修改推送API说明,增加告知相关的API方法所在的类. 360 手游中心 1.1.2(2

Spring Boot集成smart-doc生成api文档

smart-doc是一个java restful api文档生成工具,smart-doc颠覆了传统类似swagger这种大量采用注解侵入来生成文档的实现方法.smart-doc完全基于接口源码分析来生成接口文档,完全做到零注解侵入,你只需要按照java标准注释的写,smart-doc就能帮你生成一个简易明了的markdown或是一个像GitBook样式的静态html文档.下面将介绍如何在Spring Boot项目中集成smart-doc生成一个简明的api文档. 注意: smart-doc已经被

创蓝万数平台接入指南

注册:未登录状态下,创蓝万数官网任意界面,右上角点击[免费注册] 或在万数官网任意界面,右上角点击[万数控制台]登录页面点击[注册新账号]进入注册资料填写页面,根据提示填写信息若已有云通讯账号,则无需注册,直接登录即可 登录:万数官网任意页面右上角点击[登录]登录成功后再点击右上角[万数控制台]进入后台或先点击[万数控制台]进入登录页面登录成功后将直接进入万数后台也可以把登录地址保存至收藏夹 认证:未认证状态下无法使用API产品,但可以使用在线检测产品请尽快完成企业认证认证地址:账户中心--账户

百余份经典大数据文档免费下载

您只需要添加[ITIL先锋]微信公众号,公众号的后台再回复您的邮箱地址,我们将在两天内把这一百多篇大数据文档的下载链接免费发送给您! 这些大数据文档只是迄今收集整理出的一些文档,后期我们还会不断的收集整理,补充更新.如果您有好的大数据文档,欢迎后台留言推荐给我们.或者您有什么需求,也欢迎留言,我们后期会根据大家的需求,再收集整理一些文档奉献给大家. 大数据文档 (2014)OpenKN--网络大数据时代 的知识计算引擎.pdf <云计算(第三版)>Google云计算原理与应用(二).pptx

.net core 导出word文档

Npoi导出word(Peanuts) 标签: C#npoi导出word合并列列样式 2015-10-05 22:16 2896人阅读 评论(0) 收藏 举报  分类: C#(13)  版权声明:本文为博主原创文章,未经博主允许不得转载. 一个项目,要做一个从数据库读取数据,然后导出到word,因为涉及到后台数据库的读取,决定用npoi来导出word. NPOI源码地址:http://npoi.codeplex.com/ NPOI 2.0 api文档: http://www.npoi.info/

Oracle Multitenant Option - 12c Frequently Asked Questions (文档 ID 1511619.1)译文

适用于: 企业版数据库--版本12.1.0.1(12.1) 本文档中的知识对所有平台均适用. 文档目的 文档描写了插接式数据库的许多方面和用法,以更好的理解该产品,同时,该文档也可做为一个快速参考手册. 问答 12c多租户架构中的CDB/PDB概念知识. 多租户架构中的可插接数据库(PDB)是什么意思? 可插接数据库(PDB)是Oracle数据库12c(12.1)中的新特性.可以在一个数据库内部拥有多个可插接数据库.可插接数据库是完全向后兼容的. 为什么要使用多租户选件? 是为了实现以下数据库整

【iOS开发-45】Tom猫案例:动画、imageNamed与imageWithContentOfFile对内存影响、图片文件夹放哪儿以及文档注释

今天tom猫案例效果: (1)最傻最笨的办法: --所有的点击都是按钮,只不过有6个有图标的按钮,有些头部.左右脚.肚子.尾巴那块也是一个按钮,只不过没背景没文字没边框的按钮用户按不到而已. --这里的帧动画核心是UIImageView对象的一个属性animationImages,这个属性里面是以数组形式存放的图片.当然还有个重要的方法startAnimating用来播放前面那个属性里面的图片,就形成动画.再当然一下,还有设置时间和播放次数的属性. 注意点: --我们一般把图片放在Images.