Android短信验证码(用的Mob短信验证)

Android短信验证码功能,供大家参考,具体内容如下

1、参考资料

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

Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android

教程:Mob短信验证的具体使用

教程的源代码:  http://git.oschina.net/lizhanqi/MobSMSDemo

Dialog教程:Android Dialog对话框

定时器教程:Android 实现定时器的四种方式

2、前期准备

(1)Mob网站上下载SMS对应的SDK,解压出来为图1,打开图1,将其中的文件拷贝到as项目中的libs文件夹下,另外在add as library

图1

图2

(2)在as项目中的AndroidManifest.xml文件中添加图3所需权限,由于SMS权限为危险权限,所以还要动态申请,这在下面代码中会有体现。注意权限是写在application外面,不是里面。

图3

(3)如果图4中的targetSdkVersion大于22,那么在代码中必须动态申请权限。

图4

(4)在as项目中的图7中的build.gradle文件中添加图5和图6红色框中内容。

图5

图6

图7

(5)在Mob网站上申请App Key和App Secret。

图8

(6)Toast

3、代码(没整理,将就看)

package com.gxu.lepao.activity;

import android.Manifest;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.CountDownTimer;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AlertDialog;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
import com.gxu.lepao.R;
import com.gxu.lepao.model.UserInfo;
import org.litepal.crud.DataSupport;//LitePal开源数据库框架
import java.util.List;
import cn.smssdk.EventHandler;//Mob短信验证码
import cn.smssdk.SMSSDK;//Mob短信验证码

/**
 * Created by ljy on 2017-05-21.
 * 获取和验证短信验证码界面
 */

public class RegisterActivity extends BaseActivity {

