短信登录集成三步骤-sharedSdk

Posted 六月June June

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了短信登录集成三步骤-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





以上是关于短信登录集成三步骤-sharedSdk的主要内容,如果未能解决你的问题,请参考以下文章

django之集成阿里云通信(发送手机短信验证码)

短信猫验证码接收解决方案(提供三款接口应用软件)

Android学习之如何集成极光短信验证

SpringBoot集成SpringSecurity(十七手机号登录)

Spring Security--短信验证码详解

iOS sharedSDK详解