Flutter SDK
Plugin Flutter yang dibina di atas SDK iOS / Android asli, menyediakan satu CaptchalaClient Dart untuk kedua-dua platform mudah alih. Sokongan desktop Linux / macOS / Windows menerusi WebView terbenam juga tersedia.
Demo di GitHub
📦
Captcha-La/flutter-demo — contoh lengkap yang boleh dijalankan dengan semua langkah integrasi.
Pemasangan
Add the package from pub.dev:
yaml
# pubspec.yaml
dependencies:
captchala: ^1.3.2
http: ^1.2.0 # used by the demo's token-fetch helpersbash
flutter pub get
flutter run # auto-picks the foreground device
# or:
flutter run -d <device-id>For iOS / macOS the first build runs pod install automatically. Make sure ios/Podfile declares platform :ios, '13.0' (or higher).
Mula pantas
dart
import 'package:flutter/material.dart';
import 'package:captchala/captchala.dart';
class LoginScreen extends StatefulWidget {
const LoginScreen({super.key});
@override
State<LoginScreen> createState() => _LoginScreenState();
}
class _LoginScreenState extends State<LoginScreen> {
String _status = 'Tap to verify';
bool _verifying = false;
Future<void> _runVerify() async {
setState(() { _verifying = true; _status = 'Fetching server_token...'; });
// 1. Fetch a one-shot server_token from YOUR backend.
final initialToken = await fetchServerTokenFromYourBackend();
// 2. Build config from your business action.
final config = CaptchalaConfig(
appKey: 'YOUR_APP_KEY',
action: 'login', // login, register, pay, …
lang: 'en', // en, zh-CN, zh-TW, ja, ko, ms, vi, id
theme: 'light', // 'light' | 'dark'
enableVoice: true,
enableOfflineMode: true,
maskClosable: false,
serverToken: initialToken,
);
// 3. Initialize, register callbacks, then call verify().
final client = await CaptchalaClient.instance.initialize(config);
client.setCallbacks(
onSuccess: (r) async {
// Send r.passToken to YOUR backend for validation.
if (!mounted) return;
setState(() { _status = 'OK: ${r.passToken}'; _verifying = false; });
},
onFail: (e) { if (mounted) setState(() { _status = 'fail: ${e.code}'; _verifying = false; }); },
onError: (e) { if (mounted) setState(() { _status = 'error: ${e.code} ${e.message}'; _verifying = false; }); },
onClose: () { if (mounted && _verifying) setState(() { _status = 'closed'; _verifying = false; }); },
onServerTokenExpired: () => fetchServerTokenFromYourBackend(),
);
await client.verify();
}
@override
Widget build(BuildContext context) {
return Scaffold(
body: Center(
child: Column(mainAxisSize: MainAxisSize.min, children: [
ElevatedButton(
onPressed: _verifying ? null : _runVerify,
child: Text(_verifying ? 'Verifying...' : 'Verify with CAPTCHA'),
),
const SizedBox(height: 12),
Text(_status, style: const TextStyle(fontFamily: 'monospace')),
]),
),
);
}
}API utama
| Simbol | Tujuan |
|---|---|
CaptchalaClient.instance | Pengakses singleton untuk pemalam. |
CaptchalaConfig(...) | Rekod Dart biasa: appKey, action, lang, theme, enableVoice, enableOfflineMode, maskClosable, serverToken. |
await client.initialize(config) | Memohon konfigurasi. Mengembalikan instance klien yang sama untuk dirantai dengan setCallbacks. |
setCallbacks(...) | Mendaftarkan panggilan balik onSuccess, onFail, onError, onClose, onServerTokenExpired. |
await client.verify() | Membuka pandangan CAPTCHA asli (Android: Activity di atas Flutter; iOS: UIViewController). |
CaptchalaResult | Diberikan kepada onSuccess. Medan: passToken, challengeId, ttl, isOffline, isClientOnly. |
Pengesahan di pelayan
Hantar result.passToken (atau result.token) ke backend anda dan sahkan menerusi API CaptchaLa. Jangan dedahkan X-App-Secret dalam kod klien.
bash
POST https://apiv1.captcha.la/v1/validate
X-App-Key: YOUR_APP_KEY
X-App-Secret: YOUR_APP_SECRET
Content-Type: application/json
{ "pass_token": "<result.passToken>", "client_ip": "<end-user IP>" }Lihat Rujukan API untuk endpoint pengesahan penuh dan aliran X-App-Key / X-App-Secret.
Penyelesaian masalah
Pod install iOS gagal
Dalamios/Podfile, tetapkanplatform :ios, '13.0'(atau lebih tinggi). Jalankanflutter clean && flutter pub get && cd ios && pod installselepas menukar versi pemalam.minSdkVersionAndroid tidak sepadan
Naikkanandroid/app/build.gradlekepadaminSdkVersion 21. SDK Android asli enggan dikompil pada nilai lebih rendah.Panggilan balik berlaku pada isolate latar belakang
Sentiasa lindungisetStatedenganif (mounted)sebelum mengubah keadaan UI dalam panggilan balik. Demo membungkus setiap panggilan balik berkenaan dengan pemeriksaan ini.Sasaran desktop (Linux / Windows / macOS)
Linux memerlukan GTK3 + WebKitGTK + libcurl. Windows memerlukan Edge WebView2 Runtime (Win 10 1809+). Desktop macOS menggunakan WebView sistem secara automatik.
Keperluan
- Flutter 3.10+ / Dart 3.0+
- Android:
minSdkVersion 21(Android 5.0+) - iOS: 13.0+ with CocoaPods
- Desktop (optional): GTK3 + WebKitGTK on Linux, WebView2 Runtime on Windows 10 1809+