做客户端开发久了,总有一些烦心事来扰乱你,其中一个就是机器人注册。当然大部分App目前注册的时候都要提供短信验证码。但是这还是防不住一些专业的羊毛党,各种短信验证码平台用的飞起。那该怎么办呢?上验证码吧。验证码大家都熟悉从不可描述的12306到Google的reCAPTCHA,作用只有一个验证你是人,不是机器人。今天的主角就是Google reCAPTCHA。

Google reCAPTCHA

Google reCAPTCHA是Google 提供的一系列好用的服务中的一个,提供完善的人机验证方法。目前有V3和V2两个版本。V3还在Beta阶段,这样我们主要介绍V2。当然同时Google reCAPTCHA也是google用来做数据标记的方法,每天成千上万的图片被人工标记,为Google的Machine Learning系统提供好的帮助。经典的双赢策略。如果还没有体会过Google reCAPTCHA这里链接reCAPTCHA

如何使用Google reCAPTCHA

Google reCAPTCHA的使用十分简单,文档中描述的清楚。下边简单的介绍一些。最简单的方法就是自动的Render Google reCAPTCHA Wideget

<html><head><title>reCAPTCHA demo: Simple page</title><script src="https://www.google.com/recaptcha/api.js" async defer></script></head><body><form action="?" method="POST"><div class="g-recaptcha" data-sitekey="your_site_key" data-callback="yourCallbackFunction"></div><br/><input type="submit" value="Submit"></form></body>
</html>
复制代码

上面是个简单的html就实现了如何使用Google reCAPTCHA. 具体来说就是加载了google reCAPTCHA的JavaScript,然后定义一个class name是g-recaptcha div,这样以后reCAPTCHA的widget就会Render到它下边。当然你要在google reCAPTCHA上申请一个相应的site_key。so easy。好了当你用浏览器打开这个html的时候就可以看到Google reCAPTCHA widget被render出来了。同时定义了CallBallFunction,当验证成功时候,Google reCAPTCHA会调用这个callback,把取得的token告诉Application,那么Application就可以去进行验证了。

好了,Google reCAPTCHA如此好用的服务,在移动端可不可以使用呢?当然Google reCAPTCHA提供Android的API。但是如果我们Application是用React Native来写,是不是就不能使用了呢?当然我们有办法让它可以使用。

在React Native中是有Webview组件的,同时WebView组件和React Native之间可以通过postMessage来进行数据通信。那么已然这样,就可以通过WebView来加载一个HTML来Render Google reCAPTCHA Widget。同时通过PostMessage将 Google reCAPTCHA 返回的token,送给React Native。好了从原理上来讲是可以的,那么如何实现呢?还是看代码吧。

  import { WebView } from 'react-native';const generateTheWebViewContent = siteKey => {const htmlMarkup ='<!DOCTYPE html><html><head>' +'<script src="https://recaptcha.google.cn/recaptcha/api.js"></script>' +'var onDataCallback = function(response) { console.log(response); window.postMessage(response);  }; ' +'</head><body>' +'<div style="text-align: center"><div class="g-recaptcha" style="display: inline-block"' +'data-sitekey="' +siteKey + '" data-callback="onDataCallback" ';return htmlMarkup;};const RNReCaptcha = ({ onMessage, siteKey, style, url }) => (<WebVieworiginWhitelist={['*']}mixedContentMode={'always'}onMessage={onMessage}javaScriptEnabledinjectedJavaScript={patchPostMessageJsCode}automaticallyAdjustContentInsetsstyle={[{ backgroundColor: 'transparent', width: '100%' }, style]}source={{html: generateTheWebViewContent(siteKey),baseUrl: `${url}`,}}/>);
复制代码

上边这段代码就是一个最简单的实现,定义了一个RNReCaptcha的Component,其实就是一个WebView,在source里我们直接给出一段html,其实就是上边那个例子的html,这样一来render这个html就是把Google reCAPTCHA widget render了出来,同时通过postMessage将reCAPTCHA放回的结果送给React Native。好了,就是如此简单。

当然,为了方便其他人的使用,我已经publish一个npm package提供给大家使用。只要简单的

  yarn add rn-recaptchanpm install rn-recaptcha
复制代码

就ok了。这里是link rn-recaptcha

下边是具体的一个demo gif。 Happy Hacking :)

