Mob 之 簡訊驗證整合 SMSSDK
阿新 • • 發佈:2018-11-20
開相關發中總會遇到簡訊驗證這些操作,這周沒有來得及寫新的東西,藉此分享一篇以前學習簡訊驗證的筆記,本文使用的是 Mob 提供的 SMSSDK .
下載 SMSSDK
官網下載地址:SMSSDK
整合 SMSSDK
將 MobCommons.jar、MobTools.jar、SMSSDK-2.0.1.aar、SMSSDKGUI-2.0.1.aar 放到了app 的 libs 目錄下,如果不需要帶介面的 SMSSDK 可以不新增 SMSSDKGUI-2.0.1.aar,具體檔案請參考最新的 SMSSDK。
配置 build.gradle 檔案
開啟 app 下面的 build.gradle 檔案進行如下配置:
配置AndroidManifest.xml
在 AndroidManifest.xml 檔案中配置許可權和Application.
配置許可權
<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" />
配置 application
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
啟動 SDK
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SMSSDK.initSDK(this, "您的appkey", "您的appsecret");
}
}
參考程式碼
實現一個簡單的案例,獲取驗證碼,並進行驗證。
佈局檔案
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.manu.sharesdksms.MainActivity">
<LinearLayout
android:id="@+id/ll_user"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:hint="手機號:" />
<EditText
android:id="@+id/et_number"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"/>
<TextView
android:id="@+id/tv_getCheckCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="獲取驗證碼"
android:clickable="true"/>
</LinearLayout>
<LinearLayout
android:id="@+id/ll_pass"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/ll_user"
android:paddingLeft="16dp"
android:paddingRight="16dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
android:text="驗證碼:"/>
<EditText
android:id="@+id/et_checkCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="4"/>
<TextView
android:id="@+id/tv_sendCheckCode"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="驗證"
android:clickable="true"/>
</LinearLayout>
</RelativeLayout>
MainActivity
/**
* ShareSDk 驗證碼測試
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
private EditText et_number;
private EditText et_checkCode;
private TextView tv_getCheckCode;
private TextView tv_sendCheckCode;
private String phoneNumber;
private String checkCode;
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_checkCode = (EditText) findViewById(R.id.et_checkCode);
tv_getCheckCode = (TextView) findViewById(R.id.tv_getCheckCode);
tv_sendCheckCode = (TextView) findViewById(R.id.tv_sendCheckCode);
checkCode = et_checkCode.getText().toString().trim();
tv_getCheckCode.setOnClickListener(this);
tv_sendCheckCode.setOnClickListener(this);
//註冊簡訊回撥
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(phoneNumber)) {
runOnUiThread(new Runnable() {//更改ui的操作要放在主執行緒,實際可以傳送hander
@Override
public void run() {
showDailog("恭喜你!通過驗證");
dialog.dismiss();
}
});
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
showDailog("驗證失敗");
dialog.dismiss();
}
});
}
} 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();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.tv_getCheckCode:
toast("getCode");
getCheckCode();
break;
case R.id.tv_sendCheckCode:
toast("sendCode");
sendCheckCode();
break;
}
}
/**
* 獲取驗證碼
*/
public void getCheckCode() {
phoneNumber = et_number.getText().toString().trim();
//傳送簡訊,傳入國家號和電話號碼
if (TextUtils.isEmpty(phoneNumber)) {
toast("號碼不能為空!");
} else {
SMSSDK.getVerificationCode("+86", phoneNumber);
toast("傳送成功!");
}
}
/**
* 向伺服器提交驗證碼,在監聽回撥中監聽是否驗證
*/
private void sendCheckCode() {
checkCode = et_checkCode.getText().toString();
if (!TextUtils.isEmpty(checkCode)) {
dialog = ProgressDialog.show(this, null, "正在驗證...", false, true);
//提交簡訊驗證碼
SMSSDK.submitVerificationCode("+86", phoneNumber, checkCode);//國家號,手機號碼,驗證碼
Toast.makeText(this, "提交了註冊資訊:" + phoneNumber, Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "驗證碼不能為空", Toast.LENGTH_SHORT).show();
}
}
/**
* Toast
* @param info
*/
public void toast(String info){
Toast.makeText(MainActivity.this, info, Toast.LENGTH_SHORT).show();
}
@Override
protected void onDestroy() {
SMSSDK.unregisterEventHandler(ev);
super.onDestroy();
}
}
測試效果
稍等一下,gif動畫時間有點長,為了接收到簡訊哦!
可以選擇關注微信公眾號:jzman-blog 獲取最新更新,一起交流學習!