开放平台地址:http://www.mob.com/
---注册开发者账号
---添加应用,获取并记住app key,app secret,项目中后面要用
--下载sdk,按照开发文档配置应用
添加应用,获取app key 和app secret
注册用户--登录--进入后台--点击短信验证栏添加应用
添加完成后点击进入就到了应用页面
快速集成,下载sdk并配置工程
点击快速集成,就要到了文档页面:
http://wiki.mob.com/android-%E7%9F%AD%E4%BF%A1sdk%E9%9B%86%E6%88%90%E6%96%87%E6%A1%A3/
特别注意:项目中targetSdkVersion等于23,MINU的Android6.0在拒绝授权会关闭APP,所以建议用户将targetSdkVersion设成22或以下。
然后点击下载SDK,解压
1.拷贝SMSSDK中对应文件到moudle的libs目录下并同步
打开SMSSDK ,打开HowToUse.txt文本文件,查看怎么配置工程:
在HowToUse.txt中可以看到
MobCommons.jar Mob 通用公共库 必须
MobTools.jar Mob 工具公共库 必须
SMSSDK-<version>.aar SMSSDK 核心 必须
SMSSDKGUI-<version>.aar SMSSDK GUI 开源库 可选
意思是:如果你希望用它给你的布局,你就配置SMSSDKGUI-<version>.aar,自己布局就不用配置最后一项依赖
2.在moudle的build.gradle中配置:
repositories{
flatDir{
dirs 'libs' //就是你放aar的目录地址
}
}
dependencies {
compile name:'SMSSDK-2.1.4',ext:'aar'
}
3.按照文档添加权限和activity的配置.
权限:
<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" />
activity配置:
<activity
android:name="com.mob.tools.MobUIShell"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="keyboardHidden|orientation|screenSize"
android:windowSoftInputMode="stateHidden|adjustResize"/>
代码
权限校验: SMSUtil.checkPermission(this);
1.初始化:
SMSSDK.initSDK(this, APPKEY, APPSECRET, true);
2.在oncreate()注册短信回调
SMSSDK.registerEventHandler(eventHandler);
3.在OnDestroy()注销短信回调
SMSSDK.unregisterEventHandler(eventHandler);
4.获取验证码,后开始倒计时
SMSSDK.getVerificationCode("86", phone);
5.发送短信验证码
SMSSDK.submitVerificationCode("86", phone, code.trim());触发监听事件
我的布局:
activity示例:
public class Login2Activity extends Activity {
public static final String TAG = "Login2Activity";
@InjectView(R.id.ib_back)
ImageButton ibBack;
@InjectView(R.id.tv_title)
TextView tvTitle;
@InjectView(R.id.et_phone)
EditText etPhone;
@InjectView(R.id.et_sms_code)
EditText etSmsCode;
@InjectView(R.id.bt_get_sms_code)
Button btGetSmsCode;
@InjectView(R.id.loadding)
ProgressBar loadding;
@InjectView(R.id.bt_confirm_login)
Button btConfirmLogin;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_login1);
ButterKnife.inject(this);
tvTitle.setText("登录界面");
//1.短信登录-初始化
SMSSDK.initSDK(this, "1cc9d1f42b5a8", "7b33d8e257eccec1e4be29afd0233955");
//2.注册短信回调
SMSSDK.registerEventHandler(eh);
}
@Override
protected void onDestroy() {
super.onDestroy();
//3.注销短信回调
SMSSDK.unregisterEventHandler(eh);
}
//回调
EventHandler eh = new EventHandler() {
@Override
public void afterEvent(int event, int result, Object data) {
if (result == SMSSDK.RESULT_COMPLETE) {
//回调完成
Log.e(TAG, "回调完成" + event + "---" + result + "---" + data);
if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE) {
//提交验证码成功
Log.e(TAG, "登录成功");
runOnUiThread(new Runnable() {//注意:更新ui要在主线程中更新
@Override
public void run() {
Toast.makeText(Login2Activity.this, "登录成功",
Toast.LENGTH_SHORT).show();
}
});
} else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE) {
//获取验证码成功
Log.e(TAG, "获取验证码成功");
} else if (event == SMSSDK.EVENT_GET_SUPPORTED_COUNTRIES) {
//返回支持发送验证码的国家列表
Log.e(TAG, "返回支持发送验证码的国家列表");
}
} else {
((Throwable) data).printStackTrace();
}
}
};
@OnClick({R.id.ib_back, R.id.bt_get_sms_code, R.id.bt_confirm_login})
public void onClick(View view) {
switch (view.getId()) {
case R.id.ib_back:
finish();
break;
case R.id.bt_get_sms_code:
//4.获取验证码
SMSSDK.getVerificationCode("86", etPhone.getText().toString().trim());
//5.开始倒计时
TimeUtil.readSencodChande(btGetSmsCode);//在获取验证码的按钮上显示倒计时
break;
case R.id.bt_confirm_login:
String phone = etPhone.getText().toString().trim();
String smsCode = etSmsCode.getText().toString().trim();
//6.提交短信验证码 //参数:国家代号,手机号,输入的验证码
SMSSDK.submitVerificationCode("86", phone, smsCode);
break;
}
}
}
倒计时工具类:
-创建handler和超时时间(超时间一般为60秒)
-用handler做延时任务,每隔1秒就更新剩余时间和作用控件的可用状态
-监听到验证成功之后也要记得handler消息
public class TimeUtil {
static Handler handler = new Handler();
static int time = 60;//设置超时时间为60秒
/**
* 倒计时
* @param button 作用的控件
*/
public static void readSencodChande(final Button button) {
handler.postDelayed(new Runnable() {
@Override
public void run() {
time -= 1;
if (time <= 0) {
handler.removeCallbacksAndMessages(null);//移除用来做倒计时的handler消息
button.setEnabled(true);
button.setText("重新获取验证码");
} else {
//更新time
button.setEnabled(false); //设置button不可用
button.setText(time + "s");
handler.postDelayed(this, 1000);//继续发消息
}
}
}, 1000);
}
}
最后再次提醒:
1.建议将targetSdkVersion设成22或以下。
2.EventHandler回调运行在子线程中,所以不要在里面更新ui