Auf dieser Seite wird erläutert, wie Sie reCAPTCHA in Ihre iOS-App einbinden.
Aufgrund der Vielfalt der Mobilgeräte in Bezug auf Bildschirmgröße, Leistung und UIs der Apps ist die visuelle reCAPTCHA-Abfrage mit Kästchen (Ich bin kein Roboter) für iOS-Apps nicht verfügbar. Sie können stattdessen Ihre eigene abgestufte Durchsetzungsstrategie implementieren, z. B. einen MFA-Ablauf, um bei verdächtigem Traffic einen alternativen Ablauf für die Gutscheineinlösung bereitzustellen.
Das SDK nutzt Reflection und dynamischen Code, um das Erkennungssystem in bereits bereitgestellten Anwendungen oder SDKs zu aktualisieren und zu optimieren. Um Beeinträchtigungen der Anwendung zu vermeiden, sind die im System verfügbaren Klassen auf eine sorgfältig kontrollierte Liste beschränkt.
Hinweise
Legen Sie als SDK mindestens iOS 12 für Ihre App fest oder erstellen Sie eine neue mobile App.
reCAPTCHA-Schlüssel erstellen für die iOS-App-Plattform.
Alternativ können Sie die ID eines vorhandenen reCAPTCHA-Schlüssels für iOS kopieren. Führen Sie dazu einen der folgenden Schritte aus:
So kopieren Sie die ID eines vorhandenen Schlüssels aus der Google Cloud Console:
Rufen Sie die reCAPTCHA auf.
- Halten Sie in der Liste der reCAPTCHA-Schlüssel den Mauszeiger über den Schlüssel, den Sie kopieren möchten, und klicken Sie dann auf
- Verwenden Sie die Methode projects.keys.list, um die ID eines vorhandenen Schlüssels mithilfe der REST API zu kopieren.
- So kopieren Sie die ID eines vorhandenen Schlüssels mit der gcloud CLI: verwenden Sie den Befehl gcloud remarketingtcha keys list.
Sie haben ein GitHub-Konto.
Weitere Informationen finden Sie in den Datenschutzdetails von Apple.
iOS-Umgebung vorbereiten
So bereiten Sie die Entwicklungsumgebung vor:
Laden Sie die aktuelle Version von Xcode herunter und installieren Sie sie. Erstellen Sie dann eine neue, leere iOS-Einzelansichts-App.
Laden Sie das SDK mit einer der folgenden Methoden herunter:
CocoaPods
- Laden Sie CocoaPods herunter und installieren Sie es.
Erstellen Sie eine Podfile-Datei und fügen Sie ihr die folgenden Zeilen hinzu:
source "https://github.com/CocoaPods/Specs.git" target 'AppTarget' do # Podfiles must include use_frameworks! or # use_frameworks! :linkage => :static use_frameworks! pod "RecaptchaEnterprise", "18.6.0" ... end
Installieren Sie die erforderlichen Abhängigkeiten,. Dazu führen Sie
pod update
aus.
Swift-Paketmanager
- Wählen Sie in Xcode File > Add Packages aus und geben Sie
folgende URL in das Feld Suchen oder Paket-URL eingeben ein:
https://github.com/GoogleCloudPlatform/recaptcha-enterprise-mobile-sdk
Geben Sie im Dialogfeld Xcode die folgenden Details ein:
- GitHub-Nutzername.
- Ein persönliches Zugriffstoken, das Sie gemäß der Anleitung auf GitHub erstellt haben. Das Personal Access Token muss die Bereiche haben, die im Dialogfeld XCode Sign In aufgeführt sind.
Xcode installiert das SDK und die erforderlichen Abhängigkeiten.
Flutter
Eine ausführliche Anleitung zur Verwendung von reCAPTCHA über Flutter finden Sie in der Flutter-Dokumentation.
ReactNative
Eine ausführliche Anleitung zur Verwendung von reCAPTCHA über React Native finden Sie in der React Native-Dokumentation.
Direkter Download
Wenn Sie das SDK und seine Abhängigkeiten als xcframeworks herunterladen möchten, Laden Sie den Client herunter.
App konfigurieren
Sie können Ihre Apps in Swift oder Objective-C schreiben.
Fügen Sie die folgenden Dateien hinzu, um Ihre App zu konfigurieren:
Swift
Wenn Ihre App in Swift geschrieben ist, schließen Sie den folgenden Import ein:
import RecaptchaEnterprise
Objective-C
Wenn Ihre App in Objective-C geschrieben ist, erstellen Sie eine Dummy-Swift-Datei und fügen Sie den folgenden Import ein, damit Xcode die Swift-Bibliotheken finden und verknüpfen kann.
import Foundation
Damit der
Swift
-Code richtig verknüpft ist, gehen Sie zu Ziel > Build-Einstellungen > Swift-Standardbibliotheken immer einbetten und prüfen Sie, ob die Option aufYes
festgelegt ist.
reCAPTCHA in Ihre iOS-App einbinden
Führen Sie folgende Schritte in Xcode aus, um reCAPTCHA in Ihre iOS-App einzubinden:
Um das SDK mit dem reCAPTCHA-Schlüssel (KEY_ID) zu instanziieren, den Sie aktualisieren Sie die App mit dem folgenden Code:
Swift mit Storyboard
ViewController.swift
aktualisieren.import RecaptchaEnterprise class ViewController: UIViewController { var recaptchaClient: RecaptchaClient? override func viewDidLoad() { super.viewDidLoad() Task { do { self.recaptchaClient = try await Recaptcha.fetchClient(withSiteKey: "KEY_ID") } catch let error as RecaptchaError { print("RecaptchaClient creation error: \(String(describing: error.errorMessage)).") } } } }
Wenn die Mindestversion des Betriebssystems Ihrer Anwendung niedriger als 13 ist, verwenden Sie nachgestellte Schließung:
import RecaptchaEnterprise class ViewController: UIViewController { var recaptchaClient: RecaptchaClient? override func viewDidLoad() { super.viewDidLoad() Recaptcha.fetchClient(withSiteKey: "KEY_ID") { client, error in guard let client = client else { print("RecaptchaClient creation error: \(error).") return } self.recaptchaClient = client } } }
Swift mit SwiftUI
Erstellen Sie eine
ViewModel
-Klasse.import RecaptchaEnterprise @MainActor class ViewModel: ObservableObject { private var recaptchaClient: RecaptchaClient? init() { Task { do { self.recaptchaClient = try await Recaptcha.fetchClient(withSiteKey: "KEY_ID") } catch let error as RecaptchaError { print("RecaptchaClient creation error: \(String(describing: error.errorMessage)).") } } } }
Wenn die Mindest-Betriebssystemversion Ihrer Anwendung unter 13 liegt, verwenden Sie stattdessen einen abschließenden Abschluss:
import RecaptchaEnterprise class ViewController: UIViewController { var recaptchaClient: RecaptchaClient? override func viewDidLoad() { super.viewDidLoad() Recaptcha.fetchClient(withSiteKey: "KEY_ID") { client, error in guard let client = client else { print("RecaptchaClient creation error: \(error).") return } self.recaptchaClient = client } } }
Instantiieren Sie
ViewModel
inContentView.swift
.import SwiftUI import RecaptchaEnterprise struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Objective-C
ViewController.h
aktualisieren.#import <RecaptchaEnterprise/RecaptchaEnterprise.h> @interface ViewController : UIViewController @property (strong, atomic) RecaptchaClient *recaptchaClient; @end
ViewController.m
aktualisieren.@implementation ViewController [Recaptcha fetchClientWithSiteKey:@"KEY_ID" completion:^void(RecaptchaClient* recaptchaClient, NSError* error) { if (!recaptchaClient) { NSLog(@"%@", (RecaptchaError *)error.errorMessage); return; } self->_recaptchaClient = recaptchaClient; } ]; @end
Die Initialisierung des SDK kann einige Sekunden dauern. Um das Risiko zu minimieren Latenz haben, sollten Sie den Client so früh wie möglich initialisieren, z. B. während der
onCreate()
-Aufruf einer benutzerdefiniertenApplication
-Klasse. Im reCAPTCHA SDK sollten UI-Elemente nicht blockiert werden.Erstellen Sie eine Schaltfläche zum Aufrufen von reCAPTCHA und zum Auslösen von
execute()
.Swift mit Storyboard
- Erstellen Sie im Storyboard eine Schaltfläche.
- Erstelle eine Aktion in
ViewController
, die mit der Schaltfläche verknüpft ist, die du erstellt. Rufen Sie die Methode
execute()
auf und übergeben Sie eineLogin
-Aktion, um eine reCAPTCHA-Tokens mithilfe des folgenden Code-Snippets:guard let recaptchaClient = recaptchaClient else { print("RecaptchaClient creation failed.") return } Task { do { let token = try await recaptchaClient.execute(withAction: RecaptchaAction.login) print(token) } catch let error as RecaptchaError { print(error.errorMessage) } }
Wenn die Mindest-Betriebssystemversion Ihrer Anwendung unter 13 liegt, verwenden Sie stattdessen einen abschließenden Abschluss:
guard let recaptchaClient = recaptchaClient else { print("RecaptchaClient creation failed.") return } recaptchaClient.execute(withAction: RecaptchaAction.login) { token, error in if let token = token { print(token) } else { print(error) } }
Swift mit SwiftUI
Aktualisieren Sie ViewModel.swift mit dem Ausführungscode:
import RecaptchaEnterprise @MainActor class ViewModel: ObservableObject { func execute() { guard let recaptchaClient = self.recaptchaClient else { print("Client not initialized correctly.") return } Task { do { let token = try await recaptchaClient.execute(withAction: RecaptchaAction.login) print(token) } catch let error as RecaptchaError { print(error.errorMessage) } } } }
Wenn die Mindest-Betriebssystemversion Ihrer Anwendung unter 13 liegt, verwenden Sie stattdessen einen abschließenden Abschluss:
guard let recaptchaClient = recaptchaClient else { print("RecaptchaClient creation failed.") return } recaptchaClient.execute(withAction: RecaptchaAction.login) { token, error in if let token = token { print(token) } else { print(error) } }
ContentView.swift aktualisieren
import SwiftUI import RecaptchaEnterprise struct ContentView: View { @StateObject private var viewModel = ViewModel() var body: some View { Button { viewModel.execute() } label: { Text("Execute") }.padding() Spacer() } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } }
Objective-C
- Erstellen Sie im Storyboard eine Schaltfläche.
- Erstellen Sie in
ViewController
eine Aktion, die mit der von Ihnen erstellten Schaltfläche verknüpft ist. Rufen Sie die
execute()
-Methode auf und übergeben Sie eineLogin
-Aktion, um ein reCAPTCHA-Token zurückzugeben:if (!self->_recaptchaClient) { return; } [recaptchaClient execute:RecaptchaAction.login completion:^void(NSString* _Nullable token, NSError* _Nullable error) { if (!token) { NSLog (@"%@", (RecaptchaError *)error.errorMessage); return; } NSLog (@"%@", token); }];
Es kann einige Sekunden dauern, bis die
execute
API des Clients abgeschlossen ist, z. B. bei langsamen Netzwerkbedingungen oder wenn auf die Fertigstellung der Hintergrundinitialisierung gewartet wird. Dieexecute()
-Aufrufe dürfen kein UI-Ereignis blockieren, z. B. das Drücken einer Schaltfläche.Ihre Anwendung testen:
reCAPTCHA verwendet AppAttest von Apple. als Teil seiner Erkennungs-Engine. Wenn Sie keinen Testschlüssel verwenden möchten mit einem festen Wert für die lokale Entwicklung:
Fügen Sie Ihrer App in Xcode die Funktion App Attest hinzu.
Legen Sie in der Datei
.entitlements
Ihres Projekts die App Attest-Umgebung aufproduction
fest.
Bereinigen Sie Ihre Xcode-Build-Umgebung im Menü Product (Produkt). Klicken Sie auf Clean Build Folder (Ordner bereinigen).
Klicken Sie zum Ausführen der Anwendung im Menü Produkt auf Ausführen.
Klicken Sie in der geladenen Anwendung auf die Schaltfläche, die Sie erstellt haben. zuvor.
Beobachten Sie das Debug-Ausgabefenster für ein reCAPTCHA-Token (alphanumerischer String), das zurückgegeben wird, wenn die Integration erfolgreich ist.
Von der Methode „method API“ zur Methode „fetchClient“ migrieren
Die Methode fetchClient
gibt einen RecaptchaClient zurück.
die die Initialisierung über Netzwerkfehler wiederholt. Wenn die App nicht
Netzwerkzugriff nach dem Erstellen des Clients
versuche, versucht der Client immer wieder,
wird nach dem Erwerb eines Netzwerks erfolgreich initialisiert.
Wenn Sie execute(timeout)
aufrufen und der Client noch nicht bereit ist, versucht er es
zur Initialisierung vor, bevor ein Token oder ein RecaptchaErrorCode zurückgegeben werden.
Das folgende Beispiel zeigt, wie Sie von getClient
zu fetchClient
migrieren.
Swift mit Storyboard
// Migrate from getClient
func initializeWithGetClient() {
Task {
do {
self.recaptchaClient = try await Recaptcha.getClient(withSiteKey: "KEY_ID")
} catch let error as RecaptchaError {
print("RecaptchaClient creation error: \(String(describing: error.errorMessage)).")
}
}
}
// Migrate to fetchClient
func initializeWithFetchClient() {
Task {
do {
self.recaptchaClient = try await Recaptcha.fetchClient(withSiteKey: "KEY_ID")
} catch let error as RecaptchaError {
print("RecaptchaClient creation error: \(String(describing: error.errorMessage)).")
}
}
}
Wenn die Mindestversion des Betriebssystems Ihrer Anwendung niedriger als 13 ist, verwenden Sie nachgestellte Schließung:
// Migrate from getClient
override func initializeWithGetClient() {
Recaptcha.getClient(withSiteKey: "KEY_ID") { client, error in
guard let client = client else {
print("RecaptchaClient creation error: \(error).")
return
}
self.recaptchaClient = client
}
}
// Migrate to fetchClient
override func initializeWithFetchClient() {
Recaptcha.fetchClient(withSiteKey: "KEY_ID") { client, error in
guard let client = client else {
print("RecaptchaClient creation error: \(error).")
return
}
self.recaptchaClient = client
}
}
Swift mit SwiftUI
// Migrate from getClient
initializeWithGetClient() {
Task {
do {
self.recaptchaClient = try await Recaptcha.getClient(withSiteKey: "KEY_ID")
} catch let error as RecaptchaError {
print("RecaptchaClient creation error: \(String(describing: error.errorMessage)).")
}
}
}
// Migrate to fetchClient
initializeWithFetchClient() {
Task {
do {
self.recaptchaClient = try await Recaptcha.fetchClient(withSiteKey: "KEY_ID")
} catch let error as RecaptchaError {
print("RecaptchaClient creation error: \(String(describing: error.errorMessage)).")
}
}
}
Wenn die Mindest-Betriebssystemversion Ihrer Anwendung unter 13 liegt, verwenden Sie stattdessen einen abschließenden Abschluss:
// Migrate from getClient
func initializeWithGetClient() {
super.viewDidLoad()
Recaptcha.getClient(withSiteKey: "KEY_ID") { client, error in
guard let client = client else {
print("RecaptchaClient creation error: \(error).")
return
}
self.recaptchaClient = client
}
}
// Migrate to fetchClient
func initializeWithFetchClient() {
super.viewDidLoad()
Recaptcha.fetchClient(withSiteKey: "KEY_ID") { client, error in
guard let client = client else {
print("RecaptchaClient creation error: \(error).")
return
}
self.recaptchaClient = client
}
}
Objective-C
// Migrate from getClient
@implementation ViewController
[Recaptcha getClientWithSiteKey:@"KEY_ID"
completion:^void(RecaptchaClient* recaptchaClient, NSError* error) {
if (!recaptchaClient) {
NSLog(@"%@", (RecaptchaError *)error.errorMessage);
return;
}
self->_recaptchaClient = recaptchaClient;
}
];
@end
// Migrate to fetchClient
@implementation ViewController
[Recaptcha fetchClientWithSiteKey:@"KEY_ID"
completion:^void(RecaptchaClient* recaptchaClient, NSError* error) {
if (!recaptchaClient) {
NSLog(@"%@", (RecaptchaError *)error.errorMessage);
return;
}
self->_recaptchaClient = recaptchaClient;
}
];
@end
Zeitlimit für API-Aufrufe festlegen
Sie können einen Wert für die Zeitüberschreitung für die execute
APIs angeben, indem Sie die
withTimeout
-Property.
Swift
Zeitlimit beim Aufrufen von
execute
festlegen.Task { do { let token = try await recaptchaClient.execute( withAction: RecaptchaAction.login, withTimeout: 10000) print(token) } catch let error as RecaptchaError { print(error.errorMessage) } }
Wenn die Mindestversion des Betriebssystems Ihrer Anwendung unter 13 liegt, verwenden Sie stattdessen einen abschließenden Abschluss:
recaptchaClient.execute( withAction: RecaptchaAction.login, withTimeout: 10000 ) { token, error in if let token = token { print(token) } else { print(error) } }
Objective-C
Zeitlimit beim Aufrufen von
execute
festlegen.[recaptchaClient execute:RecaptchaAction.login witTimeout:10000.0 completion:^void(NSString* _Nullable token, NSError* _Nullable error) { if (!token) { NSLog (@"%@", (RecaptchaError *)error.errorMessage); return; } NSLog (@"%@", token); }];
Fehler verarbeiten
Wenn Ihre Anwendung nicht mit dem reCAPTCHA-Dienst kommunizieren kann kann dies daran liegen, dass in der API ein Fehler aufgetreten ist. Sie müssen Folgendes hinzufügen: Logik in Ihrer App implementieren, um mit solchen Fehlern umgehen zu können.
Weitere Informationen zur Risikominderung für häufige API-Fehler finden Sie unter RecaptchaErrorCode.
API-Referenz
Eine vollständige Referenz der reCAPTCHA API für iOS finden Sie unter
RecaptchaEnterprise
Nächste Schritte
Um das reCAPTCHA-Antworttoken zu bewerten, erstellen Sie eine Bewertung.