使用自定义ui的ShareSDK短信验证码功能

手机短信验证功能在现在应用中使用十分普遍,ShareSDK现在提供免费的短信验证功能,使用集成都十分的方便而且自带了一套ui库,开发者只要直接调用就能使用,具体使用可以参照官方的文档。今天给大家介绍是使用自定义ui的短信验证,只介绍最基本的使用,大家可以在此基础上进行扩展。


1.获取sdk,并且注册自己的APPKey

去ShareSDK下载短信注册的SDK,并且申请自己的APPkey。大家也可以下载本demo,直接使用里面的短信验证的核心类库,个人感觉直接引用类库比官方文档上导入jar包配置相关文件要方便的多。如果需要官方的UI库可以自行下载。

2.导入核心类库

把核心类库导入工程,添加一下依赖。
目前检查到如果你编译的targetSdkVersion等于23,MINU的Android6.0在拒绝授权会关闭APP,所以建议用户将targetSdkVersion设成22或以下
把核心类库导入工程

3.打开项目中的“AndroidManifest.xml”,添加如下代码

其中有些是UI库中所需要的,可以看情况去除,但是防止报错最好还是都加上。

    <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.GET_TASKS" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

然后打“application”下添加如下activity:

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

4.在项目启动时,调用下面的代码

SMSSDK.initSDK(this, "您的appkey", "您的appsecret");

这个是所有方法的入口,如果这里的appkey或者秘钥不正确就无法继续实现后面一系列的功能。

5.主界面布局

主界面

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#00b0ec"
        android:gravity="center"
        android:orientation="horizontal">

        <TextView
            android:layout_width="match_parent"
            android:layout_height="50dp"
            android:gravity="center"
            android:text="注册新账户"
            android:textColor="#ffffff"
            android:textSize="18sp" />
    </LinearLayout>


    <EditText
        android:id="@+id/et_number"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:hint="手机号码"
        android:textSize="14sp" />

    <Button
        android:onClick="getSecurity"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_gravity="right"
        android:layout_marginRight="10dp"
        android:layout_marginTop="5dp"
        android:background="#00b0ec"
        android:padding="3dp"
        android:text="获取验证码"
        android:textColor="#ffffff"
        android:textSize="13sp" />

    <EditText
        android:id="@+id/et_security"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dp"
        android:layout_marginRight="10dp"
        android:layout_marginTop="10dp"
        android:hint="验证码"
        android:textSize="14sp" />

    <Button
        android:onClick="testSecurity"
        android:layout_width="wrap_content"
        android:layout_height="35dp"
        android:layout_gravity="right"
        android:layout_marginRight="10dp"
        android:layout_marginTop="5dp"
        android:background="#00b0ec"
        android:padding="3dp"
        android:text="提交验证码"
        android:textColor="#ffffff"
        android:textSize="13sp" />

    </LinearLayout>

6.MianActivity代码

直接上代码,里面都有具体注释。

    package com.vence.smsdemo;

    import android.app.Activity;
    import android.app.AlertDialog;
    import android.app.ProgressDialog;
    import android.os.Bundle;
    import android.text.TextUtils;
    import android.util.Log;
    import android.view.View;
    import android.widget.EditText;
    import android.widget.Toast;

    import java.util.HashMap;

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

    public class MainActivity extends Activity {
        private EditText et_number;
        private EditText et_security;
        private String number;
        private ProgressDialog dialog;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            et_number = (EditText) findViewById(R.id.et_number);
            et_security = (EditText) findViewById(R.id.et_security);

            SMSSDK.registerEventHandler(ev); //注册短信回调监听
        }

        /**
         * 短信验证的回调监听
         */
        private EventHandler ev = new EventHandler() {
            @Override
            public void afterEvent(int event, int result, Object data) {
                if (result == SMSSDK.RESULT_COMPLETE) { //回调完成
                    //提交验证码成功,如果验证成功会在data里返回数据。data数据类型为HashMap<number,code>
                    if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        Log.e("TAG", "提交验证码成功" + data.toString());
                        HashMap<String, Object> mData = (HashMap<String, Object>) data;
                        String country = (String) mData.get("country");//返回的国家编号
                        String phone = (String) mData.get("phone");//返回用户注册的手机号

                        Log.e("TAG", country + "====" + phone);

                        if (phone.equals(number)) {
                            runOnUiThread(new Runnable() {//更改ui的操作要放在主线程,实际可以发送hander
                                @Override
                                public void run() {
                                    showDailog("恭喜你!通过验证");
                                    dialog.dismiss();
                                    //    Toast.makeText(MainActivity.this, "通过验证", Toast.LENGTH_SHORT).show();
                                }
                            });
                        } else {
                            runOnUiThread(new Runnable() {
                                @Override
                                public void run() {
                                    showDailog("验证失败");
                                    dialog.dismiss();
                                    //     Toast.makeText(MainActivity.this, "验证失败", Toast.LENGTH_SHORT).show();
                                }
                            });
                        }

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

                    }
                } else {
                    ((Throwable) data).printStackTrace();
                }
            }
        };

        private void showDailog(String text) {
            new AlertDialog.Builder(this)
                    .setTitle(text)
                    .setPositiveButton("确定", null)
                    .show();
        }

        /**
         * 获取验证码
         *
         * @param v
         */
        public void getSecurity(View v) {
            number = et_number.getText().toString().trim();
            //发送短信,传入国家号和电话---使用SMSSDK核心类之前一定要在MyApplication中初始化,否侧不能使用
            if (TextUtils.isEmpty(number)) {
                Toast.makeText(this, "号码不能为空!", Toast.LENGTH_SHORT).show();
            } else {
                SMSSDK.getVerificationCode("+86", number);
                Toast.makeText(this, "发送成功:" + number, Toast.LENGTH_SHORT).show();
            }
        }

        /**
         * 向服务器提交验证码,在监听回调中判断是否通过验证
         *
         * @param v
         */
        public void testSecurity(View v) {
            String security = et_security.getText().toString();
            if (!TextUtils.isEmpty(security)) {
                dialog = ProgressDialog.show(this, null, "正在验证...", false, true);
                //提交短信验证码
                SMSSDK.submitVerificationCode("+86", number, security);//国家号,手机号码,验证码
                Toast.makeText(this, "提交了注册信息:" + number, Toast.LENGTH_SHORT).show();
            } else {
                Toast.makeText(this, "验证码不能为空", Toast.LENGTH_SHORT).show();
            }
        }

        @Override
        protected void onDestroy() {
            super.onDestroy();
            //要在activity销毁时反注册,否侧会造成内存泄漏问题
            SMSSDK.unregisterAllEventHandler();
        }
    }

demo下载

下载传送门

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值