又是很长时间没有来扩充自己的新技能了,今天就抽空来补充一下吧!
这是我的短信验证效果图,需求很简单,点击获取验证码的时候调用第三方的api方法,我的验证码是发到自己手机上的,然后输入验证码,点击验证按钮,进行验证
下面说一说集成时候的一些坑吧!
我也是和大多数人一样上去就是照着mob的开发文档进行集成,
1. 先去根目录的build.gradle中一系列的复制/粘贴,
2. 然后去下载sdk,并导入libs文件夹中的jar包
3. 然后再去model中的build.gradle找那个接着粘贴/复制
4. 完了以后就是avtivity中的逻辑代码的复制/粘贴,
结果运行的时候就懵逼啦!报错!!我粘过来也和大家分享一下: Error:Execution failed for task ':app:transformClassesWithDexForDebug,意思是说我的什么文件重复了,详情见网址:点击打开链接 !!哎呀,我就醉了!由此我就知道这Mob的开发文档写的真是.......
下面我给大家演示一遍正确的集成步骤:
到这一步,我们的应用已经创建成功了,然后就是去下载SDK:
将上面图中的jar包有选择的粘贴到自己的model中,并进行引入,完成以后就是去清单文件中进行配置了:
上面两张图中是清单文件的配置:
代码如下:
权限:
<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" />
appliction的引入:
android:name="com.mob.MobApplication"
jar包自带的activity的引入(必须配置):
<activity android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:windowSoftInputMode="stateHidden|adjustResize"/>
然后是Appkey和AppSecret的配置:这里需要注意一下,如果在清单文件中进行了配置,那么代码一定不要再配置了,反之也是一样,如果代码中进行了配置,那么清单文件就不需要再配置了!!另外一定要记得换上自己的appkey和appsecret值:
<meta-data android:name="Mob-AppKey" android:value="24b829ca8f60e"/> <meta-data android:name="Mob-AppSecret" android:value="dcdccab9979ede94d7f5456e81f4a48b"/>
下面附上我的代码吧:
package bw.com.myapplication; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.text.TextUtils; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import org.json.JSONObject; import cn.smssdk.EventHandler; import cn.smssdk.SMSSDK; public class MainActivity extends AppCompatActivity implements View.OnClickListener { private EditText etPhoneNumber; private EditText etCode; private Button btnSendMsg; private Button btnSubmitCode; int i=60; Handler h=new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); if(msg.what==-1){ //修改控件文本进行倒计时 i 以60秒倒计时为例 btnSendMsg.setText( i+" s"); i--; if(i>0){ h.sendEmptyMessageDelayed(-1,1000); }else{ //修改控件文本,进行重新发送验证码 btnSendMsg.setText("重新发送"); btnSendMsg.setClickable(true); i = 60; } }else{ int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; // 短信注册成功后,返回MainActivity,然后提示 if(event== SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){ Toast.makeText(getApplicationContext(), "短信以注册成功!",Toast.LENGTH_SHORT).show(); }else if(event==SMSSDK.EVENT_GET_VERIFICATION_CODE){ //验证码以发送的回调 Toast.makeText(getApplicationContext(), "验证码已经发送",Toast.LENGTH_SHORT).show(); }else if(result==SMSSDK.RESULT_ERROR){ //短信验证错误的回调 try { Throwable throwable = (Throwable) data; throwable.printStackTrace(); JSONObject object = new JSONObject(throwable.getMessage()); String des = object.optString("detail");//错误描述 int status = object.optInt("status");//错误代码 if (status > 0 && !TextUtils.isEmpty(des)) { Toast.makeText(MainActivity.this, "错误代码==="+status+",错误描述==="+des, Toast.LENGTH_SHORT).show(); return; } } catch (Exception e) { //do something } } //这个判断和event== SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE是一样的作用 // else if(result==SMSSDK.RESULT_COMPLETE){ // Toast.makeText(getApplicationContext(), "验证成功!!",Toast.LENGTH_SHORT).show(); // } } } }; //这是mob所有功能的监听回调, 里面包括 “生成验证码的回调”,“与验证码比对的回调” 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; h.sendMessage(msg); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); //将mob的监听加载进项目中 SMSSDK.registerEventHandler(eventHandler); } //初始化id private void initView() { etPhoneNumber = (EditText) findViewById(R.id.etPhoneNumber); etCode = (EditText) findViewById(R.id.etCode); btnSendMsg = (Button) findViewById(R.id.btnSendMsg); btnSubmitCode = (Button) findViewById(R.id.btnSubmitCode); btnSendMsg.setOnClickListener(this); btnSubmitCode.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.btnSendMsg: //获取验证码的点击事件 String phoneNum = etPhoneNumber.getText().toString().trim(); if (TextUtils.isEmpty(phoneNum)) { Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show(); return; } SMSSDK.getVerificationCode("86", phoneNum); btnSendMsg.setClickable(false); h.sendEmptyMessageDelayed(-1,1000); break; case R.id.btnSubmitCode: // 点击开始验证的事件 String phoneNum1 = etPhoneNumber.getText().toString().trim(); if (TextUtils.isEmpty(phoneNum1)) { Toast.makeText(this, "请输入手机号", Toast.LENGTH_SHORT).show(); return; } String code = etCode.getText().toString().trim(); if (TextUtils.isEmpty(code)) { Toast.makeText(this, "请输入验证码", Toast.LENGTH_SHORT).show(); return; } SMSSDK.submitVerificationCode("86", phoneNum1, code); break; } } //在销毁的时候要回收mob的监听,否则会造成内存泄漏 @Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterAllEventHandler(); } }
布局:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="bw.com.myapplication.MainActivity"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="60dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="手机号:" android:textColor="#222222" android:textSize="16sp" /> <EditText android:id="@+id/etPhoneNumber" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginRight="10dp" android:background="@null" android:drawablePadding="10dp" android:hint="请输入手机号" android:inputType="phone" android:lines="0" android:maxLength="11" android:paddingBottom="10dp" android:paddingLeft="20dp" android:paddingTop="10dp" android:textColor="@android:color/black" android:textColorHint="#cccccc" android:textSize="16sp" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:background="@android:color/darker_gray" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="10dp" android:orientation="horizontal"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="验证码:" android:textColor="#222222" android:textSize="16sp" /> <EditText android:id="@+id/etCode" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1" android:background="@null" android:hint="请输入验证码" android:inputType="phone" android:lines="0" android:maxLength="6" android:paddingBottom="10dp" android:paddingLeft="20dp" android:paddingTop="10dp" android:textColor="@android:color/black" android:textColorHint="#cccccc" android:textSize="16sp" /> <Button android:id="@+id/btnSendMsg" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginRight="20dp" android:background="@android:color/darker_gray" android:text="获取验证码" android:textColor="#0000ff" android:textSize="15sp" /> </LinearLayout> <View android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:background="@android:color/darker_gray" /> <Button android:id="@+id/btnSubmitCode" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/darker_gray" android:gravity="center" android:layout_marginLeft="30dp" android:layout_marginRight="30dp" android:layout_marginTop="30dp" android:text="验证" android:textColor="#0000ff" android:textSize="15sp" /> </LinearLayout>
总结一下:
第三方的开发文档是个坑!!