关键词:
【中文标题】如何在 Flutter 应用中实现 reCaptcha【英文标题】:How to implement reCaptcha into a flutter app 【发布时间】:2020-06-25 18:30:40 【问题描述】:我正在尝试在我的颤振应用程序中实现 reCaptcha 功能,但在验证码注册中,我需要提供一个我没有用于移动应用程序的域。我浏览了几本指导如何将 reCaptcha 实施到移动应用程序中的指南,但这些指南使用包名称而不是域注册了他们的 reCaptcha。在 Flutter 应用或 2020 年的任何移动应用中实施 reCaptcha 的正确方法是什么?
【问题讨论】:
【参考方案1】:你可以使用这个插件,flutter_recaptcha。
对于域,我遇到了同样的问题。我首先发现我需要使用here 中的“我不是机器人”复选框选项,并且我必须检查github repository 才能找到此信息,“!!!记得将此域添加到reCaptcha 设置:recaptcha-flutter-plugin.firebaseapp.com,”,它解释了它。
在主页上没有看到它后,我有点迷茫,但现在它是有道理的。希望对您有所帮助。
编辑
我在试用后注意到一些东西,我想提一下。该插件不提供用于验证用户服务器端的验证码响应,因此它看起来并不是很有用。但是,它是一个简单的插件,因此可以将其用作示例。我认为,这些步骤是创建一个带有验证码的网页。与插件一样,使用 webview 打开页面,然后捕获表单的发布输出和提交表单的用户的 IP 地址 using something like this,然后 send it to flutter,然后使用该信息提交您的请求,并使用Google library 验证验证码。
说明
我刚刚完成了这个,我找到了一个很好的方法。 首先,创建一个 html 页面,如下所示:
<html>
<head>
<title>reCAPTCHA</title>
<script src="https://www.google.com/recaptcha/api.js" async defer></script>
</head>
<body style='background-color: aqua;'>
<div style='height: 60px;'></div>
<form action="?" method="POST">
<div class="g-recaptcha"
data-sitekey="YOUR-SITE-KEY"
data-callback="captchaCallback"></div>
</form>
<script>
function captchaCallback(response)
//console.log(response);
if(typeof Captcha!=="undefined")
Captcha.postMessage(response);
</script>
</body>
</html>
然后,将其托管在您的域上,例如 example.com/captcha。
然后,创建一个flutter Widget,如下所示:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:webview_flutter/webview_flutter.dart';
class Captcha extends StatefulWidget
Function callback;
Captcha(this.callback);
@override
State<StatefulWidget> createState()
return CaptchaState();
class CaptchaState extends State<Captcha>
WebViewController webViewController;
@override
initState()
super.initState();
@override
Widget build(BuildContext context)
return Center(
child: WebView(
initialUrl: "https://example.com/captcha.html",
javascriptMode: JavascriptMode.unrestricted,
javascriptChannels: Set.from([
JavascriptChannel(
name: 'Captcha',
onMessageReceived: (JavascriptMessage message)
//This is where you receive message from
//javascript code and handle in Flutter/Dart
//like here, the message is just being printed
//in Run/LogCat window of android studio
//print(message.message);
widget.callback(message.message);
Navigator.of(context).pop();
)
]),
onWebViewCreated: (WebViewController w)
webViewController = w;
,
)
);
确保您在https://www.google.com/recaptcha 注册了验证码(点击右上角的“管理控制台”)。
然后,您已经构建了前端。要调用验证码,只需运行:
Navigator.of(context).push(
MaterialPageRoute(
builder: (context)
return Captcha((String code)=>print("Code returned: "+code));
),
);
你可以使用任何你想要的回调,像这样:
class GenericState extends State<Generic>
void methodWithCaptcha(String captchaCode)
// Do something with captchaCode
@override
Widget build(BuildContext context)
return Center(child:FlatButton(
child: Text("Click here!"),
onPressed: ()
Navigator.of(context).push(
MaterialPageRoute(
builder: (context)
return Captcha(methodWithCaptcha);
),
);
服务器端,你可以按照here的说明进行操作(我按照“直接下载”和“使用”部分进行操作)。我发现对于用法,我可以简单地使用代码:
$recaptcha = new \ReCaptcha\ReCaptcha($secret);
$resp = $recaptcha->verify($gRecaptchaResponse, $remoteIp);
if ($resp->isSuccess())
// Verified!
else
$errors = $resp->getErrorCodes();
没有必要像示例中那样使用setExpectedHostname
。
之后,一切正常!我认为这是目前在 Flutter 中实现 Google reCaptcha V2 的最佳方式(适用于 iOS 和 Android)。
【讨论】:
抱歉提出一个旧线程,但是否可以将此网页嵌入到应用程序中,这意味着不需要托管验证码页面?【参考方案2】:如果你在找Flutter WEB,可以试试g_recaptcha_v3包
注意:
仅支持 reCAPTCHA V3,不支持 V2 仅适用于 Flutter Web,其他平台不支持【讨论】:
如何在 Flutter 应用中实现支付?
】如何在Flutter应用中实现支付?【英文标题】:HowtoimplementpaymentsinaFlutterapp?【发布时间】:2019-08-0412:35:30【问题描述】:我正在使用Flutter构建我的第一个应用程序。该应用程序旨在让用户能够相互买卖产品,我想设置功能以通... 查看详情
如何在 Flutter 中实现应用栏操作文本而不是操作图标?
】如何在Flutter中实现应用栏操作文本而不是操作图标?【英文标题】:HowtoimplementappbaractiontextinsteadofactioniconinFlutter?【发布时间】:2018-12-1314:14:33【问题描述】:我正在尝试在颤振应用程序中实现appbar。我可以添加一个关闭应用... 查看详情
如何在 Flutter 中实现音频流应用和安全存储
】如何在Flutter中实现音频流应用和安全存储【英文标题】:Howtoimplementaudiostreamingappandsecurestorageinflutter【发布时间】:2019-11-0603:57:38【问题描述】:我现在要使用颤振https://play.google.com/store/apps/details?id=deezer.android.app构建像deezer... 查看详情
如何在 Flutter Dart 中实现插件架构
】如何在FlutterDart中实现插件架构【英文标题】:HowtoimplementthePluginArchitectureinFlutterDart【发布时间】:2020-02-0914:24:37【问题描述】:我想在FlutterDart中实现一个插件架构。流程如下:1.用户下载应用。2.用户从我们的网站加载插件... 查看详情
如何在flutter中实现包月? (新方法)
】如何在flutter中实现包月?(新方法)【英文标题】:Howtoimplementsubscriptionmonthlyinflutter?(Newmethods)【发布时间】:2021-08-1020:12:58【问题描述】:我正在尝试使用应用内购买包实现对我的Flutter应用的每月订阅。经过数小时的搜索,... 查看详情
如何在 Flutter Web 中实现 Stripe 支付?
】如何在FlutterWeb中实现Stripe支付?【英文标题】:HowtoimplementStripePaymentsinFlutterWeb?【发布时间】:2021-01-3122:52:29【问题描述】:我正在尝试在我的Web应用(Flutter)中实现StripePayments,但我在https://pub.dev/中找不到任何包来满足我的愿... 查看详情
如何在 Flutter 中实现“磨砂玻璃”效果?
】如何在Flutter中实现“磨砂玻璃”效果?【英文标题】:HowdoIdothe"frostedglass"effectinFlutter?【发布时间】:2017-09-1822:29:18【问题描述】:我正在编写一个Flutter应用程序,我想使用/实现iOS上常见的“磨砂玻璃”效果。我该怎... 查看详情
如何在 Flutter 中实现 App Tracking Transparency
】如何在Flutter中实现AppTrackingTransparency【英文标题】:HowtoimplementAppTrackingTransparencyinFlutter【发布时间】:2021-10-0717:25:17【问题描述】:我向苹果提交了我的应用程序,但它被拒绝了,因为我没有添加应用程序透明度。到目前为... 查看详情
如何在 Flutter 中实现类似视频流和视频滚动的 Tiktok
】如何在Flutter中实现类似视频流和视频滚动的Tiktok【英文标题】:HowtoimplementTiktoklikevideostreamingandvideoscrollinginFlutter【发布时间】:2020-04-0510:25:16【问题描述】:我正在尝试使用Flutter复制TikTok应用程序UI。谁能建议我如何在颤振... 查看详情
我们如何使用 ArCore 在 Flutter 中实现类似 snapchat 的过滤器
】我们如何使用ArCore在Flutter中实现类似snapchat的过滤器【英文标题】:HowcanweimplementsnapchatlikefiltersinflutterusingArCore【发布时间】:2020-10-2500:30:37【问题描述】:我正在尝试使用颤振构建一个增强现实应用程序,我开始知道有两个... 查看详情
如何在 Flutter 中实现 SingleLine 水平 CalendarView
】如何在Flutter中实现SingleLine水平CalendarView【英文标题】:HowtoachieveSingleLineHorizontalCalendarViewinFlutter【发布时间】:2020-02-0209:29:56【问题描述】:我是Flutter的新手。如何在颤动中实现SingleLine水平滚动CalendarView和日期选择。请找到... 查看详情
如何在 Flutter 中实现 3D Secure(通过 Visa / MasterCard SecureCode 验证)?
】如何在Flutter中实现3DSecure(通过Visa/MasterCardSecureCode验证)?【英文标题】:Howtoimplement3DSecure(VerifiedbyVisa/MasterCardSecureCode)inFlutter?【发布时间】:2019-12-2321:30:56【问题描述】:现有的3DS实施是这样的,在结帐和付款阶段,它涉... 查看详情
如何在 Flutter 中实现 CheckBox?
】如何在Flutter中实现CheckBox?【英文标题】:HowtoimplementCheckBoxinFlutter?【发布时间】:2019-03-1917:20:07【问题描述】:这里我提到了我的复选框代码。我是Flutter的新手,所以我必须实现它以实现记住我的功能。代码:Container(padding:... 查看详情
如何在 Flutter 的消息中实现用户提及?
】如何在Flutter的消息中实现用户提及?【英文标题】:HowtoimplementusermentionsinmessagesonFlutter?【发布时间】:2019-12-2105:02:35【问题描述】:我需要在消息中实现用户提及,就像在Flutter上的流行信使中一样。当我单击输入字段中的某... 查看详情
如何在 Flutter 中实现 GooglePlay TabBar?
】如何在Flutter中实现GooglePlayTabBar?【英文标题】:HowtoimplementGooglePlayTabBarinflutter?【发布时间】:2020-06-1415:26:18【问题描述】:在大家开始发布一些初学者UI教程视频的链接之前,请知道这是一个已知问题,我正在寻找解决方法... 查看详情
如何在 Flutter 中实现这种排序查询?
】如何在Flutter中实现这种排序查询?【英文标题】:HowtoachievethiskindofsortingqueryinFlutter?【发布时间】:2021-09-0112:24:53【问题描述】:IM试图通过下图实现外观,数据来自本地数据库,使用sqflite。我有db"model"类和用于int的db类,查... 查看详情
如何在flutter中实现agora视频通话邀请
】如何在flutter中实现agora视频通话邀请【英文标题】:howtoimplementagoravideocallinvitationinflutter【发布时间】:2021-10-0309:07:42【问题描述】:我是Flutter新手我想知道使用agoraSDK实现视频通话邀请的最佳方式双方。//joingchannelStringtoken=aw... 查看详情
Flutter 按住闪屏 3 秒。如何在 Flutter 中实现闪屏?
】Flutter按住闪屏3秒。如何在Flutter中实现闪屏?【英文标题】:Flutterholdsplashscreenfor3Seconds.HowtoimplementsplashscreeninFlutter?【发布时间】:2018-10-1206:36:29【问题描述】:如何在颤动中显示启动屏幕3秒,然后转到下一个我的登录屏幕。... 查看详情