Android Mob第三方集成 短信验证

又是很长时间没有来扩充自己的新技能了,今天就抽空来补充一下吧!


这是我的短信验证效果图,需求很简单,点击获取验证码的时候调用第三方的api方法,我的验证码是发到自己手机上的,然后输入验证码,点击验证按钮,进行验证

下面说一说集成时候的一些坑吧!

我也是和大多数人一样上去就是照着mob的开发文档进行集成,

1. 先去根目录的build.gradle中一系列的复制/粘贴,

2. 然后去下载sdk,并导入libs文件夹中的jar包

3. 然后再去model中的build.gradle找那个接着粘贴/复制

4. 完了以后就是avtivity中的逻辑代码的复制/粘贴,

结果运行的时候就懵逼啦!报错!!我粘过来也和大家分享一下: Error:Execution failed for task ':app:transformClassesWithDexForDebug,意思是说我的什么文件重复了,详情见网址:点击打开链接 !!哎呀,我就醉了!由此我就知道这Mob的开发文档写的真是.......

下面我给大家演示一遍正确的集成步骤:





到这一步,我们的应用已经创建成功了,然后就是去下载SDK



将上面图中的jar包有选择的粘贴到自己的model中,并进行引入,完成以后就是去清单文件中进行配置了:



上面两张图中是清单文件的配置:

代码如下:

权限:

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

appliction的引入:

android:name="com.mob.MobApplication"

jar包自带的activity的引入(必须配置):

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

然后是Appkey和AppSecret的配置:这里需要注意一下,如果在清单文件中进行了配置,那么代码一定不要再配置了,反之也是一样,如果代码中进行了配置,那么清单文件就不需要再配置了!!另外一定要记得换上自己的appkey和appsecret值

<meta-data android:name="Mob-AppKey" android:value="24b829ca8f60e"/>
<meta-data android:name="Mob-AppSecret" android:value="dcdccab9979ede94d7f5456e81f4a48b"/>

下面附上我的代码吧:

package bw.com.myapplication;

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.text.TextUtils;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import org.json.JSONObject;

