4 Star 3 Fork 0

杭州艾狄墨搏数字科技有限公司 / 一键登录YuyanAuthDemo-Android

Create your Gitee Account
Explore and code with more than 6 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
Clone or download
Cancel
Notice: Creating folder will generate an empty file .keep, because not support in Git
Loading...
README.md

ADmobile号码认证YuyanAuthSDK Android Sdk——接入文档 V2.0.0

目录

[TOC]

1. 概述

1.1 概述

尊敬的开发者朋友,欢迎您使用雨燕一键登录SDK。通过本文档,您可以快速完成一键登录SDK的集成。

1.2 获取Android APP的签名

方法一、通过命令行获取,keytool -printcert -jarfile xx.apk

方法二、通过安卓手机安装app获取,下载地址

尊敬的开发者朋友,欢迎您使用雨燕一键登录SDK。通过本文档,您可以快速完成一键登录SDK的集成。

2. sdk使用流程图

1.1 一键登录流程图

一键登录流程图

1.2 号码验证流程图

号码验证流程图

## 3. Demo及SDK下载链接

YuyanDemo-Android下载地址

SDK版本更新日志

4. SDK接入流程

4.1 添加SDK到工程中

接入环境:Android Studio

4.1.1 添加仓库地址

首先需要在项目的build.gradle文件中引入如下配置:

allprojects {
    repositories {
        ...
        google()
        jcenter()
        mavenCentral()
        // 添加以下仓库地址
        maven { url "http://101.37.191.20:9091/repository/maven-releases/" }
    }
}

4.1.2 添加YuyanSdk

将YuyanSdk所需要的依赖集成进去。

dependencies {
    // support支持库,如果是AndroidX请使用对应的支持库
    implementation 'com.android.support:appcompat-v7:28.0.0'
    implementation 'com.android.support:support-v4:28.0.0'
    implementation 'com.android.support:design:28.0.0'
  
    // 一键登录SDK
    implementation 'com.admobile.yuyan:auth:2.0.0.01284'
    // common库请保持和Demo中版本一致
    implementation 'com.admobile:common:1.2.3'
}

4.1.3 注意事项

  • 使用一键登录需要用户打开蜂窝数据网络(个别oppo、vivo机型首次无法在wifi开启下调用雨燕一键登录服务)
  • 取号认证过程需要消耗少量用户数据流量
  • 手机开代理抓包,安装XP、太极等Root框架,会导致一键登录、号码验证环境检测失败

4.2 权限申请

若出现权限相关问题,请检查APP的权限是否申请正常。正常引用aar,权限会自动merge。若权限没有merge,需要添加如下权限。

    <uses-permission android:name="android.permission.INTERNET" />   <!-- 网络访问 -->
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 检查wifi网络状态 -->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 检查网络状态 -->
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 切换网络通道 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!-- 本地信息缓存 -->
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 开关wifi状态,解决国内机型移动网络权限问题需要 -->

注:确保以上权限正常申请,否则无法使用一键登录

4.3 兼容配置

4.3.1 网络配置

需要在 AndroidManifest.xml 添加依赖声明uses-library android:name="org.apache.http.legacy" android:required="false", 且 application标签中添加 android:usesCleartextTraffic="true",适配网络http请求,否则 SDK可能无法正常工作,接入代码示例如下:

<application
    android:name=".MyApplication"
        ... ...
    android:usesCleartextTraffic="true">

    <uses-library
        android:name="org.apache.http.legacy"
        android:required="false" />
    ... ...
</application>

4.3.3 混淆配置

如果打包时开启了混淆配置,请按需添加以下混淆内容,并保证一键登录资源文件不被混淆

-keep class cn.com.chinatelecom.gateway.lib.** {*;}
-keep class com.unicom.xiaowo.login.** {*;}
-keep class com.cmic.sso.sdk.** {*;}
-keep class com.mobile.auth.** {*;}
-keep class android.support.v4.** { *;}
-keep class org.json.**{*;}

-keep class com.ciba.**{ *; }
-keep class com.admobile.onekeylogin.** {*;}
-keep class com.bun.miitmdid.core.** {*;}

5. 示例代码

具体的一键登录SDK接口和接口说明请参考

5.1 SDK初始化

在Application中进行SDK的初始化(详情请参考Demo)

// 初始化ADSuyi一键登录SDK
YuyanSDK.getInstance().init(sContext, new YuyanInitConfig.Builder()
  	.appId("请填写申请的AppId")
  // 上线请改为false
  .debug(BuildConfig.DEBUG)
  .build());

注: 申请的appid与包名和应用签名绑定,运行时需用应用签名对应用进行签名,否则无法调起一键登录

5.2 一键登录

一键登录

