1. 程式人生 > >手機驗證碼登入

手機驗證碼登入

一.導依賴 

1.在專案的build.gradle

classpath 'com.mob.sdk:MobSDK:+'

2.在app的build.gradle

// 新增外掛
apply plugin: 'com.mob.sdk'
// 在MobSDK的擴充套件中註冊SMSSDK的相關資訊
MobSDK {
    appKey "d580ad56b4b5"
    appSecret "7fcae59a62342e7e2759e9e397c82bdd"
    SMSSDK {}
}

二.配置全域性App

MobSDK.init(this);

三.可以使用自帶面板的和自定義面板

1.自帶面板(什麼都不用寫,直接複製下面這段程式碼就可以了)

/**
 * 帶面板的(可用)
 * 傳送驗證碼
 * @param context
 */
public void sendCode(Context context) {
    RegisterPage page = new RegisterPage();
    //如果使用我們的ui,沒有申請模板編號的情況下需傳null
    page.setTempCode(null);
    page.setRegisterCallback(new EventHandler() {
        public void afterEvent(int event, int result, Object data) {
            if (result == SMSSDK.RESULT_COMPLETE) {
                // 處理成功的結果
                HashMap<String,Object> phoneMap = (HashMap<String, Object>) data;
                String country = (String) phoneMap.get("country"); // 國家程式碼,如“86”
                String phone = (String) phoneMap.get("phone"); // 手機號碼,如“13800138000”
                // TODO 利用國家程式碼和手機號碼進行後續的操作
            } else{
                // TODO 處理錯誤的結果
            }
        }
    });
    page.show(context);
}

2.自定義面板

佈局

<?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="wrap_content"
        android:orientation="horizontal">

        <EditText
            android:id="@+id/et_tel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:hint="請輸入手機號" />

        <TextView
            android:id="@+id/et_yanz"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="傳送驗證碼"
            android:textSize="25sp" />
    </LinearLayout>

    <EditText
        android:id="@+id/et_code"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="請輸入驗證碼" />

    <Button
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:onClick="verifyCode"
        android:text="驗證"
        android:textSize="18sp" />
</LinearLayout>

java程式碼

package com.example.ggq.sendsms;

import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.support.v7.widget.DialogTitle;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import java.util.HashMap;
import cn.smssdk.EventHandler;
import cn.smssdk.SMSSDK;
import cn.smssdk.gui.RegisterPage;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    private static final String TAG = "MainActivity";

    private EditText et_tel;
    private EditText et_code;
    private EventHandler eventHandler = new EventHandler() {
        public void afterEvent(int event, int result, Object data) {
            // afterEvent會在子執行緒被呼叫,因此如果後續有UI相關操作,需要將資料傳送到UI執行緒
            Message msg = new Message();
            msg.arg1 = event;
            msg.arg2 = result;
            msg.obj = data;
            new Handler(Looper.getMainLooper(), new Handler.Callback() {
                @Override
                public boolean handleMessage(Message msg) {
                    int event = msg.arg1;
                    int result = msg.arg2;
                    Object data = msg.obj;
                    if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
                        if (result == SMSSDK.RESULT_COMPLETE) {
                            // TODO 處理成功得到驗證碼的結果
                            // 請注意,此時只是完成了傳送驗證碼的請求,驗證碼簡訊還需要幾秒鐘之後才送達
                            Toast.makeText(MainActivity.this, "驗證碼傳送成功,請注意接收", Toast.LENGTH_SHORT).show();
                        } else {
                            // TODO 處理錯誤的結果
                            ((Throwable) data).printStackTrace();
                            Toast.makeText(MainActivity.this, "驗證碼傳送失敗,請輸入正確的手機號!!!", Toast.LENGTH_SHORT).show();
                        }
                    } else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
                        if (result == SMSSDK.RESULT_COMPLETE) {
                            // TODO 處理驗證碼驗證通過的結果
                            Toast.makeText(MainActivity.this, "恭喜驗證通過", Toast.LENGTH_SHORT).show();
                        } else {
                            // TODO 處理錯誤的結果
                            ((Throwable) data).printStackTrace();
                            Toast.makeText(MainActivity.this, "驗證失敗", Toast.LENGTH_SHORT).show();
                        }
                    }
                    // TODO 其他介面的返回結果也類似,根據event判斷當前資料屬於哪個介面
                    return false;
                }
            }).sendMessage(msg);
        }
    };
    private String tel;
    private TextView tv_sendMsg;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //帶面板的傳送簡訊驗證碼並驗證的方法(可用)
        //sendCode(this);
        //初始化控制元件
        initView();
        // 註冊一個事件回撥,用於處理SMSSDK介面請求的結果
        SMSSDK.registerEventHandler(eventHandler);
        //點選按鈕傳送驗證碼
        tv_sendMsg.setOnClickListener(this);
    }

    private void initView() {
        et_tel = findViewById(R.id.et_tel);
        et_code = findViewById(R.id.et_code);
        tv_sendMsg= findViewById(R.id.et_yanz);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        // 使用完EventHandler需登出,否則可能出現記憶體洩漏
        SMSSDK.unregisterEventHandler(eventHandler);
    }

    /**
     * 點選驗證
     * @param view
     */
    public void verifyCode(View view) {
        String code = et_code.getText().toString();
        // 提交驗證碼,其中的code表示驗證碼,如“1357”
        SMSSDK.submitVerificationCode("86", tel, code);
    }

    @Override
    public void onClick(View v) {
        tel = et_tel.getText().toString();
        // 請求驗證碼,其中country表示國家程式碼,如“86”;phone表示手機號碼,如“13800138000”
        SMSSDK.getVerificationCode("86", tel);
    }
}

//////////////////////////最後這個沒有用,請隨便看看

//在嘗試讀取通訊錄時以彈窗提示使用者(可選功能)
SMSSDK.setAskPermisionOnReadContact(true);