Android开发免费短信验证码SDK。

xiaoxiao2021-02-28  23

       本人也是刚入安卓,今天学到了短信验证这一块。在平时我们接触的很多APP注册(登录)都需要短信验证,所以突然就想到写一篇博客,一来是巩固知识,方便自己查阅。二来是和大家伙们一起分享下,给需要的朋友一点自己的见解。

       下面就开始表演了:

   提供短信服务的很多,我用的是免费的Mob,很适合自己平时测试或者在个人的小项目中使用,但是上线前每个手机号一天有次数限制、短信内容不能自定义。

Mob官网:http://www.mob.com/ 

1:注册一个账号,申请App,因为我们后边会用到他的 AppKey 和 App Secret 。

2: 下载SDK , 下载很简单就不贴图了。 点击SDK下载 --> 短信验证码SDK --> 当然是选择安装了。 下载好解压后会有四个Jar包,如下图。

3:在项目libs中导入这四个Jar包,并且在build.gradle文件中添加如下代码:

repositories { flatDir { dirs 'libs' } } compile name: 'SMSSDK-2.1.2', ext: 'aar' compile name: 'SMSSDKGUI-2.1.2', ext: 'aar'如图:

4:然后在AndroidManifest.xml中添加如下代码 :

<activity android:name="com.mob.tools.MobUIShell" android:configChanges="keyboardHidden|orientation|screenSize" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:windowSoftInputMode="stateHidden|adjustResize" />

5:下面就是布局文件了: 两个EditText ,两个Button 。

<?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:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.administrator.mob_demo.MainActivity"> <EditText android:id="@+id/Shoujihao" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="请输入手机号" android:theme="@style/MyEdit" /> <EditText android:id="@+id/Yanzhengma" android:layout_width="250dp" android:layout_height="50dp" android:hint="请输入验证码" android:layout_below="@+id/Shoujihao" /> <Button android:id="@+id/Huoqu" android:layout_width="150dp" android:layout_height="wrap_content" android:layout_toRightOf="@+id/Yanzhengma" android:layout_below="@+id/Shoujihao" android:text="获取验证码" /> <Button android:id="@+id/Denglu" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/Yanzhengma" android:text="登录" /> </RelativeLayout>

效果如下:

6:该MainActivity里的主代码了:

package com.example.administrator.mob_demo; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; 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 static final String TAG = "SmsYanZheng"; EditText EdS; EditText EdY; Button BtnH; Button BtnD; EventHandler eventHandler; String strPhoneNumber; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EdS = (EditText)findViewById(R.id.Shoujihao); EdY = (EditText)findViewById(R.id.Yanzhengma); BtnH = (Button)findViewById(R.id.Huoqu); BtnD = (Button)findViewById(R.id.Denglu); BtnH.setOnClickListener(this); BtnD.setOnClickListener(this); // 用到的 AppKey 和 App Secret SMSSDK.initSDK(this,"25ceca8ccd9f8" , "d07319de9b5bc043881e10e59d678589"); eventHandler = new EventHandler(){ /** * 在操作之后被触发 * @param event 参数1 * @param result 参数2 SMSSDK.RESULT_COMPLETE表示操作成功,为SMSSDK.RESULT_ERROR表示操作失败 * @param data 事件操作的结果 */ @Override public void afterEvent(int event, int result, Object data) { Message message = myHandler.obtainMessage(0x00); message.arg1 = event; message.arg2 = result; message.obj = data; myHandler.sendMessage(message); } }; SMSSDK.registerEventHandler(eventHandler); } @Override protected void onDestroy() { super.onDestroy(); SMSSDK.unregisterEventHandler(eventHandler); } @Override public void onClick(View view) { if (view.getId() == R.id.Denglu){ String strCode = EdY.getText().toString(); if (null != strCode && strCode.length() == 4){ Log.d(TAG , EdY.getText().toString()); SMSSDK.submitVerificationCode("86",strPhoneNumber , EdY.getText().toString()); }else { Toast.makeText(this ,"密码长度不正确", Toast.LENGTH_SHORT ).show(); } }else if (view.getId() == R.id.Huoqu){ strPhoneNumber = EdS.getText().toString(); if (null == strPhoneNumber || "".equals(strPhoneNumber) || strPhoneNumber.length()!= 11 ){ Toast.makeText(this, "输入电话号码有误" , Toast.LENGTH_SHORT).show(); return; } SMSSDK.getVerificationCode("86" , strPhoneNumber); BtnH.setClickable(false); //开启线程去更新butto的text new Thread(){ @Override public void run() { int totalTime = 60; for (int i = 0; i<totalTime; i++){ Message message = myHandler.obtainMessage(0x01); message.arg1 = totalTime - i; myHandler.sendMessage(message); try { sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } myHandler.sendEmptyMessage(0x02); } }.start(); } } Handler myHandler = new Handler(){ @Override public void handleMessage(Message msg) { switch (msg.what){ case 0x00: int event = msg.arg1; int result = msg.arg2; Object data = msg.obj; Log.e(TAG , "result:" + result +",event:" + event+ ",data:" +data); //回调 当返回的结果是complete if (result == SMSSDK.RESULT_COMPLETE){ //获取验证码 if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE){ Toast.makeText(MainActivity.this , "发送验证码成功" ,Toast.LENGTH_SHORT).show(); Log.d(TAG , "get verification code successful."); }else if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE){ //提交验证 Log.d(TAG, "submit code successful"); Toast.makeText(MainActivity.this, "提交验证码成功", Toast.LENGTH_SHORT).show(); Intent intent = new Intent(MainActivity.this ,SecondActivity.class); startActivity(intent); }else { Log.d(TAG, data.toString()); } }else { //进行操作出错,通过下面的信息区分析错误原因 try { Throwable throwable = (Throwable) data; throwable.printStackTrace(); JSONObject object = new JSONObject(throwable.getMessage()); String des = object.optString("detail");//错误描述 int status = object.optInt("status");//错误代码 Log.e(TAG ,"status:" + status + ",detail:" + des); if (status > 0 && !TextUtils.isEmpty(des)){ Toast.makeText(MainActivity.this, des, Toast.LENGTH_SHORT).show(); return; } } catch (Exception e) { e.printStackTrace(); } } break; case 0x01: BtnH.setText("重新发送("+ msg.arg1 + ")"); break; case 0x02: BtnH.setText("获取验证码"); BtnH.setClickable(true); break; } } }; }

Ps: 我上边定义的控件名只是为了方便,我方便看。

7:还需要一个Activity , 当你登录成功后跳转的界面,这个很简单就不贴图了。

8:最后,这是很容易遗忘的,在AndroidManifest文件中声明权限:

<uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.RECEIVE_SMS" /> <uses-permission android:name="android.permission.READ_SMS" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <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.GET_TASKS" />

至此就结束了,你可以用你的手机测试能不能收到短信,不过是需要网的哦。 成功的图我就不贴了,大家肯定都能做到的。

Ps: 如果有需要的朋友可以去:https://download.csdn.net/download/liu825562006/10416792 Demo里边包含Jar包。

如有问题留言,会及时回复,后边也会多写写博客,分享一点自己学到的东西,让不知道的朋友也能学习。

谢谢大家!!!

转载请注明原文地址: https://www.6miu.com/read-2400132.html

最新回复(0)