【簡訊驗證碼】Mob的SMSSDK在Android Studio上的使用
阿新 • • 發佈:2018-12-22
最近寫一個Android的小專案,想想看能不能做一個簡訊驗證碼。最後找到了一個第三方服務商『Mob』。使用其中的SMSSDK。
下載完成並解壓後(資料夾名稱有所更改)。
需要使用到的jar包(剛才的資料夾下,找就可以)
【新建Android專案,就不再一一贅述。】
完成專案結構如下圖:
【Projecet檢視下(在此檢視下新增jar包)】
【Android檢視下】
基本配置如下:
1.AndroidManifest.xml主配置檔案
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize"/> </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.GET_TASKS" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
2.build.gradle配置【classpath】及【jar】包
3.(此處有兩個build.gradle檔案,【區別】在於一個是專案使用,一個是模組)
--------------------------------------
基本配置完成,開始主體程式。
1.MainActivity.java
import android.app.ProgressDialog; import android.os.Bundle; import android.support.v7.app.AlertDialog; import android.support.v7.app.AppCompatActivity; 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 com.mob.MobSDK; import java.util.HashMap; import cn.smssdk.EventHandler; import cn.smssdk.SMSSDK; 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); MobSDK.init(this,"28c4d19ea6b04","24006ac31eee052e78214ec8208938e6"); //註冊簡訊回撥 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(); } }
2.佈局檔案
<?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" > <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>
在手機上安裝測試。
成功驗證。不過速度稍微有點慢,但是是免費的,這點還是可以的。
如有瑕疵,請批評指教!