短信验证

来源:互联网 发布:windows snmptools 编辑:程序博客网 时间:2024/05/22 09:44

前言

AndroidStudio中短信验证之MobSMS与BmobSMS。

MobSMS

配置

  • SDK

    • libs
    • gradle(app)

      /*SMS-将libs加入仓库(repositories)*/repositories {    flatDir {        dirs 'libs'// aar目录地址    }}
      compile name: 'SMSSDK-3.0.0', ext: 'aar'
  • 清单文件

    • 权限

      <uses-permission android:name="android.permission.READ_CONTACTS" /><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.INTERNET" /><uses-permission android:name="android.permission.RECEIVE_SMS" /><uses-permission android:name="android.permission.READ_SMS" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    • application

      <!-- SMS-配置AppKey和AppSecret --><meta-dataandroid:name="Mob-AppKey"android:value="xxx" /><meta-dataandroid:name="Mob-AppSecret"android:value="xxx" /><!-- SMS-添加Activity --><activityandroid:name="com.mob.tools.MobUIShell"android:configChanges="keyboardHidden|orientation|screenSize"android:theme="@android:style/Theme.Translucent.NoTitleBar"android:windowSoftInputMode="stateHidden|adjustResize" />

代码

初始化

/* * 若需在读取通信录时提示用户,可添加下面代码,且须在其它代码调用前,否则不起作用;若无此需求,可不加该行代码 * 加该行代码,申请权限成功,系统会再次弹出对话框提示用户是否继续使用该权限 * */SMSSDK.setAskPermisionOnReadContact(true);// 初始化EventHandler对象eventHandler = new EventHandler() {    @Override    public void afterEvent(int event, int result, Object data) {        Message msg = new Message();        msg.arg1 = event;        msg.arg2 = result;        msg.obj = data;        handler.sendMessage(msg);    }};

添加监听

SMSSDK.registerEventHandler(eventHandler);

验证码处理

/** * 处理手机验证码 * * @param countries */Handler handler = new Handler() {    @Override    public void handleMessage(Message msg) {        super.handleMessage(msg);        int event = msg.arg1;        int result = msg.arg2;        Object data = msg.obj;        if (result == SMSSDK.RESULT_COMPLETE) {            // 回调完成 result-1            /*boolean smart = (Boolean) data;            if (smart) {// 通过智能验证            } else {// 依然走短信验证            }*/            LogManager.e("验证码状态", "回调完成" + " " + event + "" + result);            if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {                // 提交验证码成功 event-1                LogManager.e("验证码状态", "提交成功" + " " + event + "" + result);                        App.getInstance().setUserPhone(etUserPhoneRegister.getText().toString().trim());                    jumpNoBundle(PersonalInfoActivity.class);            } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {                // 获取验证码成功 event-2                LogManager.e("验证码状态", "获取成功" + " " + event + "" + result);                    toastShort(getString(R.string.identifyCodeGetHint));            } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {                // 返回支持发送验证码国家列表 event-3            }        } else {            /*int status = 0;*/            try {                ((Throwable) data).printStackTrace();                Throwable throwable = (Throwable) data;                JSONObject object = new JSONObject(throwable.getMessage());                String des = object.optString("detail");                /*status = object.optInt("status");*/                if (!TextUtils.isEmpty(des)) {                    toastShort(des);                    return;                }            } catch (Exception e) {                SMSLog.getInstance().w(e);            }        }    }};

验证码获取

/* * 短信SDK并不支持世界上所有国家短信验证服务,故提供getSupportedCountries方法,在使用短信验证码功能前调用此方法,获取当前SDK可支持的国家列表和号码匹配规则。 * getVerificationCode用于向服务器请求发送验证码的服务,在监听中返回,需传递国家代号和接收验证码手机号码,支持此服务的国家代码在getSupportedCountries中获取。 * 请求getVerificationCode时间间隔应不小于60秒,否则服务端会返回“操作过于频繁”错误。 * submitVerificationCode用于向服务器提交所接收短信验证码,验证成功后通过EventHandler返回国家代码和电话号码。 */                            SMSSDK.getVerificationCode("86",etUserPhoneRegister.getText().toString().trim());

移除监听

// 注销SDK防造内存泄漏SMSSDK.unregisterEventHandler(eventHandler);

BmobSMS

配置

  • SDK

    • gradle(project)

      // Bmob之maven仓库地址maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
    • gradle(app)

      android {       // 兼容6.0出错在dependencies下用compile 'cn.bmob.android:http-legacy:1.0'       useLibrary 'org.apache.http.legacy'}dependencies {       compile 'cn.bmob.android:http-legacy:1.0'       /*兼容6.0加依赖org.apache.http.legacy.jar*/       compile 'cn.bmob.android:bmob-sdk:3.5.5'       /*bmob*/}

      // Bmob短信服务单包compile 'cn.bmob.android:bmob-sms:1.0.1'
  • 清单文件

    <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--保持CPU运转,屏幕和键盘灯可能关闭,用于文件上传下载 --><uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><!--允许读取手机状态 创建BmobInstallation--> <uses-permission android:name="android.permission.READ_PHONE_STATE" />

代码

初始化

// 默认初始化Bmob.initialize(this, "Application ID");

验证码获取

BmobSMS.requestSMSCode("13673541527", "哈哈:123456", new QueryListener<Integer>() {    @Override    public void done(Integer integer, BmobException e) {        if (e == null) {            // 验证码发送成功            toastShort("发送成功" + integer);        } else {            toastShort(e.getErrorCode() + e.getLocalizedMessage());        }    }});

验证码处理

BmobSMS.verifySmsCode(etUserPhoneRegister.getText().toString().trim(), etIdentifyCodeRegister.getText().toString().trim(), new UpdateListener() {    @Override    public void done(BmobException e) {        if (e != null) {            toastShort("验证成功");        }    }});

对比

模板定制

  • Mob账户接入http短信并改过短信签名(即短信后缀)才支持修改短信模板,SDK短信内容不支持自定义。参考
  • Bmob账户后台定制

验证码自动填充

  • Mob账户不支持
  • Bmob账户支持

价格

  • 每Bmob帐户10条免费短信用于测试,超过需购买才能继续使用
  • Mob账户
    • SMSSDK2.X+版通过上线登记审核后完全免费
    • 应用未通过上线登记审核,每天仅20条测试短信
    • HTTP-API短信将据运营商供最低价格标准收费
原创粉丝点击