5.2.1 初始化一键登录功能

// 一键登录功能环境检测
YuyanOneKeyLoginManager.getInstance().checkEnvAvailable(this, new OneKeyLoginCheckEnvCallback() {
    @Override
    public void onSuccess(YuyanOneKeyLogin oneKeyLogin) {
    		// 初始化成功后才能去调用一键登录
        this.oneKeyLogin = oneKeyLogin;
    }

    @Override
    public void onFailed(String code, String error) {
        // 错误码和错误信息
    }
});

/**
 * 环境检测
 *
 * @param context 超时时间 单位ms
 * @param checkEnvCallback 环境检查成功失败回调
 */
public void checkEnvAvailable(Context context, final OneKeyLoginCheckEnvCallback checkEnvCallback)

/**
 * 环境检查回调
 */
public interface OneKeyLoginCheckEnvCallback {
  /**
   * 环境检测成功
   *
   * @param mobileAuth 一键登录对象
   */
  void onSuccess(YuyanOneKeyLogin oneKeyLogin);
  /**
   * 环境检测失败
   *
   * @param code 错误码
   * @param error 错误信息
   */
  void onFailed(String code, String error);
}

5.2.2 预取号

// 预取号,获取到oneKeyLogin再调用预取号功能,可加速一键登录
this.oneKeyLogin.preFetchPhoneNumber(5000, new OnPreFetchPhoneNumberCallback() {
    @Override
    public void onPreFetchSuccess(String vendor) {}

    @Override
    public void onPreFetchFailed(String vendor, String error) {}
});

/**
 * 预取号
 *
 * @param totalTimeout 超时时间 单位ms
 * @param OnPreFetchPhoneNumberCallback 预取号监听
 */
public void preFetchPhoneNumber(int totalTimeout, OnPreFetchPhoneNumberCallback callback)
  
/**
 * 预取号回调
 */
public interface OnPreFetchPhoneNumberCallback {

    /**
     * 预取号成功
     *
     * @param vendor 运营商
     */
    void onPreFetchSuccess(String vendor);

    /**
     * 预取号失败
     *
     * @param vendor 运营商
     * @param error
     */
    void onPreFetchFailed(String vendor, String error);

}

5.2.3 授权页面设置

// 设置debug模式
this.oneKeyLogin.setDebugMode(BuildConfig.DEBUG);
// 设置授权页按钮点击事件
this.oneKeyLogin.setUIClickListener(new OnAuthPageUIClickListener() {
    @Override
    public void onCancel() {
        // 页面返回按钮触发
    }

    @Override
    public void onSwitch() {
        // 切换其他登录方式
    }

    @Override
    public void onLoginBtn() {
        // 登录按钮触发
    }

    @Override
    public void onCheckbox(boolean isChecked) {
        // 是否同意条款框触发
    }

    @Override
    public void ontProtocolControl(String name, String url) {
        // 点击条款
    }
});

