手機驗證碼登入
阿新 • • 發佈:2018-12-12
一.導依賴
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);