AndroidStudio短信驗證之MobSMS與BmobSMS。html
/*SMS-將libs加入倉庫(repositories)*/
repositories {
flatDir {
dirs 'libs'// aar目錄地址
}
}
複製代碼
compile name: 'SMSSDK-3.0.0', ext: 'aar'
複製代碼
權限android
<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" />
複製代碼
applicationgit
<!-- SMS-配AppKey和AppSecret -->
<meta-data
android:name="Mob-AppKey"
android:value="xxx" />
<meta-data
android:name="Mob-AppSecret"
android:value="xxx" />
<!-- SMS-添Activity -->
<activity
android:name="com.mob.tools.MobUIShell"
android:configChanges="keyboardHidden|orientation|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:windowSoftInputMode="stateHidden|adjustResize" />
複製代碼
/*
* 提示用戶讀取通訊錄則添下面代碼且須其它代碼調用前,否無用;無此需求可不加該行代碼
* 加該行代碼,申請權限成功,系統再彈對話框提示用戶是否繼續用該權限
* */
SMSSDK.setAskPermisionOnReadContact(true);
// 初始化EventHandler對象
eventHandler = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
Message msg = new Message();
msg.arg1 = event;
msg.arg2 = result;
msg.obj = data;
handler.sendMessage(msg);
}
};
複製代碼
SMSSDK.registerEventHandler(eventHandler);
複製代碼
/**
* 處理手機驗證碼
*
* @param countries
*/
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
int event = msg.arg1;
int result = msg.arg2;
Object data = msg.obj;
if (result == SMSSDK.RESULT_COMPLETE) {
// 回調完成 result-1
/*boolean smart = (Boolean) data;
if (smart) {// 經過智能驗證
} else {// 仍走短信驗證
}*/
LogManager.e("驗證碼狀態", "回調完成" + " " + event + "" + result);
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
// 提交驗證碼成功 event-1
LogManager.e("驗證碼狀態", "提交成功" + " " + event + "" + result);
App.getInstance().setUserPhone(etUserPhoneRegister.getText().toString().trim());
jumpNoBundle(PersonalInfoActivity.class);
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
// 獲驗證碼成功 event-2
LogManager.e("驗證碼狀態", "獲取成功" + " " + event + "" + result);
toastShort(getString(R.string.identifyCodeGetHint));
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
// 返支持發送驗證碼國家列表 event-3
}
} else {
/*int status = 0;*/
try {
((Throwable) data).printStackTrace();
Throwable throwable = (Throwable) data;
JSONObject object = new JSONObject(throwable.getMessage());
String des = object.optString("detail");
/*status = object.optInt("status");*/
if (!TextUtils.isEmpty(des)) {
toastShort(des);
return;
}
} catch (Exception e) {
SMSLog.getInstance().w(e);
}
}
}
};
複製代碼
/*
* 短信SDK並不支持世界上全部國家短信驗證服務,故提供getSupportedCountries方法,用短信驗證碼功能前調此方法獲當前SDK支持國家列表和號碼匹配規則。
* getVerificationCode用於向服務器請求發送驗證碼服務,監聽中返回,需傳國家代號和接收驗證碼手機號碼,在getSupportedCountries中獲支持此服務國家代碼。
* 請求getVerificationCode時間間隔應不小60秒,否服務端返回「操做過於頻繁」錯誤。
* submitVerificationCode用於向服務器提交所接短信驗證碼,驗證成功後經過EventHandler返國家代碼和電話號碼。
*/
SMSSDK.getVerificationCode("86",etUserPhoneRegister.getText().toString().trim());
複製代碼
// 註銷SDK防內存泄漏
SMSSDK.unregisterEventHandler(eventHandler);
複製代碼
gradle(project)github
// Bmob之maven倉庫地址
maven { url "https://raw.github.com/bmob/bmob-android-sdk/master" }
複製代碼
gradle(app)apache
android {
// 兼容6.0出錯在dependencies下用compile 'cn.bmob.android:http-legacy:1.0'
useLibrary 'org.apache.http.legacy'
}
dependencies {
compile 'cn.bmob.android:http-legacy:1.0'
/*兼容6.0加依賴org.apache.http.legacy.jar*/
compile 'cn.bmob.android:bmob-sdk:3.5.5'
/*bmob*/
}
複製代碼
或bash
// Bmob短信服務單包
compile 'cn.bmob.android:bmob-sms:1.0.1'
複製代碼
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--保CPU運轉,屏幕和鍵盤燈可關閉,用於文件上傳下載 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--容許讀手機狀態 創BmobInstallation-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
複製代碼
// 默初始化
Bmob.initialize(this, "Application ID");
複製代碼
BmobSMS.requestSMSCode("13673541527", "哈哈:123456", new QueryListener<Integer>() {
@Override
public void done(Integer integer, BmobException e) {
if (e == null) {
// 驗證碼發送成功
toastShort("發送成功" + integer);
} else {
toastShort(e.getErrorCode() + e.getLocalizedMessage());
}
}
});
複製代碼
BmobSMS.verifySmsCode(etUserPhoneRegister.getText().toString().trim(), etIdentifyCodeRegister.getText().toString().trim(), new UpdateListener() {
@Override
public void done(BmobException e) {
if (e != null) {
toastShort("驗證成功");
}
}
});
複製代碼