import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText etPhoneNumber;
    private EditText etCode;
    private Button btnSendMsg;
    private Button btnSubmitCode;

    int i=60;
    Handler h=new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if(msg.what==-1){
                //修改控件文本进行倒计时  i 60秒倒计时为例
                btnSendMsg.setText( i+" s");
                i--;
                if(i>0){
                    h.sendEmptyMessageDelayed(-1,1000);
                }else{
                    //修改控件文本,进行重新发送验证码
                    btnSendMsg.setText("重新发送");
                    btnSendMsg.setClickable(true);
                    i = 60;
                }
            }else{
                int event = msg.arg1;
                int result = msg.arg2;
                Object data = msg.obj;
                // 短信注册成功后,返回MainActivity,然后提示
                if(event== SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){

                    Toast.makeText(getApplicationContext(), "短信以注册成功!",Toast.LENGTH_SHORT).show();

                }else if(event==SMSSDK.EVENT_GET_VERIFICATION_CODE){ //验证码以发送的回调

                    Toast.makeText(getApplicationContext(), "验证码已经发送",Toast.LENGTH_SHORT).show();

                }else if(result==SMSSDK.RESULT_ERROR){ //短信验证错误的回调

                    try {
                        Throwable throwable = (Throwable) data;
                        throwable.printStackTrace();
                        JSONObject object = new JSONObject(throwable.getMessage());
                        String des = object.optString("detail");//错误描述
                        int status = object.optInt("status");//错误代码
                        if (status > 0 && !TextUtils.isEmpty(des)) {
                            Toast.makeText(MainActivity.this, "错误代码==="+status+",错误描述==="+des, Toast.LENGTH_SHORT).show();
                            return;
                        }
                    } catch (Exception e) {
                        //do something
                    }
                }
                //这个判断和event== SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE是一样的作用
//                else if(result==SMSSDK.RESULT_COMPLETE){
//                    Toast.makeText(getApplicationContext(), "验证成功!!",Toast.LENGTH_SHORT).show();
//                }

            }

        }
    };


    //这是mob所有功能的监听回调, 里面包括生成验证码的回调与验证码比对的回调    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;
            h.sendMessage(msg);
        }
    };
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        //mob的监听加载进项目中
        SMSSDK.registerEventHandler(eventHandler);
    }

    //初始化id
    private void initView() {
        etPhoneNumber = (EditText) findViewById(R.id.etPhoneNumber);
        etCode = (EditText) findViewById(R.id.etCode);
        btnSendMsg = (Button) findViewById(R.id.btnSendMsg);
        btnSubmitCode = (Button) findViewById(R.id.btnSubmitCode);

        btnSendMsg.setOnClickListener(this);
        btnSubmitCode.setOnClickListener(this);
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.btnSendMsg: //获取验证码的点击事件
                String phoneNum = etPhoneNumber.getText().toString().trim();
                if (TextUtils.isEmpty(phoneNum)) {
                    Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show();
                    return;
                }
                SMSSDK.getVerificationCode("86", phoneNum);
                btnSendMsg.setClickable(false);
                h.sendEmptyMessageDelayed(-1,1000);
                break;
            case R.id.btnSubmitCode: // 点击开始验证的事件
                String phoneNum1 = etPhoneNumber.getText().toString().trim();
                if (TextUtils.isEmpty(phoneNum1)) {
                    Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show();
                    return;
                }
                String code = etCode.getText().toString().trim();
                if (TextUtils.isEmpty(code)) {
                    Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show();
                    return;
                }
                SMSSDK.submitVerificationCode("86", phoneNum1, code);
                break;
        }
    }

    //在销毁的时候要回收mob的监听,否则会造成内存泄漏
    @Override
    protected void onDestroy() {
        super.onDestroy();
        SMSSDK.unregisterAllEventHandler();
    }

}

布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="bw.com.myapplication.MainActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginTop="60dp"
        android:orientation="horizontal">


        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="手机号:"
            android:textColor="#222222"
            android:textSize="16sp" />

        <EditText
            android:id="@+id/etPhoneNumber"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginRight="10dp"
            android:background="@null"
            android:drawablePadding="10dp"
            android:hint="请输入手机号"
            android:inputType="phone"
            android:lines="0"
            android:maxLength="11"
            android:paddingBottom="10dp"
            android:paddingLeft="20dp"
            android:paddingTop="10dp"
            android:textColor="@android:color/black"
            android:textColorHint="#cccccc"
            android:textSize="16sp" />

    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:background="@android:color/darker_gray" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginTop="10dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="验证码:"
            android:textColor="#222222"
            android:textSize="16sp" />

        <EditText
            android:id="@+id/etCode"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:background="@null"
            android:hint="请输入验证码"
            android:inputType="phone"
            android:lines="0"
            android:maxLength="6"
            android:paddingBottom="10dp"
            android:paddingLeft="20dp"
            android:paddingTop="10dp"
            android:textColor="@android:color/black"
            android:textColorHint="#cccccc"
            android:textSize="16sp" />

        <Button
            android:id="@+id/btnSendMsg"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="20dp"
            android:background="@android:color/darker_gray"
            android:text="获取验证码"
            android:textColor="#0000ff"
            android:textSize="15sp" />
    </LinearLayout>

    <View
        android:layout_width="match_parent"
        android:layout_height="1dp"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:background="@android:color/darker_gray" />

    <Button
        android:id="@+id/btnSubmitCode"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/darker_gray"
        android:gravity="center"
        android:layout_marginLeft="30dp"
        android:layout_marginRight="30dp"
        android:layout_marginTop="30dp"
        android:text="验证"
        android:textColor="#0000ff"
        android:textSize="15sp" />

</LinearLayout>

总结一下:

第三方的开发文档是个坑!!


猜你喜欢

转载自blog.csdn.net/weixin_40430041/article/details/79613186