// 设置自定义布局
mOneKeyLogin.setAuthUIConfig(new AuthPageUiConfig()
     /*--------导航栏-------*/
     //导航栏是否隐藏
     .setNavHidden(false)
     //导航栏主题色
     .setNavColor(Color.BLUE)
     //导航栏文字标题
     .setNavText("导航栏标题")
     //导航栏文字颜色
     .setNavTextColor(Color.RED)
     //导航栏字体大小(sp)
     .setNavTextSize(20)
     //导航栏返回键图片(drawable目录下)
     .setNavReturnImgPath("ic_launcher")
     //设置返回按钮是否隐藏
     .setNavReturnHidden(false)
     //导航栏返回键图片缩放类型
     .setNavReturnScaleType(ImageView.ScaleType)
     /*--------slogan-------*/
     //slogan是否隐藏
     .setSloganHidden(false)
     //slogan文字内容
     .setSloganText("标语内容")
     //slogan文字颜色
     .setSloganTextColor(Color.GREEN)
     //slogan文字大小(sp)
     .setSloganTextSize(20)
     //slogan相对于导航栏的位移(dp)
     .setSloganOffsetY(200)
     //slogan相对于底部的位移(dp)
     .setSloganOffsetY_B(240)
     /*--------logo-------*/
     //logo图片(drawable)
     .setLogoImgPath("ic_launcher")
     //logo图片显隐藏
     .setLogoHidden(false)
     // logo 图片宽度(dp)
     .setLogoWidth(50)
     // logo图片高度(dp)
     .setLogoHeight(50)
     //logo距离顶部导航栏的距离(dp)
     .setLogoOffsetY(100)
     //logo距离底部距离(dp)
     .setLogoOffsetY_B(500)
     /*--------掩码栏-------*/
     //掩码字体颜色
     .setNumberColor(Color.BLUE)
     //掩码字体大小(sp)
     .setNumberSize(35)
     //掩码距离顶部导航栏的位移(dp)
     .setNumFieldOffsetY(220)
     //掩码距离底部的位移(dp)
     .setNumFieldOffsetY_B(100)
     /*--------登录按钮-------*/
     .setLogBtnText("登录按钮文字")
     //设置登录按钮文字大小sp
     .setLogBtnTextSize(16)
     //登录按钮字体颜色
     .setLogBtnTextColor(Color.WHITE)
     //登录按钮背景图片路径
     .setLogBtnBackgroundPath("shape_bg")
     //登录按钮距离顶部位移
     .setLogBtnOffsetY(300)
     //登录按钮距离底部位移
     .setLogBtnOffsetY_B(400)
     /*--------切换到其他方式-------*/
     //设置按钮是否可见
     .setSwitchAccHidden(false)
     //设置文字内容
     .setSwitchAccText("切换到其他登录方式 内容")
     //设置文字颜色
     .setSwitchAccTextColor(Color.BLUE)
     //设置按钮文字大小
     .setSwitchAccTextSize(22)
     //设置按钮距离顶部位移
     .setSwitchOffsetY(400)
     //设置按钮距离底部位移
     .setSwitchOffsetY_B(300)
     /*--------协议栏-------*/
     //设置开发者隐私条款前置自定义文案
     .setPrivacyBefore("我已阅读并同意雨燕认证")
     //设置运营协议前缀符号
     .setVendorPrivacyPrefix("《")
     //设置运营协议后缀符号
     .setVendorPrivacySuffix("》")
     //隐私协议文字颜色
     .setPrivacyColor(R.color.white)
     //隐私协议基础文字颜色
     .setNormalTextColor(R.color.white)
     //第一条隐私协议
     .setAppPrivacyOne("第一条隐私协议", "www.admobile.com")
     //第二条隐私协议
     .setAppPrivacyTwo("第二条隐私协议", "www.admobile.com")
     //基础文字颜色,隐私协议的颜色
     .setAppPrivacyColor(Color.BLUE, Color.RED)
     //设置隐私条款相对于顶部的位移
     .setPrivacyOffsetY(500)
     //设置隐私条款相对于底部的位移
     .setPrivacyOffsetY_B(200)
     //隐私条款勾选状态
     .setPrivacyState(true)
     //复选框隐藏状态
     .setCheckboxHidden(false)
     //复选框选中状态的图片路径
     .setCheckedImgPath("ic_launcher")
     //复选框未选中状态的图片路径
     .setUncheckedImgPath("ic_launcher")
     //设置协议的位置
     .setProtocolGravity(gravity));

// xml添加自定义控件区
oneKeyLogin.addAuthRegisterXmlConfig(
     new AuthCustomXmlConfig(R.layout.layout_test, new XmlViewDelegate() {
     @Override
     public void onViewCreate(View view) {
       TextView test = view.findById(R.id.test);
     }
}));

// 授权界面自定义View区
mOneKeyLogin.addAuthCustomViewConfig("key",
                new AuthCustomViewConfig(customView, AuthCustomViewConfig.RootViewId.ROOT_VIEW_ID_BODY));

// 授权页空白处
int ROOT_VIEW_ID_BODY;

// 授权页标题栏
int ROOT_VIEW_ID_TITLE_BAR;

5.2.4 调起授权页操作

this.oneKeyLogin.getLoginToken(this, 5000, new OnOneKeyLoginCallback() {
    @Override
    public void onShowAuthPageSuccess() {}

    @Override
    public void onTokenSuccess(String token) {}

    @Override
    public void onTokenFailed(String error) {}

    @Override
    public void onCancel() {}
});

/**
 * 获取token
 *
 * @param totalTimeout 超时时间 单位ms
 * @param callback 一键登录回调
 */
public void getLoginToken(Context context, int totalTimeout, OnOneKeyLoginCallback callback)

/**
 * 一键登录回调
 */
public interface OnOneKeyLoginCallback {
  /**
    * 成功显示授权界面
    */
  void onShowAuthPageSuccess();
  /**
    * token获取成功
    *
    * @param token
    */
  void onTokenSuccess(String token);

  /**
    * token获取失败
    *
    * @param error 错误信息
    */
  void onTokenFailed(String error);
  /**
    * 用户取消登录
    */
  void onCancel();
}

5.2.5 授权页面关闭

oneKeyLogin.finishAuthPage();

5.2.6 销毁oneKeyLogin对象

oneKeyLogin.onDestroy();

一键登录示例

5.3 号码验证

号码验证

5.3.1 初始化号码验证功能

