`
郭丶小川
  • 浏览: 34027 次
社区版块
存档分类
最新评论

IOS自动获取短信验证码

    博客分类:
  • IOS
阅读更多


1.自定义监听类

/**
* 短信**,用于自动填充验证码
*/
public class SMSContentObserver extends ContentObserver {

    public final String SMS_URI_INBOX = "content://sms/inbox";//收信箱
    private Activity activity = null;
    private String smsContent = "";//验证码
    private EditText verifyText = null;//验证码编辑框
    private String SMS_ADDRESS_PRNUMBER = "10690329013589";//短息发送提供商
    private String smsID = "";
    //短信观察者 收到一条短信时 onchange方法会执行两次,所以比较短信id,如果一致则不处理
    public SMSContentObserver(Activity activity, Handler handler, EditText verifyText) {
        super(handler);
        this.activity = activity;
        this.verifyText = verifyText;
    }

    @Override
    public void onChange(boolean selfChange) {
        super.onChange(selfChange);
        Cursor cursor = null;// 光标
        // 读取收件箱中指定号码的短信
        cursor = activity.getContentResolver().query(Uri.parse(SMS_URI_INBOX),
            new String[]{"_id", "address", "body", "read"}, //要读取的属性
            "address=? and read=?", //查询条件是什么
            new String[]{SMS_ADDRESS_PRNUMBER, "0"},//查询条件赋值
            "date desc");//排序

        if (cursor != null) {
            cursor.moveToFirst();
            if (cursor.moveToFirst()) {
                //比较和上次接收到短信的ID是否相等
                if (!smsID.equals(cursor.getString(cursor.getColumnIndex("_id")))) {
                    String smsbody = cursor.getString(cursor.getColumnIndex("body"));
                    //用正则表达式匹配验证码
                    Pattern pattern = Pattern.compile("[0-9]{6}");
                    Matcher matcher = pattern.matcher(smsbody);
                    if (matcher.find()) {//匹配到6位的验证码
                        smsContent = matcher.group();
                        if (verifyText != null && null != smsContent && !"".equals(smsContent)) {
                            verifyText.requestFocus();//获取焦点
                            verifyText.setText(smsContent);//设置文本
                            verifyText.setSelection(smsContent.length());//设置光标位置
                        }
                    }
                    smsID = cursor.getString(cursor.getColumnIndex("_id"));
                }
            }
        }

    }

}



2.在登录页面事件化监听类

//实例化短信**
SMSContentObserver mObserver = new SMSContentObserver(getActivity(), new Handler(), mEt_auth_code);
// 注册短信变化监听
mContext.getContentResolver().registerContentObserver(Uri.parse("content://sms/"), true, mObserver);


3.声明读取短信权限

<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<uses-permission android:name="android.permission.WRITE_SMS" />



4.为了防止内存泄漏,记得注销监听

@Override
public void onDestroy() {
super.onDestroy();
   //注销短信监听     
   mContext.getContentResolver().unregisterContentObserver(mObserver);
}



小结:
去短信库获取短信比较不容易被拦截
分享到:
评论

相关推荐

    自动获取短信验证码并填充

    在IT行业中,自动获取短信验证码并填充是一项常见的自动化任务,特别是在移动应用或网站的身份验证环节。这个过程涉及到了几个关键的技术点,包括短信监听、数据解析以及自动化控制。以下是对这些知识点的详细解释:...

    自动获取短信验证码并填充以及倒计时

    在IT行业中,自动获取短信验证码并填充以及倒计时是一项常见的功能,特别是在用户注册、登录、支付等场景中。这个功能极大地提升了用户体验,减少了手动输入验证码的繁琐步骤,同时也为应用的安全性提供了一定保障。...

    ios-利用sharesdk获取短信验证码.zip

    * @brief 获取验证码(Get verification code) * * @param method 获取验证码的方法(The method of getting verificationCode) * @param phoneNumber 电话号码(The phone number) * @param zone 区域号,...

    ios-短信验证码输入框.zip

    6. **定时器集成**:为了模拟短信验证码的有效时间,codeView可能集成了NSTimer,当用户获取验证码后开始倒计时,并显示剩余时间。 7. **事件响应**:codeView会监听用户的输入事件,当用户完成验证码输入后,会...

    android.mac.ios平台的自动返回短信验证码接口java

    本文将详细解析"android.mac.ios平台的自动返回短信验证码接口java"这一主题,涵盖核心概念、设计原理以及实现方法。 首先,短信验证码是一种常见的身份验证手段,用于确保用户在进行敏感操作时是合法且知情的。它...

    iOS 获取验证码 demo

    - 如果应用需要读取短信以自动填充验证码,需要请求`Privacy - SMS Usage Description`权限。 11. **状态管理**: - 使用MVVM或MVC架构时,可以创建一个`ViewModel`来管理验证码请求的状态,方便UI与模型之间的...

    Flutter插件提供短信代码自动填充支持_Java_Dart_下载.zip

    短信验证码的自动填充主要依赖于Android的`SMS Retriever API`,这是一个官方提供的接口,允许应用安全地获取短信验证码而无需请求读取短信的权限。在Android端,我们需要创建一个BroadcastReceiver来监听接收到的...

    ios-验证码倒计时.zip

    在iOS开发中,验证码倒计时是一个常见的功能,通常用于用户获取短信验证码后限制再次发送的时间,以防止滥用。这个“ios-验证码倒计时.zip”文件中的代码可能实现了一个基于GCD(Grand Central Dispatch)的倒计时器...

    短信验证码自动填充

    短信验证码自动填充是一种提高用户体验和效率的技术,尤其在移动应用和网页登录、注册或安全验证过程中常见。自动填充功能能够帮助用户快速输入接收到的验证码,减少手动输入的错误和时间消耗。 首先,我们要理解...

    Android实现短信验证码自动填写功能

    本实例为大家分享了Android实现短信验证码自动填写功能,供大家参考,具体内容如下 实现思路很简单: 1、在需要输入验证码的Activity代码注册监听短信的广播 2、拦截短信,获取其中的验证码 3、回写到EditText ...

    SMSDemo.zip

    《短信验证码自动填写功能的实现》 在移动应用开发中,短信验证码已经成为验证用户身份、保障账户安全的重要手段。本文将深入探讨如何实现一个自动填写短信验证码的功能,以提升用户体验,减少用户操作步骤。 首先...

    ios-随机验证码,智能补空.zip

    2. **显示与发送**:将生成的验证码通过网络发送到客户端,如显示在界面上或者通过短信、邮件发送给用户。 3. **用户输入**:用户需要在指定时间内正确输入接收到的验证码。 4. **验证比对**:用户输入后,服务器会...

    iOS 输入验证码或密码,自动下一位的实例

    3. **获取短信验证码倒计时的实现**:当用户请求获取短信验证码后,后台会发送一条包含验证码的短信。前端可以启动倒计时,并在倒计时结束后允许用户提交验证码。 这些技术都是提高用户体验和安全性的重要组成部分...

    iOS开发实现随机图片验证码封装

    在iOS应用开发中,图片验证码(CAPTCHA)是一种常见的安全机制,用于防止自动脚本或机器人非法获取敏感信息,如短信验证码。本文将详细介绍如何在iOS项目中实现一个自定义的图片验证码组件。 首先,我们需要一个...

    短信验证码:iOS和安卓端系统的设计方案差异和最优选择.docx

    而安卓系统虽然可以自动读取短信填充验证码,但需要获取短信授权,这可能引发隐私和安全问题。大多数应用并不请求此授权,仅少数如百度贴吧会这样做。 iOS系统的一键填充功能依赖于系统级别的集成,确保了统一和...

    Swift免费短信验证码实现及动态倒计时功能

    在iOS开发中,有时我们需要集成短信验证码功能来增强用户账户的安全性。本篇文章将详细介绍如何在Swift项目中实现这一功能,以及如何添加动态倒计时显示。我们将使用Mob提供的免费短信验证码SDK,它允许开发者轻松地...

    用C语言写的手机短信收发程序代码

    5. **设备API和权限**:在手机上运行的应用需要获取相应的权限才能访问短信服务,这通常涉及到与操作系统(如Android或iOS)的API交互。 6. **错误处理和调试**:编写这样的程序需要考虑各种可能出现的问题,如网络...

    SMSCodeButton:可用作短信验证码的倒计时 Button

    总的来说,SMSCodeButton为iOS开发者提供了一种简洁、高效的方式来实现短信验证码的倒计时功能,减少了代码重复,提高了开发效率,同时也优化了用户体验。通过深入理解和使用这个开源组件,我们可以更好地构建安全、...

    手机短信控件

    短信验证码是手机短信控件的一个关键应用场景,用于用户身份验证。当用户注册、登录或执行敏感操作时,系统会向用户手机发送一个一次性密码,用户输入该密码以证明他们拥有相应的手机号码。这增强了账户的安全性,...

    Android黑科技之读取用户短信+修改系统短信数据库

    Android应用能读取用户手机上的短信,相信已经不是什么新鲜事,比如我们收到的短信验证码,一些app马上就能自动获取并填上验证码,省去我们手动填写验证码。原理就是通过Android的ContentProvider组件间接访问系统的...

Global site tag (gtag.js) - Google Analytics