 private EditText phoneEdit;
 private EditText smsEdit;
 private Button getSms;
 private Button submitSms;
 private TextView login;
 private TextView reset;
 private CountDownTimer countDownTimer;
 //倒计时
 private int TIME = 60;
 //这是中国区号,如果需要其他国家列表,可以使用getSupportedCountries();获得国家区号
 public String country = "86";
 //APPKEY
 private static String appKey = "1e0d15118480d";
 // 填写从短信SDK应用后台注册得到的APPSECRET
 private static String appSecret = "daa97d794e2436abcae624ac3785d2ef";
 //表示是否使用了registerEventHandler
 private boolean ready;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  Log.d("RegisterActivity","Task; id is " + getTaskId());
  setContentView(R.layout.activity_register);
  // 初始化界面
  initView();
  //初始化SMSSDK
  initSDK();
  getSms.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    boolean isLogin = false;
    //判断手机号码是否已注册过
    isLogin = isRegister();
    if(!TextUtils.isEmpty(phoneEdit.getText().toString())){
     if(!isLogin){
       //发送短信权限
      if(ContextCompat.checkSelfPermission(RegisterActivity.this
        ,Manifest.permission.RECEIVE_SMS) != PackageManager.PERMISSION_GRANTED){
       //显示申请权限弹窗
       showRequestPermission();
      }else{
       //弹窗确认
       alterWarning();
      }
     }else{
      Toast.makeText(RegisterActivity.this,"此手机号码已经注册过",Toast.LENGTH_SHORT).show();
     }
    }else{
     Toast.makeText(RegisterActivity.this,"请输入手机号码",Toast.LENGTH_SHORT).show();
    }
   }
  });
  submitSms.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    String sms = smsEdit.getText().toString();
    String phone = phoneEdit.getText().toString();
    if(!TextUtils.isEmpty(sms)){
     SMSSDK.submitVerificationCode( country, phone, sms);
    }else{
     Toast.makeText(RegisterActivity.this,"请输入验证码",Toast.LENGTH_SHORT).show();
    }
   }
  });
  login.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(RegisterActivity.this,LoginActivity.class);
    startActivity(intent);
   }
  });
  reset.setOnClickListener(new View.OnClickListener(){
   @Override
   public void onClick(View v) {
    Intent intent = new Intent(RegisterActivity.this,ResetPwdActivity.class);
    startActivity(intent);
   }
  });
 }

 //申请权限弹窗
 private void showRequestPermission(){
  //先new出一个监听器,设置好监听
  DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
   @Override
   public void onClick(DialogInterface dialog, int which) {
    switch(which){
     case Dialog.BUTTON_POSITIVE:
      //接收短信权限
      ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.RECEIVE_SMS},1);
      //发送短信权限
      ActivityCompat.requestPermissions(RegisterActivity.this,new String[]{Manifest.permission.SEND_SMS},2);
      //弹窗确认
      alterWarning();
      break;
     case Dialog.BUTTON_NEGATIVE:
      Toast.makeText(RegisterActivity.this, "拒绝" + which, Toast.LENGTH_SHORT).show();
      break;
    }
   }
  };
  //dialog参数设置
  AlertDialog.Builder builder=new AlertDialog.Builder(RegisterActivity.this); //先得到构造器
  builder.setTitle("申请权限"); //设置标题
  builder.setMessage("要允许lepao接收验证码短信吗?"); //设置内容
  builder.setIcon(R.mipmap.ic_launcher);//设置图标,图片id即可
  builder.setPositiveButton("允许",dialogOnclicListener);
  builder.setNegativeButton("拒绝", dialogOnclicListener);
  builder.create().show();
 }

 //申请权限
 public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
  switch (requestCode){
   case 1:
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
     //initSDK();
     Toast.makeText(this,"你授权。。。接收短信权限",Toast.LENGTH_SHORT).show();
    }else{
     Toast.makeText(this,"你拒绝。。。接收短信权限",Toast.LENGTH_SHORT).show();
    }
    break;
   case 2:
    if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
     Toast.makeText(this,"你授权。。。发送短信权限",Toast.LENGTH_SHORT).show();
    }else{
     Toast.makeText(this,"你拒绝。。。发送短信权限",Toast.LENGTH_SHORT).show();
    }
    break;
   default:
  }
 }

 // 初始化短信SDK
 private void initSDK() {
  SMSSDK.initSDK(this, appKey, appSecret, true);
  //final Handler handler = new Handler();
  EventHandler eventHandler = new EventHandler() {
   public void afterEvent(int event, int result, Object data) {
    //回调完成
    if (result == SMSSDK.RESULT_COMPLETE)
    {
     //验证码验证成功
     if (event == SMSSDK.EVENT_SUBMIT_VERIFICATION_CODE)
     {
      toast("验证成功");
      Intent intent = new Intent(RegisterActivity.this,SetPwdActivity.class);
      intent.putExtra("phone",phoneEdit.getText().toString());
      startActivity(intent);
      finish();
     }
     //已发送验证码
     else if (event == SMSSDK.EVENT_GET_VERIFICATION_CODE)
     {
      toast("验证码已经发送");
     } else
     {
      ((Throwable) data).printStackTrace();
      String str = data.toString();
      toast(str);
     }
    }
    if(result==SMSSDK.RESULT_ERROR) {
     toast("验证码错误");
    }

   }
  };
  // 注册回调监听接口
  SMSSDK.registerEventHandler(eventHandler);
  ready = true;
 }

 //吐司的一个小方法
 private void toast(final String str) {
  runOnUiThread(new Runnable() {
   @Override
   public void run() {
    Toast.makeText(RegisterActivity.this, str, Toast.LENGTH_SHORT).show();
   }
  });
 }

 //销毁短信注册
 @Override
 protected void onDestroy() {
  // 注销回调接口registerEventHandler必须和unregisterEventHandler配套使用,否则可能造成内存泄漏。
  if(ready){
   SMSSDK.unregisterAllEventHandler();
  }
  super.onDestroy();
 }

 //初始化界面
 private void initView(){
  phoneEdit = (EditText) findViewById(R.id.phone);
  smsEdit = (EditText) findViewById(R.id.sms);
  getSms = (Button) findViewById(R.id.getSms);
  submitSms = (Button) findViewById(R.id.submitSms);
  login = (TextView) findViewById(R.id.login);
  reset = (TextView) findViewById(R.id.reset);
 }

 //弹窗确认
 private void alterWarning(){
  //先new出一个监听器,设置好监听
  DialogInterface.OnClickListener dialogOnclicListener=new DialogInterface.OnClickListener(){
   @Override
   public void onClick(DialogInterface dialog, int which) {
    switch(which){
     case Dialog.BUTTON_POSITIVE:
      dialog.dismiss();
      //通过sdk发送短信验证(请求获取短信验证码,在监听(eventHandle)中返回)
      SMSSDK.getVerificationCode(country, phoneEdit.getText().toString());
      //设置获取验证码按钮不能点击
      getSms.setClickable(false);
      //倒计时,执行次数为(TIME+1)*1000/1000,countDownTimer每次执行间隔:1000(单位为毫秒)
      countDownTimer = new CountDownTimer((TIME+1)*1000, 1000) {
       @Override
       public void onTick(long millisUntilFinished) {
        getSms.setText(TIME-- + "秒后再次获取验证码");
       }

       @Override
       public void onFinish() {
        //设置获取验证码按钮可以点击
        getSms.setClickable(true);
        getSms.setText("点击获取短信验证码");
       }
      };
      countDownTimer.start();
      break;
     case Dialog.BUTTON_NEGATIVE:
      dialog.dismiss();
      Toast.makeText(RegisterActivity.this, "已取消", Toast.LENGTH_SHORT).show();
      break;
    }
   }
  };
  //dialog参数设置
  AlertDialog.Builder builder=new AlertDialog.Builder(this); //先得到构造器
  builder.setTitle("发送短信"); //设置标题
  builder.setMessage("我们将把验证码发送到以下号码:\n"+country+"-"+phoneEdit.getText().toString()); //设置内容
  builder.setIcon(R.drawable.icon);//设置图标,图片id即可
  builder.setPositiveButton("确认",dialogOnclicListener);
  builder.setNegativeButton("取消", dialogOnclicListener);
  builder.create().show();
 }

 //判断手机号码是否已注册过
 public boolean isRegister(){
  boolean isLogin = false;
  。。。。。299   return isLogin;
 }

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android使用第三方服务器Bmob实现发送短信验证码

    调用Bmob第三方服务器实现短信验证的功能,大致思路如下: 随机产生6位数字,然后调用Bmob的请求短发函数发送者六位数到服务器,然后服务器给指定手机发送这6位验证码,然后感觉用户输入的数字进行判断,如果输入的和发送的相等,则验证成功. 第一步.请求验证码: SimpleDateFormat format =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String sendTime = format.format(new Date());

  • Android利用CursorLoader实现短信验证码自动填写

    概述 Android上实现短信验证码自动填写,常用的有两种方式.一种是利用BroadCastReceiver,还有一种是监听手机上短信数据库的变化.利用BroadCastReceiver来实现会在一些情况下无效,最常见的就是手机上安装了具有垃圾短信拦截功能的软件的情况下,短信验证码自动填写无效.所以,现在一般会选用监听数据库内容变化的方式来实现短信验证码自动填写. 网上对于利用监听数据库内容变化来实现短信验证码自动填写的文章也很多,主要分为一下步骤: 1. 继承ContentObserver实现

  • Android获取短信验证码的实现方法

    先给大家展示下效果图,如果感觉不错,请参考实现思路详解 Android开发中关于短息验证码的设计层出不穷,越来越多的应用为了更好的提高软件的安全性,开始使用通过服务器向用户发送验证码的方式,来保护用户个人信息的安全性.无论是用户注册时的信息验证还是当用户发出找回密码请求时的短信验证,他们的工作原理大致上是一致的,因为项目的需要研究了一下关于这方面的知识,本篇我将带领大家一起实现这一当下流行的设计方案. 众所周知,短信验证需要服务器端生成一个验证码,然后发送到用户输入的手机上,这个过程需要服务器主

  • Android 短信验证码自动填写

    Android 短信验证码自动填写 1.自定义Observer监听短信数据库变化(注意添加短信权限) import android.app.Activity; import android.content.ContentResolver; import android.database.ContentObserver; import android.database.Cursor; import android.net.Uri; import android.os.Handler; import

  • Android实现发送短信验证码倒计时功能示例

    一.简介: 开发中在用户注册或找回密码之类的功能,经常会遇到获取短信验证码,获取验证码后需要等待1分钟倒计时,这段时间是不能再次发送短信请求的. 效果图: 二.实现步骤: 1.一个关键类:CountDownTimer(Android系统自带的倒计时功能类) public class CountDownTimerUtils extends CountDownTimer { private TextView mTextView; //显示倒计时的文字 /** * @param textView Th

  • Android如何集成极光短信验证

    先借助Android studio工具新建一个新的空项目. 步骤一(获取appkey) 1.在极光官网平台上新建短信应用(根据要求包名和应用名称填写好) 2.获取得到Jpush_AppKey 步骤二 (导入第三方库和so文件) 1.用Android studio打开应用 2.切换应用状态Android为Project状态 3.在libs文件夹下把对应的jar文件拷入  然后as libraries 步骤三(初始化以及调用) 1.新建Application初始化 public class MyAp

  • Android自动填充短信验证码功能(demo)

    项目需求: Android开发中用户登录往会用到短信验证的功能,如果让用户先查看短信,然后再回到界面填写验证码,用户体验不是很好,有时就需要实现验证码的自动填写功能. 做法: 我以前的做法是先创建一个广播接收器,接受短信变化的广播,收到广播时,再把验证码提取出来. 那时有用户测试反馈他的手机安装了其他一些短信应用或者手机本身限制了权限的情况下,这种方式可能起不了作用,即使把优先级设高,也不能保证不会被别的应用抢先. 以前用户卸载掉第三方软件后,就没再追究了. 现在发现可以通过监听短信数据库的方式

  • Android中用Bmob实现短信验证码功能的方法详解

    这篇文章主要介绍发送验证码和校验验证码的功能,用到一个第三方平台Bmob,那Bmob是什么呢?Bmob可以开发一个云存储的移动应用软件,他提供了大量的标准的API接口,根据需要接入相关服务,开发者可以更加专注于应用的开发,让产品交付更快速,验证码功能就是其中一个. 一.跟其他第三方一样,我们开发之前要做一些准备工作. 1.首先,去官网注册一个帐号:http://www.bmob.cn/: 2.然后就可以创建应用了:具体怎么做Bmob说得很清楚了(官方操作介绍),如果你不想看,我简单说一下:点击右

  • JAVA实现利用第三方平台发送短信验证码

    前段时间自己做的一个小项目中,涉及到用短信验证码登录.注册的问题,之前没涉及过这一块,看了别人的博客其实也是似懂非懂的,现在就将自己做的利用第三方短信平台来发送验证码这个功能记下来. 本文以注册为例,在SpringMVC+Spring+Mybatis框架的基础上完成该短信验证码功能. 发送短信验证码的原理是:随机生成一个6位数字,将该6位数字保存到session当中,客户端通过sessionid判断对应的session,用户输入的验证码再与session记录的验证码进行比较. 为了防止有广告嫌疑

  • php实现的IMEI限制的短信验证码发送类

    php实现的IMEI限制的短信验证码发送类 <?php class Api_Sms{ const EXPIRE_SEC = 1800; // 过期时间间隔 const RESEND_SEC = 60; // 重发时间间隔 const ONE_DAY_FREQ = 5; // 每日向同一个手机号发短信的次数 const ONE_DAY_IMEI_COUNT = 3; // 每日向同一个手机号发送短信的IMEI个数 public $error = array(); /** * 向指定手机号发送验证码

  • java短信验证码获取次数限制实例

    现在不管什么项目,用到短信验证功能,都会在程序上设计一个短信验证码的获取次数限制,这样主要是避免短信验证码接口被刷. 前一段正好做一个项目的用户短信验证码登录功能,就研究了以下,下面贴出来分享一下. 这里涉及到的短信接口,用的第三方短信接口-动力思维思维乐信的(http://www.lx598.com/),如果想了解短信接口接入,可以到他们官网,查看下短信接口API文档说明,参考下面的代码应该就能弄明白. 用户注册部分,主要代码如下: //主要js方法: //获取手机验证码: function

  • 基于 antd pro 的短信验证码登录功能(流程分析)

    概要 最近使用 antd pro 开发项目时遇到个新的需求, 就是在登录界面通过短信验证码来登录, 不使用之前的用户名密码之类登录方式. 这种方式虽然增加了额外的短信费用, 但是对于安全性确实提高了不少. antd 中并没有自带能够倒计时的按钮, 但是 antd pro 的 ProForm components 中倒是提供了针对短信验证码相关的组件. 组件说明可参见: https://procomponents.ant.design/components/form 整体流程 通过短信验证码登录的

  • vue_drf实现短信验证码

    目录 一.需求 1,需求 二.sdk参数配置 1,目录结构 三.代码实现 1,后端代码 2,前端代码 一.需求 1,需求 我们在做网站开发时,登录页面很多情况下是可以用手机号接收短信验证码,然后实现登录的,那我们今天就来做一做这一功能. 伪代码: 进入登录页面,点击短信登录 输入手机号码,点击获取验证码,后端在redis里保存验证码 用户把手机收到的验证码输入,点击登录,会把手机号和验证码发往后端,然后进行验证 要想发送短信,让用户收到短信,我们的借助一个容联云的接口,注册一个账号. 使用时需要

  • Android开发工程中集成mob短信验证码功能的方法

    一.前言 现在的app基本上都需要用到短信功能,注册时或者有消息通知时需要给用户发送一条短信,但是对于个人开发者来说,去买第三方的短信服务实在是有点奢侈,很好的是mob为我们提供了免费的短信验证码服务功能,我不是打广告,的确觉得这项服务很不错.那么下面就简单讲一下如何在自己的工程里集成mob的短信功能,其实整个流程并不复杂,只是个人觉得mob的官方文档有点小乱,官方Demo也有点小复杂,同时有一些细节地方容易被忽视,也会导致一些问题. PS:太喜欢mob的logo了. 二.实现过程 本篇只涉及A

  • Android用 Mob 实现发送短信验证码实例

    和室友参加的互联网大赛要做一个 APP,涉及到用户的登录注册,于是上网找了许多资料,其中有阿里大于,网易云等等,阿里大于的客服给我说他们不支持 Android,网易云还要拍手持身份证的照片,而且这两个都收费,还麻烦,于是找了一个既简单有免费的,叫做 Mob,官网如下 Mob 官网 官方文档看了很多,还是觉得写的不好,于是自己写一篇. 注册账号 在 Mob 官网右上角点击注册,依次填入信息,其中公司一栏可以随便填 添加应用 登录后,点击 SecurityCodeSDK - 立即使用,Mob 会提示

  • Android短信验证码(用的Mob短信验证)

    Android短信验证码功能,供大家参考,具体内容如下 1.参考资料 Mob网站:http://www.mob.com/ Mob在Github上的例子:https://github.com/MobClub/SMSSDK-for-Android 教程:Mob短信验证的具体使用 教程的源代码:  http://git.oschina.net/lizhanqi/MobSMSDemo Dialog教程:Android Dialog对话框 定时器教程:Android 实现定时器的四种方式 2.前期准备 (

  • Android获取和读取短信验证码的实现方法

    现如今,验证码在Android的客户端还是非常普遍的.通过手机账号和验证码直接去注册应用账户的信息.很多应用都以这种方式来完成注册.简单的介绍一下吧. Android获取短信验证码还是比较简单的,通过Mob官网提供的ShareSDK,调用其中内部的方法,就可以获取到短信的验证码了.提供一下Mob的官网地址.http://www.mob.com/#/在官网上注册相关的信息之后,下载相关的jar包和.so文件就可以实现获取短信验证码了(2.0之前的版本都需要下载jar包和 .so文件,而现在的2.2

随机推荐