// 号码验证功能环境检测
YuyanMobileAuthManager.getInstance().checkEnvAvailable(this, new MobileAuthSDKInitResultCallback() {
    @Override
    public void onSuccess(YuyanMobileAuth mobileAuth) {
        //初始化成功后才能去调用号码验证
        this.mobileAuth = mobileAuth;
    }

    @Override
    public void onFailed(String code, String error) {
    }
});

/**
 * 环境检测
 *
 * @param context 超时时间 单位ms
 * @param checkEnvCallback 环境检查成功失败回调
 */
public void checkEnvAvailable(Context context, final MobileAuthSDKInitResultCallback checkEnvCallback)

/**
 * 环境检查成功失败回调
 */
public interface MobileAuthSDKInitResultCallback {
  /**
   * 环境检测成功
   *
   * @param mobileAuth 号码验证对象
   */
  void onSuccess(YuyanMobileAuth mobileAuth);
  /**
   * 环境检测失败
   *
   * @param code 错误码
   * @param error 错误信息
   */
  void onFailed(String code, String error);
}

5.3.2 预取号

// 预取号,获取到mobileAuth再调用预取号功能,可加速一键登录
this.mobileAuth.preFetchPhoneNumber(5000, new OnPreFetchPhoneNumberCallback() {
    @Override
    public void onPreFetchSuccess(String vendor) {}

    @Override
    public void onPreFetchFailed(String vendor, String error) {}
});

/**
 * 预取号
 *
 * @param totalTimeout 超时时间 单位ms
 * @param OnPreFetchPhoneNumberCallback 预取号监听
 */
public void preFetchPhoneNumber(int totalTimeout, OnPreFetchPhoneNumberCallback callback)
  
/**
 * 预取号回调
 *
 * @author parting_soul
 * @date 2019-08-06
 */
public interface OnPreFetchPhoneNumberCallback {

    /**
     * 预取号成功
     *
     * @param vendor 运营商
     */
    void onPreFetchSuccess(String vendor);

    /**
     * 预取号失败
     *
     * @param vendor 运营商
     * @param error
     */
    void onPreFetchFailed(String vendor, String error);

}

5.3.3 号码验证

this.mobileAuth.getAuthToken(phone, 5000, new OnTokenResultCallback() {

    @Override
    public void onTokenSuccess(String token) {
        // 获取token成功
    }

    @Override
    public void onTokenFailed(String error) {
        // 获取token失败
    }
});

/**
 * 获取授权token
 *
 * @param phone 手机号
 * @param totalTimeout 超时时间 单位ms
 * @param OnTokenResultCallback 获取token回调
 */
public void getAuthToken(String phone, int totalTimeout, OnTokenResultCallback callback)

/**
 * token获取结果回调
 */
public interface OnTokenResultCallback {

    /**
     * 获取token成功
     *
     * @param token
     */
    void onTokenSuccess(String token);

    /**
     * 获取token失败,返回错误信息
     *
     * @param error
     */
    void onTokenFailed(String error);


}

5.3.4 销毁mobileAuth对象

mobileAuth.onDestroy();

号码验证示例

6. 常见问题和错误调试

错误码 错误信息
-1003 请求过期
-3001 账号余额不足
-100 初始化失败或还未初始化
-200 数据解析异常
-201 蜂窝数据网络不可用
-202 没有获取手机设备状态权限
-203 token获取失败
-204 授权界面唤起失败
-206 户取消登录
-207 阿里云SDK内部异常
-300 环境验证失败
-301 号码验证token获取失败
-302 一键登录token获取失败
-303 token获取失败
-10001 AppId不能为空
-10002 SDK初始化必须在主线程
-10006 初始化接口数据为空
-10007 初始化接口KEY为空
-10008 初始化接口数据解密失败
-10009 初始化接口数据解析失败
-10013 请求的初始化数据为空
-20001 余额查询接口数据解析失败
-20002 余额查询请求超时,请稍后重试

7.商务合作

邮箱 : tomato@admobile.top

Comments ( 0 )

Sign in for post a comment

About

ADmobile号码认证服务与阿里云号码认证服务合作,整合三大运营商特有的数据网关认证能力,通过用户一键授权获取手机号码或快速校验用户输入号码与本机号码是否一致,升级短信验证码体验,应用于用户注册、登录、安全校验等场景,可实现用户无感知校验,操作更安全、便捷、低时延。 spread retract
Android
Cancel

Releases

No release

Contributors

All

Activities

load more
can not load any more
Android
1
https://gitee.com/admobile/yuyan-auth-demo-android.git
git@gitee.com:admobile/yuyan-auth-demo-android.git
admobile
yuyan-auth-demo-android
一键登录YuyanAuthDemo-Android
master

Search