Kullanım
Temel Örnek
import 'package:flutter/material.dart';
import 'package:trustchex_flutter_sdk/trustchex_flutter_sdk.dart';
class VerificationScreen extends StatelessWidget {
final String sessionId;
final String baseUrl;
const VerificationScreen({
super.key,
required this.sessionId,
required this.baseUrl,
});
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('Doğrulama')),
body: TrustchexView(
sessionId: sessionId,
baseUrl: baseUrl,
onCompleted: () {
Navigator.of(context).pop();
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Doğrulama başarıyla tamamlandı!'),
backgroundColor: Colors.green,
),
);
},
onError: (error) {
Navigator.of(context).pop();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Doğrulama hatası: $error'),
backgroundColor: Colors.red,
),
);
},
),
);
}
}
Özellikler
| Özellik | Tip | Zorunlu | Açıklama |
|---|---|---|---|
baseUrl | String | ✅ | API temel URL'si |
sessionId | String | ❌ | Oturum tanımlayıcısı |
branding | TrustchexBranding | ❌ | Renkler ve logo |
locale | TrustchexLocale | ❌ | Dil (en, tr) |
onCompleted | VoidCallback | ❌ | Başarı geri çağırma |
onError | Function(String) | ❌ | Hata geri çağırma |
Markalaşma ile
TrustchexView(
sessionId: sessionId,
baseUrl: 'https://api.trustchex.com',
locale: TrustchexLocale.tr,
branding: const TrustchexBranding(
logoUrl: 'https://trustchex.com/logo.png',
primaryColor: Color(0xFF1E40AF),
secondaryColor: Color(0xFFF8FAFC),
tertiaryColor: Color(0xFFDC2626),
),
onCompleted: () {
Navigator.of(context).pop();
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Doğrulama başarıyla tamamlandı!'),
backgroundColor: Colors.green,
),
);
},
onError: (error) {
Navigator.of(context).pop();
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(
content: Text('Doğrulama hatası: $error'),
backgroundColor: Colors.red,
),
);
},
)
Derin Bağlantılar (İsteğe Bağlı)
Derin bağlantı işlevselliği, bağımsız bir uygulama yayınlamak istiyorsanız isteğe bağlı bir özelliktir. SDK ile derin bağlantıları işlemek için uygulamanızda derin bağlantıları yapılandırmanız ve gelen URL'leri işlemek için gerekli kancaları kurmanız gerekir.
1. Derin Bağlantı Şemalarını Yapılandırın
iOS - Info.plist dosyasına ekleyin:
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleURLSchemes</key>
<array>
<string>yourapp</string>
</array>
</dict>
</array>
Android - AndroidManifest.xml dosyasına ekleyin:
<activity android:name=".MainActivity">
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="yourapp" />
</intent-filter>
</activity>
2. Derin Bağlantı İşlemeyi Kurun
Gelen URL'leri ayrıştırmak için DeeplinkUtils sınıfını içe aktarın ve kullanın:
import 'package:flutter/material.dart';
import 'package:trustchex_flutter_sdk/trustchex_flutter_sdk.dart';
import 'package:uni_links/uni_links.dart';
class App extends StatefulWidget {
const App({super.key});
@override
State<App> createState() => _AppState();
}
class _AppState extends State<App> {
String? baseUrl;
String? sessionId;
@override
void initState() {
super.initState();
_handleInitialLink();
_handleIncomingLinks();
}
Future<void> _handleInitialLink() async {
try {
final initialLink = await getInitialLink();
if (initialLink != null) {
_processDeepLink(initialLink);
}
} catch (e) {
print('Başlangıç bağlantısını işleme hatası: $e');
}
}
void _handleIncomingLinks() {
linkStream.listen((String? link) {
if (link != null) {
_processDeepLink(link);
}
});
}
void _processDeepLink(String url) {
final parsed = DeeplinkUtils.parseDeepLink(url);
if (parsed != null && parsed['sessionId'] != null) {
setState(() {
baseUrl = parsed['baseUrl'] ?? 'https://api.trustchex.com';
sessionId = parsed['sessionId'];
});
}
}
@override
Widget build(BuildContext context) {
return TrustchexView(
baseUrl: baseUrl,
sessionId: sessionId,
onCompleted: () => print('Tamamlandı'),
onError: (error) => print('Hata: $error'),
);
}
}
DeeplinkUtils.parseDeepLink fonksiyonu şu formattaki URL'leri ayrıştırır:
scheme://app-url/your-api.com/verification-session/session-123
Ve baseUrl ve sessionId anahtarları içeren bir map döndürür.
Derin bağlantıları işlemek için uni_links paketini eklemeniz gerekecek:
dependencies:
uni_links: ^0.5.1
Oturumlar
REST API kullanarak oturumlar oluşturun.
Oturum Erişim Yöntemleri
SDK, kullanıcıların doğrulama oturumlarına erişmeleri için birden fazla yol sağlar:
1. Derin Bağlantı (Önerilen)
Kullanıcılar, uygulamayı doğrudan oturumla açan bir bağlantıya tıklar:
// Derin bağlantı formatı: yourapp://app-url/your-api.com/verification-session/session-123
TrustchexView(
baseUrl: 'https://your-api.com',
sessionId: 'session-123', // Derin bağlantıdan
onCompleted: () => print('Tamamlandı'),
)
Avantajlar:
- Sorunsuz kullanıcı deneyimi - başlatmak için tek dokunuş
- Doğrulamaya doğrudan yönlendirme
- Manuel giriş gerekmez
- E-posta ve SMS kampanyaları için harika çalışır
2. QR Kod Tarama (Önerilen)
Kullanıcılar, oturum bilgilerini içeren bir QR kodunu tarar. SDK, karşılama ekranından erişilebilen yerleşik bir QR tarayıcı içerir.
Avantajlar:
- Hızlı ve temassız
- Yazma gerekmez
- Yüz yüze doğrulama için ideal
- SDK'da yerleşik tarayıcı dahil
3. Oturum Kodu Girişi (Alternatif)
Kullanıcılar manuel olarak 8 karakterli alfasayısal bir kod girebilir:
TrustchexView(
baseUrl: 'https://your-api.com',
// sessionId özelliği gerekmez - kullanıcı kodu manuel olarak girer
onCompleted: () => print('Tamamlandı'),
)
sessionId sağlanmadığında, SDK kullanıcıların şunları yapabileceği bir ekran görüntüler:
- 8 karakterli oturum kodunu girin
- QR kodunu tarayın
Kullanım Durumları:
- QR/derin bağlantı mevcut olmadığında yedek
- Telefon/sesli destek senaryoları
- QR yeteneği olmayan basılı medya
Oturum Oluşturma
REST API aracılığıyla bir oturum oluşturduğunuzda, yanıtta erişim yöntemlerini alacaksınız:
final response = await http.post(
Uri.parse('https://your-api.com/api/v1/verification-sessions'),
headers: {'x-api-key': 'YOUR_API_KEY'},
body: jsonEncode({
'workflowId': 'workflow-123',
'email': '[email protected]'
}),
);
final data = jsonDecode(response.body);
final deepLink = data['deepLink'];
final qrCodeLink = data['qrCodeLink'];
final sessionCode = data['sessionCode'];
// Doğrudan uygulama navigasyonu için deepLink kullanın (önerilen)
// QR kodu oluşturmak için qrCodeLink kullanın (önerilen)
// Alternatif erişim yöntemi olarak sessionCode kullanın