当React Native 遇到了Google reCAPTCHA相关推荐

  1. 如何在React Native和Firebase中设置Google登录

    Google sign-in is a great login feature to offer to your app's users. It makes it easier for them to ...

  2. 我在React Native中构建时获得的经验教训

    by Amanda Bullington 通过阿曼达·布林顿(Amanda Bullington) 我在React Native中构建时获得的经验教训 (Lessons I learned while ...

  3. 最火移动端跨平台方案盘点:React Native、weex、Flutter

    本文原文由"恋猫月亮"原创发布,原题为<移动端跨平台开发的深度解析>,本次重新整理后,为了优化阅读体验,内容略有改动,感谢原作者的无私分享. 1.前言 跨平台一直是老生 ...

  4. 初次接触React Native遇到的问题

    具体的搭建环境过程就不细说了,官方文档说的很详细,按照文档一步步操作就可以,需要注意下Android Studio安装和下载所需的SDK需要占用很大空间大约20G,注意磁盘空间是否充足. React ...

  5. react native与webview通信跳转页面报错:Cannot read property 'setNativeProps' of undefiend

    这个错误是我这边用react native和webview通信的时候,因为要从webview跳回到react native的页面,所以就从webview传过来一个路由字符串.本来以为可以通过navig ...

  6. 如何用 React Native 创建一个iOS APP?(二)

    我们书接上文<如何用 React Native 创建一个iOS APP?>,继续来讲如何用 React Native 创建一个iOS APP.接下来,我们会涉及到很多控件. 1 AppRe ...

  7. 在原有Android项目中快速集成React Native

    前言 对于现有的大多数项目来说都不是从头构建的,而要在原有项目的基础上引入React Native则肯定和用react-native init xxx创建工程不同.因此下面就来说下具体操作.不过在真正 ...

  8. Flutter介绍 - Flutter,H5,React Native之间的对比

    Flutter介绍 Flutter是Google推出的开源移动应用开发框架.开发者可以通过开发一套代码同时运行在iOS和Android平台. 它使用Dart语言进行开发,并且最终编译成各个平台的Nat ...

  9. android开发rn插件,在Android原生应用中嵌入React Native

    开发工具:Android Studio , WebStorm 参考链接:React Native官方中文文档 一.创建React Native项目 1.在本地React Native项目目录下,创建一 ...

最新文章

  1. javascript中replace使用方法总结
  2. python 做啥用-使用 Python 可以做什么?
  3. [NOIP1999] 普及组
  4. 这才是真正的Git——Git内部原理揭秘!
  5. windbg + sos 调试w3wp进程内存崩溃问题
  6. html align 属性,align-content
  7. java 线程亲缘性_第7章 线程调度、优先级和亲缘性(1)
  8. 基于GCN的推荐该怎么搞?
  9. 关于时间格式的解析问题
  10. 百度地图隐藏地名_官宣,鲁能公馆是“怪地名”,以后我只是秦新名邸
  11. 计算机辅助三维参数化设计是什么,滚子链轮的计算机辅助三维参数化设计.pdf...
  12. Access入门之索引查询
  13. 计算机中的标准差是哪个英语单词,标准差是什么意思
  14. 美国访学的一些心得体会与注意事项
  15. AKA传奇和亚嵌那些事
  16. precision与Recall
  17. 【Debug】UserWarning: size_average and reduce args will be deprecated, please use reduction=‘sum‘
  18. 怎么测试计算机运算能力,处理器运算能力测试_CPU_CPUCPU评测-中关村在线
  19. void*的用法【转】
  20. centos篇---安装mysql详细步骤

热门文章

  1. Linux+nfs配置开机启动,linux NFS配置:NFS开机自动启用及其原理
  2. php找不到dns地址,dns异常是什么意思
  3. oracle ora-12546,window10上登录Oracle时提示ORA-12546:Permission denied
  4. comsol matlab 循环,comsol保存为m文件,怎样在m文件里面加入for循环 - 仿真模拟 - 小木虫 - 学术 科研 互动社区...
  5. html dvi如何设置置顶不能空白位置,[html]关于html标签的一些总结
  6. python编程软件开发_Python编程对软件开发人员很重要?
  7. 用python画qq表情_用Python编写提取QQ表情的脚本
  8. python3编码命名规范_Python代码规范和命名规范
  9. python文字识别算法_Python图像处理之图片文字识别(OCR)
  10. 【每周CV论文推荐】 初学GAN必须要读的文章