Android号码认证接入指南

2019.06.25 17:46:36

    SDK说明

    一键登录SDK提供移动与电信的一键登录及本机校验功能

    SDK集成

    1、添加aar包依赖

    将从官网下载下来的一键登录aar包放到项目的libs目录下,然后在模块的build.gradle中的dependencies添加相关依赖

    示例:

    dependencies {
        implementation(name: 'libary-release', ext: 'aar')//aar包具体名称请以官网下载下来为准
        implementation 'com.google.code.gson:gson:2.8.5' // SDK内部用到,需要配置
        implementation 'com.squareup.okhttp3:okhttp:3.3.1' // SDK内部用到,需要配置
    }
    

    然后在app的build.gradle的android下添加

     repositories {
            flatDir {
                dirs 'libs'
            }
        }
    

    SDK接口

    QuickLogin

    本机校验和一键登录功能的提供类,主要提供获取单例,预取号,本机校验/一键登录,设置预取url等接口

    1 获取QuickLogin单例

    QuickLogin login = QuickLogin.getInstance(getApplicationContext(), BUSINESS_ID);// BUSINESS_ID为从易盾官网申请的业务id
    

    2 预取号(一键登录前务必先调用该接口获取手机掩码)

    login.prefetchMobileNumber(new QuickLoginPreMobileListener() {
            @Override
            public void onGetMobileNumberSuccess(String YDToken, final String mobileNumber) {
             
            }
    
            @Override
            public void onGetMobileNumberError(String YDToken, final String msg) {
            
            }
        });
    

    3 一键登录

    NOITE:调用一键登录接口前请务必调用预取号接口,在预取号接口的成功回调中调用一键登录接口,获取运营商token与易盾token
    API定义:

     /**
     * 一键登录功能,使用该接口前需要先调用fetchPreviewMobileNumber接口进行预取号
     *
     * @param listener 回调监听器
     */
    public void onePass(final QuickLoginTokenListener listener)
    

    使用示例

    login.onePass(new QuickLoginTokenListener() {
        @Override
        public void onGetTokenSuccess(final String YDToken, final String accessCode) {
            Log.d(TAG, String.format("yd token is:%s accessCode is:%s", YDToken, accessCode));
            tokenValidate(YDToken, accessCode, true);
        }
    
        @Override
        public void onGetTokenError(String YDToken, String msg) {
            Log.d(TAG, "获取运营商token失败:" + msg);
        }
    });
    
    

    4 本机校验

    API定义:

    public void getToken(final String mobileNumber, final QuickLoginTokenListener listener)
    

    第一个参数表示用户输入的进行本机校验的手机号码,第二个参数是获取token的回调监听器
    使用示例:

      login.getToken(mobileNumber, new QuickLoginTokenListener() {
                @Override
                public void onGetTokenSuccess(final String YDToken, final String accessCode) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // Toast.makeText(getApplicationContext(), "获取Token成功" + YDToken + accessCode, Toast.LENGTH_LONG).show();
                            Log.d(TAG, "获取Token成功" + YDToken + accessCode);
                            tokenValidate(YDToken, accessCode, false);
                        }
                    });
    
                }
    
                @Override
                public void onGetTokenError(final String YDToken, final String msg) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "获取Token失败" + YDToken + msg, Toast.LENGTH_LONG).show();
                        }
                    });
    
                }
            });
    

    5 设置预取数据url

    public void setPreCheckUrl(String url) 
    

    QuickLoginPreMobileListener

    预取号的回调监听器,接入者需要实现该接口的如下2个抽象方法

    public abstract class QuickLoginPreMobileListener implements QuickLoginListener {
         /**
         * @param YDToken      易盾Token
         * @param mobileNumber 获取的手机号码掩码
         */
        void onGetMobileNumberSuccess(String YDToken, String mobileNumber);
    
        /**
         * @param YDToken 易盾Token
         * @param msg     获取手机号掩码失败原因
         */
        void onGetMobileNumberError(String YDToken, String msg);
    }
    

    QuickLoginTokenListener

    一键登录或本机校验的获取运营商accessToken的回调监听器,接入者需要实现该接口的如下2个抽象方法

    public abstract class QuickLoginTokenListener implements QuickLoginListener {
       /**
         * @param YDToken    易盾token
         * @param accessCode 运营商accessCode
         */
        void onGetTokenSuccess(String YDToken, String accessCode);
    
        /**
         * @param YDToken 易盾token
         * @param msg     出错提示信息
         */
        void onGetTokenError(String YDToken, String msg);
    }
    

    使用步骤

    1创建QuickLogin对象实例

    QuickLogin login = QuickLogin.getInstance(getApplicationContext(),
    

    2根据本机校验或一键登录需求调用对应的接口

    2.1 一键登录

    2.1.1 调用prefetchMobileNumber接口预取号
    login.prefetchMobileNumber(new QuickLoginPreMobileListener() {
            @Override
            public void onGetMobileNumberSuccess(String YDToken, final String mobileNumber) {
            // 在该成功回调中能够获取到此次请求的易盾token以及预取号获取的手机掩码
            }
    
            @Override
            public void onGetMobileNumberError(String YDToken, final String msg) {
            //  在该错误回调中能够获取到此次请求的易盾token以及预取号获取手机掩码失败的原因
            }
        });
    
    2.1.1 调用onePass一键登录
    login.onePass(new QuickLoginTokenListener() {
        @Override
        public void onGetTokenSuccess(final String YDToken, final String accessCode) {
            Log.d(TAG, String.format("yd token is:%s accessCode is:%s", YDToken, accessCode));
            // 在一键登录获取token的成功回调中使用易盾token和运营商token去做token的验证,具体验证规则请参看服务端给出的说明文档
            tokenValidate(YDToken, accessCode, true);
        }
    
        @Override
        public void onGetTokenError(String YDToken, String msg) {
            Log.d(TAG, "获取运营商token失败:" + msg);
            // 一键登录获取token失败的回调
        }
    });
    

    2.2 本机校验

    调用getToken接口进行本机校验
    // 本机校验获取token
    login.getToken(mobileNumber, new QuickLoginTokenListener() {
        @Override
        public void onGetTokenSuccess(final String YDToken, final String accessCode) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(), "获取Token成功" + YDToken + accessCode, Toast.LENGTH_LONG).show();
                    Log.d(TAG, "获取Token成功" + YDToken + accessCode);
                    tokenValidate(YDToken, accessCode, false);
                }
            });
    
        }
    
        @Override
        public void onGetTokenError(final String YDToken, final String msg) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(getApplicationContext(), "获取Token失败" + YDToken + msg, Toast.LENGTH_LONG).show();
                }
            });
    
        }
    });
    

    完整demo代码示例

    public class LoginActivity extends AppCompatActivity {
        public static final String TAG = "QuickLogin";
        private static String BUSINESS_ID;
        private static String mSecretKey;
        private static String mSecretId;
        private static String mVerifyUrl, mOnePassUrl;
        private boolean isTest = false;
    
        private String mMobileNumber;
        private TextView tvMobileNumber;
        private EditText etMobileNumber;
        private Button btnVerify, btnOnePass;
        private QuickLogin login;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initArgs();
            login = QuickLogin.getInstance(getApplicationContext(), BUSINESS_ID);
            tvMobileNumber = findViewById(R.id.tv_mobile_number);
            etMobileNumber = findViewById(R.id.et_mobile_number);
            btnVerify = findViewById(R.id.btn_verify);
            btnVerify.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    mMobileNumber = etMobileNumber.getText().toString();
                    mobileNumberVerify(mMobileNumber);
                }
            });
            btnOnePass = findViewById(R.id.btn_one_pass);
            getPreMobileNumber();
    
        }
    
        private void initArgs() {
            if (isTest) {
                // BUSINESS_ID = "35d60d532b4f4c4c84f3e243c1989a27"; //本机校验
                BUSINESS_ID = "3cc9408f47414f03a75947c108e60034"; // 一键登录
                mSecretKey = "abf908daf58a9737a9205142b81e1606";
                mSecretId = "e535e1074974d472a12f5d6e55e521bc";
                mVerifyUrl = "http://eredar-server-test.nis.netease.com/v1/check";
                mOnePassUrl = "http://eredar-server-test.nis.netease.com/v1/oneclick/check";
            } else {
                //BUSINESS_ID = "1412f24fcadc4f1e9b11590221a3e4eb";//本机校验
                 BUSINESS_ID = "b55f3c7d4729455c9c3fb23872065401";//一键登录
                mSecretKey = "72b2db9cb89c5c9d9efb1d1d9950a38e";//"71vqiij2bnp114tupvojvhom9u";
                mSecretId = "a4c49cbb2b2420492e132b4c2e03634f";// "123456123456";
                mVerifyUrl = "http://ye.dun.163yun.com/v1/check";
                mOnePassUrl = "http://ye.dun.163yun.com/v1/oneclick/check";
            }
        }
    
        private void mobileNumberVerify(String mobileNumber) {
            // 本机校验获取token
            login.getToken(mobileNumber, new QuickLoginTokenListener() {
                @Override
                public void onGetTokenSuccess(final String YDToken, final String accessCode) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            // Toast.makeText(getApplicationContext(), "获取Token成功" + YDToken + accessCode, Toast.LENGTH_LONG).show();
                            Log.d(TAG, "获取Token成功" + YDToken + accessCode);
                            tokenValidate(YDToken, accessCode, false);
                        }
                    });
    
                }
    
                @Override
                public void onGetTokenError(final String YDToken, final String msg) {
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            Toast.makeText(getApplicationContext(), "获取Token失败" + YDToken + msg, Toast.LENGTH_LONG).show();
                        }
                    });
    
                }
            });
        }
    
        private void getPreMobileNumber() {
            // 预取号与一键登录
            login.prefetchMobileNumber(new QuickLoginPreMobileListener() {
                @Override
                public void onGetMobileNumberSuccess(String YDToken, final String mobileNumber) {
                    Log.d(TAG, "[onGetMobileNumberSuccess]callback mobileNumber is:" + mobileNumber);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            tvMobileNumber.setText(mobileNumber);
                            btnOnePass.setOnClickListener(new View.OnClickListener() {
                                @Override
                                public void onClick(View v) {
                                    login.onePass(new QuickLoginTokenListener() {
                                        @Override
                                        public void onGetTokenSuccess(final String YDToken, final String accessCode) {
                                            Log.d(TAG, String.format("yd token is:%s accessCode is:%s", YDToken, accessCode));
                                            tokenValidate(YDToken, accessCode, true);
                                        }
    
                                        @Override
                                        public void onGetTokenError(String YDToken, String msg) {
                                            Log.d(TAG, "获取运营商token失败:" + msg);
                                        }
                                    });
    
                                }
                            });
    
                        }
                    });
                }
    
                @Override
                public void onGetMobileNumberError(String YDToken, final String msg) {
                    Log.e(TAG, "[onGetMobileNumberError]callback error msg is:" + msg);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            tvMobileNumber.setText(msg);
                        }
                    });
                }
            });
    
    
        }
    
        //本机校验
        private void tokenValidate(String token, String accessCode, final boolean isOnePass) {
    
            String nonce = Utils.getRandomString(32);
            String timestamp = String.valueOf(System.currentTimeMillis());
            //生成签名信息
            final HashMap<String, String> map = new HashMap<>();
            map.put("accessToken", accessCode);
            map.put("businessId", BUSINESS_ID);
            map.put("token", token);
            map.put("nonce", nonce);
            map.put("timestamp", timestamp);
            map.put("version", "v1");
            map.put("secretId", mSecretId);
            if (!isOnePass) {
                map.put("phone", mMobileNumber);
            }
            String sign = Utils.generateSign(mSecretKey, map);
    
            StringBuffer sburl = new StringBuffer();
            if (isOnePass) {
                sburl.append(mOnePassUrl);
            } else {
                sburl.append(mVerifyUrl);
            }
            sburl.append("?accessToken=" + accessCode);
            sburl.append("&businessId=" + BUSINESS_ID);
            sburl.append("&token=" + token);
            sburl.append("&signature=" + sign);
            sburl.append("&nonce=" + nonce);
            sburl.append("&timestamp=" + timestamp);
            sburl.append("&version=" + "v1");
            sburl.append("&secretId=" + mSecretId);
            sburl.append("&phone=" + mMobileNumber);
            final String reqUrl = sburl.toString();
            HttpUtil.doGetRequest(reqUrl, new HttpUtil.ResponseCallBack() {
                @Override
                public void onSuccess(String result) {
                    try {
                        Log.e(QuickLogin.TAG, result);
                        JSONObject j = new JSONObject(result);
                        int retCode = j.getInt("code");
                        if (retCode == 200) {
                            if (isOnePass) {
                                String msg = j.getString("msg");
                                JSONObject data = j.getJSONObject("data");
                                String mobileNumber = data.getString("phone");
                                if (!TextUtils.isEmpty(mobileNumber)) {
                                    Utils.showToast(LoginActivity.this, "一键登录通过");
                                } else {
                                    Utils.showToast(LoginActivity.this, "一键登录不通过" + msg);
                                }
                            } else {
                                JSONObject data = j.getJSONObject("data");
                                int result2 = data.getInt("result");
                                if (result2 == 1) {
                                    Utils.showToast(LoginActivity.this, "本机校验通过");
                                } else if (result2 == 2) {
                                    Utils.showToast(LoginActivity.this, "本机校验不通过");
                                } else {
                                    Utils.showToast(LoginActivity.this, "无法确认校验是否通过");
                                }
                            }
    
                        } else {
                            String tip = isOnePass ? "一键登录校验token失败:" : "本机校验token失败:";
                            Utils.showToast(LoginActivity.this, tip + j.toString());
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                        Log.e(QuickLogin.TAG, "error:" + e.toString());
                    }
                }
    
                @Override
                public void onError(int errorCode, String msg) {
                    Log.e(QuickLogin.TAG, "校验token出现错误" + msg);
                }
            });
        }
    }
    
    
    在线咨询 电话咨询:95163223 免费试用