Mit den in Connect eingebetteten Komponenten loslegen
Erfahren Sie, wie Sie Dashboard-Funktionen in Ihre Website einbetten.
Verwenden Sie in Connect eingebettete Komponenten, um Ihrer Website Dashboard-Funktionen für verbundene Konten hinzuzufügen. Mit diesen Bibliotheken und der unterstützenden API können Sie Ihren Nutzerinnen und Nutzern direkt in Ihrem Dashboard und Ihren mobilen Anwendungen Zugriff auf Stripe-Produkte gewähren.
StripeConnect einrichtenClientseitigServerseitig
Stripe verwendet eine AccountSession, um Ihre Absicht zum Ausdruck zu bringen, den API -Zugriff auf Ihr verbundenes Konto zu delegieren.
Die AccountSessions API gibt ein Client-Geheimnis zurück, das es einer eingebetteten Komponente ermöglicht, so auf die Ressourcen eines verbundenen Kontos zuzugreifen. Dies geschieht so, als würden Sie die API-Aufrufe selbst ausführen.
AccountSession erstellen Server
Ihre App muss eine Anfrage an Ihren Server initiieren, um die Kontositzung zu erhalten. Derzeit wird nur das Konto-Onboarding unterstützt. Sie können einen neuen Endpoint auf Ihrem Server erstellen, der das Client-Geheimnis an die App zurückgibt:
API-Kontositzung erstellen
Die API zum Erstellen von Kontositzungen legt den Zugriff auf Komponenten und Funktionen für in Connect eingebettete Komponenten fest. Stripe erzwingt diese Parameter für alle Komponenten, die der Kontositzung entsprechen. Wenn Ihre App mehrere Nutzerrollen unterstützt, stellen Sie sicher, dass die Komponenten und Funktionen, die für diese Kontositzung aktiviert sind, der Rolle des aktuellen Nutzers/der aktuellen Nutzerin entsprechen. Beispielsweise können Sie die Rückerstattungsverwaltung nur für Administratoren Ihrer Website, nicht aber für andere Nutzer/innen aktivieren. Um sicherzustellen, dass der Zugriff auf Nutzerrollen erzwungen wird, müssen Sie die Nutzerrolle Ihrer Website den Kontositzungskomponenten zuordnen.
StripeConnect SDK installieren Client
Das Stripe iOS SDK ist Open Source, vollständig dokumentiert und kompatibel mit Apps, die iOS 15 oder höher unterstützen.
Notiz
Details zur aktuellen SDK-Version und zu vorherigen Versionen finden Sie auf der Seite Releases auf GitHub. Um bei Veröffentlichung einer neuen Version eine Benachrichtigung zu erhalten, achten Sie auf die Releases zum jeweiligen Repository.
Kamerazugriff einrichten Client-side
Das Stripe-Connect iOS-SDK erfordert Zugriff auf die Kamera des Geräts, um Identitätsdokumente zu erfassen. So aktivieren Sie Ihre App, um Zugriffsberechtigungen für die Kamera anzufordern:
- Öffnen Sie die Datei Info.plist Ihres Projekts in Xcode.
- Fügen Sie den Schlüssel
NSCameraUsageDescription
hinzu. - Fügen Sie einen Zeichenfolgenwert hinzu, der Ihren Nutzern/Nutzerinnen den Grund für den erforderlichen Kamerazugriff erläutert. Beispiel:
Diese App verwendet Ihre Kamera, um ein Foto von Ihren Identitätsnachweisen zu machen.
Weitere Informationen zum Anfordern des Kamerazugriffs finden Sie in der Dokumentation von Apple.
EmbeddedComponentManager initialisieren Client
Legen Sie Ihren veröffentlichbaren Schlüssel mithilfe von StripeAPI.
fest und instanziieren Sie einen EmbeddedComponentManager mit einem Closure, der ein Client-Geheimnis durch Aufrufen des neuen Endpoints abruft, den Sie auf Ihrem Server erstellt haben. Um eine Komponente zu erstellen, rufen Sie die entsprechende Erstellungsmethode für den EmbeddedComponentManager
auf, den Sie oben instanziiert haben. Dadurch wird ein Controller zurückgegeben, mit dem Sie ihn in der App anzeigen können.
@_spi(PrivateBetaConnect) import StripeConnect import UIKit class MyViewController: UIViewController { let errorView: UIView func fetchClientSecret() async -> String? { let url = URL(string: "https://{{YOUR_SERVER}}/account_session")! var request = URLRequest(url: url) request.httpMethod = "POST" do { // Fetch the AccountSession client secret let (data, _) = try await URLSession.shared.data(for: request) let json = try JSONSerialization.jsonObject(with: data) as? [String : Any] errorView.isHidden = true return json?["client_secret"] as? String } catch let error { // Handle errors on the client side here print("An error occurred: \(error)") errorView.isHidden = false return nil } } override func viewDidLoad() { super.viewDidLoad() // This is your test publishable API key. STPAPIClient.shared.publishableKey = "{{PUBLISHABLE_KEY}}", let embeddedComponentManager = EmbeddedComponentManager( fetchClientSecret: fetchClientSecret ) let controller = embeddedComponentManager.createAccountOnboardingController() controller.present(from: self) } }
Configure the Embedded Component ManagerClientseitig
Erscheinungsbild der in Connect eingebetteten Komponenten anpassen
Das Figma UI-Toolkit für eingebettete Komponenten enthält alle Komponenten, gängige Muster und eine Beispielanwendung. Sie können es verwenden, um eingebettete Nutzeroberflächen auf Ihrer Website zu visualisieren und zu gestalten.
Wir bieten eine Reihe von Optionen, um das Erscheinungsbild von in Connect eingebetteten Komponenten anzupassen. Diese Anpassungen betreffen Schaltflächen, Symbole und andere Akzentuierungen in unserem Designsystem.
Notwendige Popups
Einige Verhaltensweisen in eingebetteten Komponenten, wie z. B. die Nutzerauthentifizierung, müssen in einer authentifizierten WebView dargestellt werden. Sie können die eingebettete Komponente nicht anpassen, um solche Webansichten zu eliminieren.
Sie können diese Optionen mit EmbeddedComponentManager.Appearance festlegen, wenn Sie EmbeddedComponentManager
initialisieren.
func fetchClientSecret() async -> String? { let url = URL(string: "https://{{YOUR_SERVER}}/account_session")! var request = URLRequest(url: url) request.httpMethod = "POST" do { let (data, _) = try await URLSession.shared.data(for: request) let json = try JSONSerialization.jsonObject(with: data) as? [String : Any] return json?["client_secret"] as? String } catch { return nil } } // Specify custom fonts var customFonts: [CustomFontSource] = [] let myFont = UIFont(name: "My Font", size: 16)! let fontUrl = Bundle.main.url(forResource: "my-font-2", withExtension: "woff")! do { let customFontSource = try CustomFontSource(font: myFont, fileUrl: fontUrl) customFonts.append(customFontSource) } catch { print("Error loading custom font: \(error)") } // Customize appearance var appearance = EmbeddedComponentManager.Appearance() appearance.typography.fontfont.base = myFont appearance.typography.fontSizeBase = 16 // Unscaled font size appearance.colors.primary = UIColor { traitCollection in if traitCollection.userInterfaceStyle == .dark { UIColor(red: 0.455, green: 0.424, blue: 1.000, alpha: 1.0) } else { UIColor(red: 0.404, green: 0.365, blue: 1.000, alpha: 1.0) } } STPAPIClient.shared.publishableKey = "{{PUBLISHABLE_KEY}}", let embeddedComponentManager = EmbeddedComponentManager( appearance: appearance, fonts: customFonts, fetchClientSecret: fetchClientSecret )
Darstellungsfarben, die dynamische Anbieter verwenden, werden automatisch auf die in Connect eingebettete Komponente angewendet, wenn deren UITraitCollection aktualisiert wird, einschließlich Dunkelmodus und Kontrast für Barrierefreiheit. Das Standarderscheinungsbild enthält keine Farben im Dunkelmodus, daher müssen Sie im EmbeddedComponentManager
ein Erscheinungsbild mit dynamischen Farben angeben, um den Dunkelmodus in Ihrer App zu unterstützen.
Verwenden Sie beim Angeben von Schriftgrößen die nicht skalierte Schriftgröße, die für die Standardgrößenklasse des Geräts angezeigt wird. Die eingebettete Komponente skaliert die Schriftgröße automatisch basierend auf ihrer UITraitCollection.
Siehe die vollständige Liste der Erscheinungsbildoptionen auf iOS.
Nutzerdefinierte Schriftarten verwenden
Wenn Sie in Ihrer App nutzerdefinierte Schriftarten verwenden (z. B. aus .
- oder .
-Dateien, die in Ihre App-Binärdatei eingebettet sind), müssen Sie die Schriftartdateien in einer CustomFontSource angeben, die bei der Initialisierung von EmbeddedComponentManager
an das Argument fonts
übergeben wird. Dadurch erhalten die in Connect eingebetteten Komponenten Zugriff auf die Schriftdateien, um die Schriftarten ordnungsgemäß zu rendern.
Die in appearance
angegebenen Schriftarten müssen entweder eine unterstützte Systemschriftart oder eine CustomFontSource verwenden, die bei der Initialisierung an den EmbeddedComponentManager
übergeben wird, damit sie ordnungsgemäß gerendert werden.
In Connect eingebettete Komponenten nach der Initialisierung aktualisieren
Rufen Sie die update
-Methode auf, um das Erscheinungsbild der eingebetteten Komponenten nach der Initialisierung zu ändern:
var appearance = EmbeddedComponentManager.Appearance() appearance.colors.primary = UIColor.red manager.update(appearance: appearance)
Authentifizierung
Wir bieten eine Reihe von APIs zur Verwaltung von Kontositzungen und Nutzeranmeldedaten in den in Connect eingebetteten Komponenten.
Client-Geheimnis aktualisieren
Bei Sitzungen mit langer Laufzeit kann die Sitzung aus dem ursprünglich angegebenen Client-Geheimnis ablaufen. Wenn sie abläuft, verwenden wir automatisch fetchClientSecret
, um ein neues Client-Geheimnis abzurufen und die Sitzung zu aktualisieren. Sie müssen keine zusätzlichen Parameter übergeben.
func fetchClientSecret() async -> String? { var request = URLRequest(url: URL(string: "https://{{YOUR_SERVER}}/account_session")!) request.httpMethod = "POST" do { let (data, _) = try await URLSession.shared.data(for: request) let json = try JSONSerialization.jsonObject(with: data) as? [String : Any] return json?["client_secret"] as? String } catch let error { return nil } } STPAPIClient.shared.publishableKey = "{{PUBLISHABLE_KEY}}", let embeddedComponentManager = EmbeddedComponentManager( fetchClientSecret: fetchClientSecret )
Lokalisierung
Eingebettete Connect-Komponenten unterstützen die folgenden Gebietsschemen:
Sprache | Gebietsschema-Code |
---|---|
Bulgarisch (Bulgarien) | bg-BG |
Chinesisch (Vereinfacht) | zh-Hans |
Chinesisch (Traditionell – Hongkong) | zh-Hant-HK |
Chinesisch (Traditionell – Taiwan) | zh-Hant-TW |
Kroatisch (Kroatien) | hr-HR |
Tschechisch (Tschechien) | cs-CZ |
Dänisch (Dänemark) | da-DK |
Niederländisch (Niederlande) | nl-NL |
Englisch (Australien) | en-AU |
Englisch (Indien) | en-IN |
Englisch (Irland) | en-IE |
Englisch (Neuseeland) | en-NZ |
Englisch (Singapur) | en-SG |
Englisch (Vereinigtes Königreich) | en-GB |
Englisch (USA) | en-US |
Estnisch (Estland) | et-EE |
Philippinisch (Philippinen) | fil-PH |
Finnisch (Finnland) | fi-FI |
Französisch (Kanada) | fr-CA |
Französisch (Frankreich) | fr-FR |
Deutsch (Deutschland) | de-DE |
Griechisch (Griechenland) | el-GR |
Ungarisch (Ungarn) | hu-HU |
Indonesisch (Indonesien) | id-ID |
Italienisch (Italien) | it-IT |
Japanisch (Japan) | ja-JP |
Koreanisch (Südkorea) | ko-KR |
Lettisch (Lettland) | lv-LV |
Litauisch (Litauen) | lt-LT |
Malay (Malaysia) | ms-MY |
Maltesisch (Malta) | mt-MT |
Norwegisch, Bokmål (Norwegen) | nb-NO |
Polnisch (Polen) | pl-PL |
Portugiesisch (Brasilien) | pt-BR |
Portugiesisch (Portugal) | pt-PT |
Rumänisch (Rumänien) | ro-RO |
Slowakisch (Slowakei) | sk-SK |
Slowenisch (Slowenien) | sl-SI |
Spanisch (Argentinien) | es-AR |
Spanisch (Brasilien) | es-BR |
Spanisch (Lateinamerika) | es-419 |
Spanisch (Mexiko) | es-MX |
Spanisch (Spanien) | es-ES |
Schwedisch (Schweden) | sv-SE |
Thai (Thailand) | th-TH |
Türkisch (Türkiye) | tr-TR |
Vietnamesisch (Vietnam) | vi-VN |
Nutzerauthentifizierung in eingebetteten Connect-Komponenten
Für eingebettete Connect-Komponenten ist in der Regel keine Nutzerauthentifizierung erforderlich. In einigen Fällen müssen sich die verbundenen Konten im Rahmen der eingebetteten Connect-Komponenten vor dem Zugriff auf die Komponente mit ihrem Stripe-Konto anmelden, um die erforderlichen Funktionen bereitzustellen (so müssen z. B. den juristischen Personen im Fall einer Komponente des Konto-Onboardings Informationen zugeschrieben werden). Andere Komponenten erfordern möglicherweise nach der ersten Anzeige eine Authentifizierung innerhalb der Komponente.
Eine Authentifizierung ist für verbundene Konten erforderlich, bei denen Stripe dafür verantwortlich ist, aktualisierte Informationen zu erfassen, wenn sich die Anforderungen ändern. Bei verbundenen Konten, bei denen Sie dafür verantwortlich sind, aktualisierte Informationen zu erfassen, wenn Anforderungen fällig sind oder sich ändern (wie z. B. Custom-Konten), wird die Stripe-Authentifizierung durch die disable_stripe_user_authentication-Kontositzungsfunktion gesteuert. Wir empfehlen die Implementierung von 2FA oder gleichwertigen Sicherheitsmaßnahmen als Best Practice. Bei Kontokonfigurationen, die diese Funktion unterstützen (wie z. B. Custom), übernehmen Sie die Haftung für verbundene Konten, wenn diese Negativsalden nicht zurückzahlen können.
Komponenten, die eine Authentifizierung erfordern
Verbundenen Konten wird eine authentifizierte WebView innerhalb Ihrer Anwendung angezeigt. Das verbundene Konto muss authentifiziert werden, bevor der/die Nutzer seinen/ihren Workflow innerhalb der WebView fortsetzen kann.
Der von Stripe gehostete Authentifizierungsablauf zeigt den Namen, die Farbe und das Symbol Ihrer Marke an, wie in Ihren Connect-Einstellungen festgelegt. Das individuelle Erscheinungsbild und die Schriftarten aus dem Embedded Component Manager werden erst nach Abschluss der Authentifizierung verwendet.
Die folgende Komponente erfordert die Authentifizierung verbundener Konten in bestimmten Szenarien:
Umgang mit Fehlern beim Laden
Wenn eine Komponente nicht geladen wird, können Sie auf den Fehler reagieren, indem Sie die Delegatmethode didFailLoadWithError
der Komponente implementieren. Je nach Fehlerursache kann die Methode didFailLoadWithError
mehrmals aufgerufen werden. Jede Logik, die durch einen didFailLoadWithError
ausgelöst wird, muss idempotent sein.
// All components emit load errors. This example uses AccountOnboarding. // All components support didFailLoadWithError. class MyViewController: UIViewController, AccountOnboardingControllerDelegate { func openAccountOnboarding() { let accountOnboardingController = embeddedComponentManager.createAccountOnboardingController(); accountOnboardingController.delegate = self accountOnboardingController.present(from: self) } // MARK: - AccountOnboardingControllerDelegate func accountOnboarding(_ accountOnboarding: AccountOnboardingController, didFailLoadWithError error: Error) { print("Account onboarding failed to load with error '\(error)'") } }