短信登录集成三步骤-sharedSdk

开放平台地址:http://www.mob.com/

---注册开发者账号
---添加应用,获取并记住app key,app secret,项目中后面要用

--下载sdk,按照开发文档配置应用


添加应用,获取app key 和app secret

注册用户--登录--进入后台--点击短信验证栏添加应用




添加完成后点击进入就到了应用页面



快速集成,下载sdk并配置工程

点击快速集成,就要到了文档页面:

http://wiki.mob.com/android-%E7%9F%AD%E4%BF%A1sdk%E9%9B%86%E6%88%90%E6%96%87%E6%A1%A3/

特别注意项目中targetSdkVersion等于23MINUAndroid6.0在拒绝授权会关闭APP,所以建议用户将targetSdkVersion设成22或以下


然后点击下载SDK,解压

1.拷贝SMSSDK中对应文件到moudlelibs目录下并同步

打开SMSSDK ,打开HowToUse.txt文本文件,查看怎么配置工程:


HowToUse.txt中可以看到

MobCommons.jar                Mob 通用公共库      必须

MobTools.jar                  Mob 工具公共库      必须

SMSSDK-<version>.aar          SMSSDK 核心         必须

SMSSDKGUI-<version>.aar       SMSSDK GUI 开源库   可选

意思是:如果你希望用它给你的布局,你就配置SMSSDKGUI-<version>.aar,自己布局就不用配置最后一项依赖


2.moudlebuild.gradle中配置:

repositories{
    flatDir{
        dirs 'libs' //就是你放aar的目录地址
    }
}
dependencies {
    compile name:'SMSSDK-2.1.4',ext:'aar'
}


3.按照文档添加权限和activity的配置.

权限:

<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" />

activity配置:

    <activity
        android:name="com.mob.tools.MobUIShell"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:configChanges="keyboardHidden|orientation|screenSize"
        android:windowSoftInputMode="stateHidden|adjustResize"/>

代码

权限校验: SMSUtil.checkPermission(this);
1.初始化:
SMSSDK.initSDK(this, APPKEY, APPSECRET, true);
2.在oncreate()注册短信回调
SMSSDK.registerEventHandler(eventHandler);
3.在OnDestroy()注销短信回调
SMSSDK.unregisterEventHandler(eventHandler);
4.获取验证码,后开始倒计时
SMSSDK.getVerificationCode("86", phone);
5.发送短信验证码
SMSSDK.submitVerificationCode("86", phone, code.trim());触发监听事件


 

我的布局:


activity示例:

public class Login2Activity extends Activity {
    public static final String TAG = "Login2Activity";
    @InjectView(R.id.ib_back)
    ImageButton ibBack;
    @InjectView(R.id.tv_title)
    TextView tvTitle;
    @InjectView(R.id.et_phone)
    EditText etPhone;
    @InjectView(R.id.et_sms_code)
    EditText etSmsCode;
    @InjectView(R.id.bt_get_sms_code)
    Button btGetSmsCode;
    @InjectView(R.id.loadding)
    ProgressBar loadding;
    @InjectView(R.id.bt_confirm_login)
    Button btConfirmLogin;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login1);
        ButterKnife.inject(this);
        tvTitle.setText("登录界面");
        //1.短信登录-初始化
        SMSSDK.initSDK(this, "1cc9d1f42b5a8", "7b33d8e257eccec1e4be29afd0233955");
        //2.注册短信回调
        SMSSDK.registerEventHandler(eh);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //3.注销短信回调
        SMSSDK.unregisterEventHandler(eh);
    }
   //回调
    EventHandler eh = new EventHandler() {
        @Override
        public void afterEvent(int event, int result, Object data) {
            if (result == SMSSDK.RESULT_COMPLETE) {
                //回调完成
                Log.e(TAG, "回调完成" + event + "---" + result + "---" + data);
                if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                    //提交验证码成功
                    Log.e(TAG, "登录成功");
                    runOnUiThread(new Runnable() {//注意:更新ui要在主线程中更新
                        @Override
                        public void run() {
                            Toast.makeText(Login2Activity.this, "登录成功", 
Toast.LENGTH_SHORT).show();
                        }
                    });

                } else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                    //获取验证码成功
                    Log.e(TAG, "获取验证码成功");

                } else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
                    //返回支持发送验证码的国家列表
                    Log.e(TAG, "返回支持发送验证码的国家列表");
                }
            } else {
                ((Throwable) data).printStackTrace();
            }
        }
    };

    @OnClick({R.id.ib_back, R.id.bt_get_sms_code, R.id.bt_confirm_login})
    public void onClick(View view) {
        switch (view.getId()) {
            case R.id.ib_back:
                finish();
                break;
            case R.id.bt_get_sms_code:
                //4.获取验证码
                SMSSDK.getVerificationCode("86", etPhone.getText().toString().trim());
                //5.开始倒计时
                TimeUtil.readSencodChande(btGetSmsCode);//在获取验证码的按钮上显示倒计时
                break;
            case R.id.bt_confirm_login:
                String phone = etPhone.getText().toString().trim();
                String smsCode = etSmsCode.getText().toString().trim();
                //6.提交短信验证码		//参数:国家代号,手机号,输入的验证码
                SMSSDK.submitVerificationCode("86", phone, smsCode);
                break;
        }
    }
}


倒计时工具类:

-创建handler和超时时间(超时间一般为60)

-handler做延时任务,每隔1秒就更新剩余时间和作用控件的可用状态

-监听到验证成功之后也要记得handler消息

public class TimeUtil {
    static Handler handler = new Handler();
    static int time = 60;//设置超时时间为60秒
    /**
     * 倒计时
     * @param button 作用的控件
     */
    public static void readSencodChande(final Button button) {

        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                time -= 1;
                if (time <= 0) {
                    handler.removeCallbacksAndMessages(null);//移除用来做倒计时的handler消息
                    button.setEnabled(true);
                    button.setText("重新获取验证码");
                } else {
                    //更新time
                    button.setEnabled(false); //设置button不可用
                    button.setText(time + "s");
                    handler.postDelayed(this, 1000);//继续发消息
                }
            }
        }, 1000);
    }
}


最后再次提醒:

1.建议将targetSdkVersion设成22或以下

2.EventHandler回调运行在子线程中,所以不要在里面更新ui





  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值