Buy Button über Mobile SDK aktivieren
Warum ist das wichtig?

Nach den jüngsten Änderungen der Apple-Richtlinien in bestimmten Regionen ist es Entwicklern nun gestattet, App-Nutzer auf externe Websites weiterzuleiten, um Zahlungen für virtuelle Artikel entgegenzunehmen.
Sie können sichtbare Schaltflächen, Banner, Nachrichten und andere Call-to-Actions hinzufügen. Über diese gelangen die Nutzer mit einem einzigen Klick von Ihrem Spiel zu einem sicheren, browserbasierten Checkout (Ihrem Web Shop oder Ihrem Zahlungsportal), ohne gegen die Regeln von Apple zu verstoßen oder Sanktionen zu riskieren.
Buy Button über das Mobile SDK zu integrieren, ist ideal, wenn Sie von Ihrem Spiel aus auf eine vorgefertigte, artikelspezifische Zahlungsseite verlinken und mehr Kontrolle über den Bezahlvorgang behalten möchten, insbesondere:
- den Kaufvorgang flexibel anpassen möchten – von der Transaktionslogik bis zur visuellen Darstellung.
- Unterstützung für eine serverlosen Einrichtung möchten – das SDK kann ohne Backend betrieben werden: Käufe und Artikelgewährung werden clientseitig abgewickelt, ohne dass Webhooks erforderlich sind.
- eine Vielzahl von Zahlungsmethoden anbieten wollen, darunter One-Click-Zahlungen über Apple Pay, für einen schnellen und vertrauten Bezahlvorgang auf Mobilgeräten.
Die Integration über das Xsolla Mobile SDK eignet sich auch, wenn Sie einen benutzerdefinierten Web Shop verwenden, der nicht auf Site Builder basiert, und Pay Station direkt in Ihr Spiel integrieren möchten.
Die schnellste Low-Code-Integration ist die auf dem Web Shop basierende Integration.
So funktioniert's
In diesem Leitfaden erfahren Sie, wie Sie Xsolla für die Verarbeitung von Zahlungen mit dem Xsolla Mobile SDK unter Einhaltung der Anforderungen von Apple integrieren.
Anforderungen von Apple
In-App WebViews für externe Käufe sind nicht erlaubt. Zahlungen müssen über Safari oder einen anderen Standardbrowser erfolgen.
Externe Kauflinks sind im Moment nur für iOS-Anwendungen im US-amerikanischen Store erlaubt. Beachten Sie, dass sich die App- Bewertungsrichtlinien von Apple auf den US-amerikanischen Store beziehen, nicht auf den Standort des Nutzers.
Ablauf für den Nutzer:
- Der Nutzer öffnet die Website im iOS.
- Der Nutzer klickt neben dem gewünschten Artikel auf die Kaufen-Schaltfläche.
- Die Anwendung öffnet Safari (oder einen anderen Standardbrowser) mit einem Link zur Pay Station, die den Zahlungstoken enthält. Das SDK übernimmt die Autorisierung und die Artikelauswahl.
- Der Nutzer wird automatisch autorisiert. Pay Station öffnet sich für den jeweiligen Artikel.
- Der Nutzer wählt eine Zahlungsmethode und schließt den Kauf ab.
- Pay Station leitet die Nutzer zur Spielanwendung.
- Die Anwendung erhält die Kaufbestätigung über einen Webhook.
Schnellstart
Im Kundenportal registrieren und ein Projekt erstellen
Das Kundenportal ist das wichtigste Tool für die Konfiguration der Xsolla-Funktionen und auch für die Arbeit mit Analytics und Transaktionen unerlässlich.
Wechseln Sie zum Kundenportal, und erstellen Sie ein Konto, um sich zu registrieren. Um ein Projekt zu erstellen, klicken Sie auf Projekt erstellen in der Seitenleiste und geben Sie die erforderlichen Informationen ein. Sie können die Einstellungen später ändern.

Während dees Integrationsprozesses benötigen Sie die Projekt-ID. Diese wird im Kundenportal neben dem Projektnamen angezeigt.

Xsolla Login einrichten
- Navigieren Sie in Ihrem Kundenportal zum Menüpunkt Spieler > Login.
- Klicken Sie auf Login-Projekt erstellen.
- Wählen Sie Standard-Login-Projekt, und klicken Sie auf Erstellen und einrichten. Anschließend werden Sie zur Navigationsseite mit den Login-Projekteinstellungen weitergeleitet.
- Wählen Sie unter Anmeldemethoden eine beliebige Option und klicken Sie auf Konfigurieren.
- Klicken Sie im oberen Einstellungsblock auf Login API Integration.
- Stellen Sie den Schalter Login mit Geräte-ID auf Ein.

- Klicken Sie auf Änderungen speichern.
Während des Integrationsprozesses benötigen Sie Ihre Login-ID. Klicken Sie dazu auf den Namen Ihres Login-Projekts im Breadcrumb-Pfad, um zur Login-Projektseite zurückzukehren. Klicken Sie anschließend neben dem Namen des Login-Projekts auf ID kopieren.

In-App-Kaufprodukte (virtuelle Gegenstände) konfigurieren
Wählen Sie eine der folgenden Methoden, um Ihren IAP-SKU-Produktkatalog einzurichten.
- Artikel importieren - landen Sie eine JSON-Datei hoch und fügen Sie so im Handumdrehen Ihren Katalog zum Kundenportal hinzu.
- API-Aufrufe verwenden - ideal für automatisierte oder umfangreiche Aktualisierungen.
SDK installieren
Das Xsolla Mobile SDK wird als XCFramework
mit dem Namen XsollaMobileSDK.xcframework
zur Verfügung gestellt.
So installieren Sie es manuell in Ihrem Projekt in Xcode:
- Öffnen Sie Ihr Projekt in XCode.
- Wählen Sie Ihr Anwendungsziel und navigieren Sie zur Registerkarte General.
- Platzieren Sie per Drag & Drop die Datei
XsollaMobileSDK.xcframework
im Abschnitt Frameworks, Libraries, and Embedded Content. - In der Drop-Down-Liste neben dem Framework muss Embed & Sign aktiviert sein.

SDK konfigurieren
Für die SDK-Konfiguration benötigen Sie folgende IDs aus dem Kundenportal:
- Projekt-ID. Diese wird im Kundenportal neben dem Namen Ihres Projekts angezeigt.
- Login-ID. Diese finden Sie im Kundenportal unter Spieler > Login > Dashboard > Ihr Login-Projekt; klicken Sie neben dem Namen des Login-Projekts auf ID kopieren.
Als Ausgangspunkt können Beispiel-IDs verwendet werden.
settings.openExternalBrowser = YES;
(Objective-C) oder settings.openExternalBrowser = true;
(Swift) zu Ihrer SDK-Konfiguration hinzu, um die US-Anforderungen bei der Umleitung von Nutzern auf das Internet zu erfüllen.obj-c
- obj-c
- swift
1#import <XsollaMobileSDK/StoreKitWrapper.h>
2
3SKPaymentSettings* settings = [[SKPaymentSettings alloc] initWithProjectId: 77640
4 loginProjectId:@"026201e3-7e40-11ea-a85b-42010aa80004"
5 platform: SKPaymentPlatformStandalone
6 paystationUIThemeId: SKPaystationThemeDark
7 paystationUISize: SKPaystationSizeMedium];
8
9settings.useSandbox = YES;
10settings.enablePayments = YES;
11settings.openExternalBrowser = YES;
12
13SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];
14[queue startWithSettings: settings];
15[queue addTransactionObserver: self];
1import XsollaMobileSDK
2
3let settings = SKPaymentSettings(projectId: 77640,
4 loginProjectId: "026201e3-7e40-11ea-a85b-42010aa80004",
5 platform: .standalone)
6
7settings.useSandbox = true;
8settings.enablePayments = true;
9settings.openExternalBrowser = true;
10
11SKPaymentQueue.default().start(settings)
12SKPaymentQueue.default().add(self)
Konfigurieren Sie Deep Linking, um Nutzer nach dem Kauf zur Spiele-App zurückzubringen
Legen Sie das URL-Shema für das Ziel fest:
- Wählen Sie Ihr Projekt im Projektnavigator aus.
- Ziel auswählen.
- Öffnen Sie die Registerkarte Info.
- Klicken Sie auf die Schaltfläche ➕ im Abschnitt URL Types.
- Stellen Sie das URL Scheme auf
$(PRODUCT_BUNDLE_IDENTIFIER)
ein.

SDK initialisieren
Nach der Konfiguration muss das Xsolla Mobile SDK initialisiert und mit den Xsolla-Diensten verbunden werden. Fügen Sie diese Logik in den Initialisierungsablauf Ihrer App ein, z. B. innerhalb der Methode didFinishLaunchingWithOptions von AppDelegate.
obj-c
- obj-c
- swift
1SKPaymentQueue* queue = [SKPaymentQueue defaultQueue];
2[queue startWithSettings: settings]; // settings from the previous step
3
4// conform your class to SKPaymentTransactionObserver and implement its method
5@interface YourClass (SKPaymentTransactionObserver) <SKPaymentTransactionObserver>
6@end
7
8@implementation YourClass (SKPaymentTransactionObserver)
9
10- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
11 for(SKPaymentTransaction *transaction in transactions) {
12 switch (transaction.transactionState) {
13 case SKPaymentTransactionStateFailed:
14 // purchase failed, present an error
15 break;
16 case SKPaymentTransactionStatePurchased:
17 // award the player with the purchase of the SKU - transaction.payment.productIdentifier
18 break;
19 default: break;
20 }
21 }
22}
23
24@end
1SKPaymentQueue.default().start(settings)
2SKPaymentQueue.default().add(self)
3
4// conform your class to SKPaymentTransactionObserver and implement its method
5extension YourClass: SKPaymentTransactionObserver {
6 func paymentQueue(_: SKPaymentQueue, updatedTransactions: [SKPaymentTransaction]) {
7 for transaction in updatedTransactions {
8 switch transaction.transactionState {
9 case .failed:
10 // purchase failed, present an error
11 case .purchased:
12 // award the player with the purchase of the SKU - transaction.payment.productIdentifier
13 default:
14 break
15 }
16 }
17 }
18}
Nach dem Start von SKPaymentQueue
und dem Hinzufügen eines Transaktionsbeobachters kann die Anwendung SKU-Informationen wie folgt anfordern:
obj-c
- obj-c
- swift
1NSSet *skus = [NSSet setWithArray:@[@"your_sku1", @"your_sku2"]];
2SKProductsRequest* req = [[SKProductsRequest alloc] initWithProductIdentifiers:skus];
3
4req.delegate = self;
5[req start];
6
7// conform your class to SKProductsRequestDelegate and implement its method
8@interface YourClass (SKProductsRequestDelegate) <SKProductsRequestDelegate>
9@end
10
11@implementation YourClass (SKProductsRequestDelegate)
12
13- (void)productsRequest:(SKProductsRequest *)request didReceiveResponse:(SKProductsResponse *)response {
14 // save loaded products somewhere
15 self.products = response.products
16}
17
18@end
1let skus: Set<String> = ["your_sku1", "your_sku2"]
2let req = SKProductsRequest(productIdentifiers: skus)
3
4req.delegate = self
5req.start()
6
7// conform your class to SKProductsRequestDelegate and implement its method
8extension YourClass: SKProductsRequestDelegate {
9 func productsRequest(_ request: SKProductsRequest, didReceive response: SKProductsResponse) {
10 // save loaded products somewhere
11 self.products = response.products
12 }
13}
Kauf tätigen
Der Kaufablauf ist ein mehrstufiger Prozess, der die Zahlungserfassung, die Kaufvalidierung und den Verbrauch umfasst.
Kaufablauf starten
Um eine Zahlung zu erstellen und einen Kauf einzuleiten, verwenden Sie die zuvor erworbene SKProduct
-Info:
obj-c
- obj-c
- swift
1SKProduct *product = ...; // previously fetched product
2SKPayment *payment = [SKPayment paymentWithProduct:product];
3[[SKPaymentQueue defaultQueue] addPayment:payment];
1let product = ... // previously fetched product
2let payment = SKPayment(product: product)
3SKPaymentQueue.default().add(payment)
Kauf validieren
Jeder Kauf sollte vor der Lieferung an den Endnutzer validiert werden, um unautorisierte Käufe zu verhindern.
Der wirksamste Weg, die Gültigkeit eines Kaufs zu gewährleisten, ist die Verwendung von Server-zu-Server-Aufrufen (S2S), wodurch der Kunde aus dem Entscheidungsprozess ausgenommen wird und somit die Entstehung einer potenziellen Sicherheitslücke vermieden wird.
Der S2S-Validierungsansatz folgt in der Regel diesen Schritten:
- Der Anwendungs-Client sendet die Bestell-ID des Kaufs an das Backend. Diese ID wird abgerufen, wenn die Zahlungstransaktion auf der Client-Seite abgeschlossen wird (normalerweise über einen Transaktionsrückruf). Siehe Kaufablauf starten, um zu erfahren, wie Käufe eingeleitet werden.
- Der Server empfängt die Bestell-ID und validiert ihre Authentizität mit Hilfe des Webhook-Ansatzes (ausgelöst durch Xsolla-Dienste), sobald der Kauf die Server-Benachrichtigung abgeschlossen hat. Dies ermöglicht eine asynchrone Empfangsbearbeitung, ohne auf Polling zurückgreifen zu müssen, und kann im Hintergrund durchgeführt werden (das Ergebnis wird zwischengespeichert), noch bevor die Anfrage eines Clients eingeht. Weitere Informationen zu Webhooks finden Sie im Abschnitt Webhook einrichten.
Gekauften Inhalt konsumieren
Der allerletzte Schritt in der Kaufablaufkette ist die Vergabe der Käufe an den Nutzer und die Kennzeichnung dieser Käufe als „vergeben“. Dieser Vorgang wird auch als „Kaufverbrauch“ bezeichnet.
Das Kaufergebnis wird durch den Rückruf paymentQueue:updatedTransactions:
im Objective-C oder paymentQueue(_:updatedTransactions:)
in SWIFT geliefert.
obj-c
- obj-c
- swift
1- (void)paymentQueue:(SKPaymentQueue *)queue updatedTransactions:(NSArray *)transactions {
2 for(SKPaymentTransaction *transaction in transactions) {
3 switch (transaction.transactionState) {
4 case SKPaymentTransactionStateFailed:
5 // Always acknowledge transaction and finish it
6 [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
7 break;
8 case SKPaymentTransactionStatePurchased:
9 // here you can save the purchase and award it to the user
10 // Always acknowledge transaction and finish it after it was saved
11 [[SKPaymentQueue defaultQueue] finishTransaction:transaction];
12 break;
13 default: break;
14 }
15 }
16}
1func paymentQueue(_: SKPaymentQueue, updatedTransactions: [SKPaymentTransaction]) {
2 for transaction in updatedTransactions {
3 switch transaction.transactionState {
4 case .failed:
5 // Always acknowledge transaction and finish it
6 SKPaymentQueue.default().finishTransaction(transaction)
7 case .purchased:
8 // here you can save the purchase and award it to the user
9 // Always acknowledge transaction and finish it after it was saved
10 SKPaymentQueue.default().finishTransaction(transaction)
11 default:
12 break
13 }
14 }
15}
Webhooks einrichten
Webhooks sind Benachrichtigungen über Ereignisse, die im System auftreten. Wenn ein bestimmtes Ereignis eintritt, sendet Xsolla eine HTTP-Anfrage, die Ereignisdaten an Ihren Spieleserver übermittelt. Diese Webhooks sind wichtig für den Spiel-Client und/oder Server, um Benachrichtigungen über erfolgreiche und erfolglose Zahlungen und Benutzerauthentifizierungsversuche zu erhalten.
Webhooks aktivieren
- Navigieren Sie im Kundenportal zum Menüpunkt Projekteinstellungen > Webhooks.
- Geben Sie im Feld Webhook-Server die Server-URL an, unter der Sie die Webhooks im Format
https://example.com
empfangen wollen. Sie können auch eine URL aus einem Webhook-Testtool angeben. - Ein geheimer Schlüssel zum Signieren von Projekt-Webhooks wird standardmäßig generiert. Wenn Sie einen neuen geheimen Schlüssel generieren möchten, klicken Sie auf das Aktualisieren-Symbol.
- Klicken Sie auf Webhooks aktivieren.

Webhooks testen
Auf der Registerkarte Payments und Store können Sie folgende Webhooks testen:
Benutzervalidierung (“notification_type”:“user_validation”):
- curl
1curl -v 'https://your.hostname/your/uri' \
2-X POST \
3-H 'Accept: application/json' \
4-H 'Content-Type: application/json' \
5-H 'Authorization: Signature 13342703ccaca5064ad33ba451d800c5e823db8f' \
6-d '{
7 "notification_type":"user_validation",
8 "settings": {
9 "project_id": 18404,
10 "merchant_id": 2340
11 },
12 "user": {
13 "ip": "127.0.0.1",
14 "phone": "18777976552",
15 "email": "email@example.com",
16 "id": "1234567",
17 "name": "John Smith",
18 "country": "US"
19 }
20}'
Erfolgreiche Bezahlung der Bestellung (“notification_type”: “order_paid”):
- curl
1curl -v 'https://your.hostname/your/uri' \
2-X POST \
3-H 'Accept: application/json' \
4-H 'Content-Type: application/json' \
5-H 'Authorization: Signature d09695066c52c1b8bdae92f2d6eb59f5b5f89843' \
6-d '{
7 "notification_type": "order_paid",
8 "items": [
9 {
10 "sku": "com.xsolla.item_1",
11 "type": "virtual_good",
12 "is_pre_order": false,
13 "quantity": 3,
14 "amount": "1000",
15 "promotions": [
16 {
17 "amount_without_discount": "6000",
18 "amount_with_discount": "5000",
19 "sequence": 1
20 },
21 {
22 "amount_without_discount": "5000",
23 "amount_with_discount": "4000",
24 "sequence": 2
25 }
26 ],
27 "custom_attributes":
28 {
29 "purchased": 0,
30 "attr": "value"
31 }
32 },
33 {
34 "sku": "com.xsolla.item_new_1",
35 "type": "bundle",
36 "is_pre_order": false,
37 "quantity": 1,
38 "amount": "1000",
39 "promotions": []
40 },
41 {
42 "sku": "com.xsolla.gold_1",
43 "type": "virtual_currency",
44 "is_pre_order": false,
45 "quantity": 1500,
46 "amount": null,
47 "promotions": []
48 }
49 ],
50 "order": {
51 "id": 1,
52 "mode": "default",
53 "currency_type": "virtual",
54 "currency": "sku_currency",
55 "amount": "2000",
56 "status": "paid",
57 "platform": "xsolla",
58 "comment": null,
59 "invoice_id": "1",
60 "promotions": [
61 {
62 "amount_without_discount": "4000",
63 "amount_with_discount": "2000",
64 "sequence": 1
65 }
66 ],
67 "promocodes": [
68 {
69 "code": "promocode_some_code",
70 "external_id": "promocode_sku"
71 }
72 ],
73 "coupons": [
74 {
75 "code": "WINTER2021",
76 "external_id": "coupon_sku"
77 }
78 ]
79 },
80 "user": {
81 "external_id": "id_xsolla_login_1",
82 "email": "gc_user@xsolla.com"
83 },
84 "billing": {
85 "notification_type": "payment",
86 "settings": {
87 "project_id": 18404,
88 "merchant_id": 2340
89 },
90 "purchase": {
91 "subscription": {
92 "plan_id": "b5dac9c8",
93 "subscription_id": "10",
94 "product_id": "Demo Product",
95 "date_create": "2014-09-22T19:25:25+04:00",
96 "date_next_charge": "2014-10-22T19:25:25+04:00",
97 "currency": "USD",
98 "amount": 9.99
99 },
100 "total": {
101 "currency": "USD",
102 "amount": 200
103 },
104 "promotions": [{
105 "technical_name": "Demo Promotion",
106 "id": 853
107 }],
108 "coupon": {
109 "coupon_code": "ICvj45S4FUOyy",
110 "campaign_code": "1507"
111 }
112 },
113 "transaction": {
114 "id": 1,
115 "external_id": 1,
116 "payment_date": "2014-09-24T20:38:16+04:00",
117 "payment_method": 1,
118 "payment_method_name": "PayPal",
119 "payment_method_order_id": 1234567890123456789,
120 "dry_run": 1,
121 "agreement": 1
122 },
123 "payment_details": {
124 "payment": {
125 "currency": "USD",
126 "amount": 230
127 },
128 "vat": {
129 "currency": "USD",
130 "amount": 0,
131 "percent": 20
132 },
133 "sales_tax": {
134 "currency": "USD",
135 "amount": 0,
136 "percent": 0
137 },
138 "direct_wht": {
139 "currency": "USD",
140 "amount": 0,
141 "percent": 0
142 },
143 "payout_currency_rate": "1",
144 "payout": {
145 "currency": "USD",
146 "amount": 200
147 },
148 "country_wht": {
149 "currency": "USD",
150 "amount": 2,
151 "percent": 10
152 },
153 "user_acquisition_fee": {
154 "currency": "USD",
155 "amount": 2,
156 "percent": 1
157 },
158 "xsolla_fee": {
159 "currency": "USD",
160 "amount": 10
161 },
162 "payment_method_fee": {
163 "currency": "USD",
164 "amount": 20
165 },
166 "repatriation_commission": {
167 "currency": "USD",
168 "amount": 10
169 }
170 }
171 }
172 ,
173 "custom_parameters": {
174 "parameter1": "value1",
175 "parameter2": "value2"
176 }
177}'
In der Testumgebung testen
Dieser Abschnitt enthält Codeschnipsel und Beispiele, die zeigen, wie die Testumgebung zum Testen von Zahlungen, zum Aktivieren der detaillierten Protokollierung und für andere verwandte Aufgaben konfiguriert wird.
Testumgebung aktivieren
obj-c
- obj-c
- swift
1SKPaymentSettings* settings = ...;
2
3settings.useSandbox = YES;
1let settings = SKPaymentSettings(...)
2
3settings.useSandbox = true
Zusätzliche Protokollierung aktivieren
obj-c
- obj-c
- swift
1SKPaymentSettings* settings = ...;
2
3settings.logLevel = SKLogLevelDebug;
1let settings = SKPaymentSettings(...)
2
3settings.logLevel = .debug
Testkarten
Eine Liste der Karten, mit denen Zahlungen in der Testumgebung simuliert werden können, finden Sie im Abschnitt Testkartenliste.
LIVE schalten
- Unterzeichnen Sie die Lizenzvereinbarung. Navigieren Sie dazu im Kundenportal zu Vereinbarungen und Steuern > Vereinbarungen. Füllen Sie dort das Vereinbarungsformular aus.
- Setzen Sie
sandbox
auffalse
im SDK-Konfigurationscode.
obj-c
- obj-c
- swift
1SKPaymentSettings* settings = ...;
2
3settings.useSandbox = NO;
4settings.logLevel = SKLogLevelError;
1let settings = SKPaymentSettings(...)
2
3settings.useSandbox = false
4settings.logLevel = .error
So erkennen Sie die Startseite des iOS Store
Verwenden Sie folgende Codeschnipsel, um die aktuelle Startseite des iOS-Store zu ermitteln und die SDK-Funktionalität auf der Grundlage der Region anzupassen.
obj-c
- obj-c
- swift
1[SKPaymentQueue loadCurrentStorefrontCountryCodeWithCompletion:^(NSString* _Nullable countryCode) {
2 settings.enablePayments = countryCode && [countryCode isEqualToString:@"USA"];
3
4 [[SKPaymentQueue defaultQueue] startWithSettings:settings];
5}];
1SKPaymentQueue.loadCurrentStorefrontCountryCode { countryCode in
2 settings.enablePayments = countryCode == "USA"
3
4 SKPaymentQueue.default().start(settings)
5}
Die Methode loadCurrentStorefrontCountryCode
ruft asynchron den aus drei Buchstaben bestehenden Ländercode der aktuellen Startseite des Store ab. Sie können diese Informationen verwenden, um SDK-Funktionen für bestimmte Regionen zu aktivieren oder zu deaktivieren.
Alternativ können Sie auch direkt ursprüngliche Storefront des Apple Store verwenden, wie unten dargestellt:
SKStorefront
zu implementieren, da es ein synchrones Laden durchführt, das den Hauptthread blockiert. Dies kann zu einem Einfrieren der Benutzeroberfläche und einer Verschlechterung der Benutzerfreundlichkeit führen, wie in der offiziellen Dokumentation von Apple beschrieben.- swift
1let storefront = await Storefront.current
2let countryCode = storefront?.countryCode
3
4settings.enablePayments = countryCode == "USA"
5
6SKPaymentQueue.default().start(settings)
So funktioniert's
In diesem Leitfaden erfahren Sie, wie Sie Xsolla für die Zahlungsverarbeitung mit der Xsolla-API unter Einhaltung der Vorgaben von Apple integrieren.
Anforderungen von Apple
In-App WebViews für externe Käufe sind nicht erlaubt. Zahlungen müssen über Safari oder einen anderen Standardbrowser erfolgen.
Externe Kauflinks sind im Moment nur für iOS-Anwendungen im US-amerikanischen Store erlaubt. Beachten Sie, dass sich die App- Bewertungsrichtlinien von Apple auf den US-amerikanischen Store beziehen, nicht auf den Standort des Nutzers.
Ablauf für den Nutzer:
- Der Nutzer öffnet die Website im iOS.
- Der Nutzer klickt neben dem gewünschten Artikel auf die Kaufen-Schaltfläche.
- Die Anwendung öffnet Safari (oder einen anderen Standardbrowser) mit einem Pay-Station-Link, der den Zahlungstoken enthält.
- Der entsprechende Artikel wird in Pay Station angezeigt.
- Der Nutzer wählt eine Zahlungsmethode und schließt den Kauf ab.
- Pay Station leitet die Nutzer zur Spielanwendung.
- Die Anwendung erhält die Kaufbestätigung über einen Webhook.
Schnellstart
Registrieren Sie sich in Ihrem Kundenportal und erstellen Sie ein Projekt
Das Kundenportal ist das wichtigste Tool für die Konfiguration der Xsolla-Funktionen und auch für die Arbeit mit Analytics und Transaktionen unerlässlich.
Wechseln Sie zum Kundenportal, und erstellen Sie ein Konto, um sich zu registrieren. Um ein Projekt zu erstellen, klicken Sie auf Projekt erstellen in der Seitenleiste und geben Sie die erforderlichen Informationen ein. Sie können die Einstellungen später ändern.

Während dees Integrationsprozesses benötigen Sie die Projekt-ID. Diese wird im Kundenportal neben dem Projektnamen angezeigt.

In-App-Kaufprodukte (virtuelle Gegenstände) konfigurieren
Wählen Sie eine der folgenden Methoden, um Ihren IAP-SKU-Produktkatalog einzurichten.
- Artikel importieren - landen Sie eine JSON-Datei hoch und fügen Sie so im Handumdrehen Ihren Katalog zum Kundenportal hinzu.
- Erstellen Sie einen Artikelkatalog mithilfe der API-Aufrufe aus dem Dokumentationsabschnitt Virtuelle Gegenstände und Währung > Verwaltung.
Universelle Links konfigurieren
Universelle Links sind Links wie z. B. https://your-site.com/your-game
, die in der Anwendung geöffnet werden, sofern diese auf dem Gerät des Nutzers installiert ist, oder im Browser, sofern die Anwendung nicht installiert ist.
So konfigurieren Sie universelle Links:
- Fügen Sie eine Domain-Zuordnungsdatei in das Stammverzeichnis Ihrer Website ein, z. B.:
https://your-site.com/apple-app-site-association
. - Navigieren Sie in Ihrem Xcode-Projekt zu
Signing & Capabilities > Associated Domains , und fügen Sieapplinks:your-site.com
hinzu.
Weiterleitungen konfigurieren, um Nutzer nach dem Kauf zur Spiele-App zurückzuleiten
- Öffnen Sie Ihr Projekt im Kundenportal, und navigieren Sie zum Menüpunkt Zahlungen > Zahlungsportal > Einstellungen > Regeln zur Weiterleitung.
- Geben Sie im Feld Rückgabe-URL eine URL-Adresse oder einen Pfad (Deep-Link) an, zu der bzw. dem der Nutzer nach erfolgter Zahlung weitergeleitet werden soll. Die angegebene URL muss universelle Links unterstützen. Wir empfehlen, einen Deep-Link als Rückgabe-URL anzugeben, um die User Experience in der Spiele-App zu verbessern.
- Wählen Sie aus der Drop-down-Liste Bedingungen für die automatische Weiterleitung eine Bedingung aus.
- Wählen Sie aus der Drop-down-Liste Bedingungen für die manuelle Weiterleitung die Option Keine – nicht weiterleiten aus.
- Klicken Sie auf Speichern.
iOS-Storefront ermitteln
Externe Zahlungssysteme sind derzeit nur in den USA erlaubt. Mit dem folgenden Code lässt sich prüfen, ob Ihre App aus dem US-amerikanischen Store stammt:
- swift
1let storefront = await Storefront.current
2let countryCode = storefront?.countryCode
3
4settings.enablePayments = countryCode == "USA"
5
6SKPaymentQueue.default().start(settings)
Die Methode loadCurrentStorefrontCountryCode
ruft asynchron den aus drei Buchstaben bestehenden Ländercode für die aktuelle Startseite des Store ab.
Kauf tätigen
Bestellung aufseiten des Anwendungs-Servers anlegen
Der App-Client stellt eine Anfrage an Ihren Server, um einen Zahlungstoken abzurufen:
- swift
1struct TokenRequest: Codable {
2 let sku: String
3 let userId: String
4}
5
6func fetchPaymentToken(for sku: String, userId: String, completion: @escaping (Result<String, Error>) -> Void) {
7 let req = TokenRequest(sku: sku, userId: userId)
8 guard let url = URL(string: "https://your-backend.com/xsolla/create_token") else { return }
9 var request = URLRequest(url: url)
10 request.httpMethod = "POST"
11 request.setValue("application/json", forHTTPHeaderField: "Content-Type")
12 request.httpBody = try? JSONEncoder().encode(req)
13 URLSession.shared.dataTask(with: request) { data, _, error in
14 if let error = error {
15 completion(.failure(error)); return
16 }
17 let token = try! JSONDecoder().decode([String: String].self, from: data!)["token"]!
18 completion(.success(token))
19 }.resume()
20}
Verwenden Sie den API-Aufruf Zahlungstoken für den Kauf erstellen, um eine Bestellung mit Nutzer- und Artikeldaten aufseiten von Xsolla anzulegen. Die Methode antwortet mit einem Zahlungstoken, der benötigt wird, um das Zahlungsportal zu öffnen und die Zahlung abzuschließen. Übermitteln Sie den Parameter “sandbox”: true
im Rumpf der Token-abrufen-Anfrage, um in die Testumgebung zu wechseln.
Zahlungsportal öffnen
Generieren Sie nach Empfang des Tokens einen Link zum Öffnen des Zahlungsportals in einem Browser. Der Link sollte wie folgt aussehen: https://secure.xsolla.com/paystation4/?token=TOKEN
, wobei TOKEN
der erhaltene Token ist.
- swift
1func openPayStation(token: String) {
2 let urlString = "https://secure.xsolla.com/paystation4/?token=\(token)"
3 guard let url = URL(string: urlString) else { return }
4 UIApplication.shared.open(url, options: [:], completionHandler: nil)
5}
Den Bezahlvorgang können Sie im Sandbox-Modus testen. Die Sandbox ist eine eigenständige Testumgebung, welche alle Funktionen der Live-Umgebung, mit Ausnahme echter und abgelehnter Zahlungen, unterstützt. Im Sandbox-Modus können Sie Einmalzahlungen sowie Zahlungen mit gespeicherten Zahlungsmethoden, wie etwa Bankkarten und PayPal, testen.
Nutzer zur App weiterleiten
Nach erfolgreicher Zahlung sollten Sie die Nutzer über universelle Links zu Ihrer App zurückleiten. Dazu sollten Sie die folgende Methode in IhremSceneDelegate
oder AppDelegate
implementieren:
- swift
1func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
2 guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
3 let url = userActivity.webpageURL,
4 url.host == "your-site.com",
5 url.path.starts(with: "/payment_callback_success") else { return }
6 // Extract parameters (e.g., status, transaction_id)
7 let components = URLComponents(url: url, resolvingAgainstBaseURL: false)
8 let queryItems = components?.queryItems
9 let status = queryItems?.first { $0.name == "status" }?.value
10 handlePaymentResult(status: status)
11}
Webhooks einrichten
- Navigieren Sie im Kundenportal zum Menüpunkt Projekteinstellungen > Webhooks.
- Geben Sie im Feld Webhook-Server die Server-URL an, unter der Sie die Webhooks im Format
https://example.com
empfangen wollen. Sie können auch eine URL aus einem Webhook-Testtool angeben. - Ein geheimer Schlüssel zum Signieren von Projekt-Webhooks wird standardmäßig generiert. Wenn Sie einen neuen geheimen Schlüssel generieren möchten, klicken Sie auf das Aktualisieren-Symbol.
- Klicken Sie auf Webhooks aktivieren.

Für die volle Operation des In-Game Stores und Zahlungsmanagements ist es notwendig, die Verarbeitung des Hauptwebhooks zu implementieren:
Webhook-Name | Beschreibung |
---|---|
Beutzervalidierung > Benutzervalidierung (user_validation ) | Wird während der verschiedenen Phasen des Bezahlvorgangs gesendet, um sicherzustellen, dass der Nutzer im Spiel registriert ist. |
Spieledienste > Kombinierte Webhooks > Erfolgreiche Bezahlung der Bestellung (order_paid ) | Es enthält Zahlungsdaten, Transaktionsdetails und Informationen über gekaufte Artikel. Nutzen Sie die Daten des Webhooks, um Artikel zum Benutzer hinzuzufügen. |
Spieledienste > Kombinierte Webhooks > Stornierung der Bestellung (order_canceled ) | Es enthält Daten von der stornierten Zahlung, Transaktionsdetails und Informationen über gekaufte Artikel. Nutzen Sie die Daten des Webhooks, um die gekauften Gegenstände zu entfernen. |
Launch
- Unterzeichnen Sie die Lizenzvereinbarung. Navigieren Sie dazu im Kundenportal zu Vereinbarungen und Steuern > Vereinbarungen. Füllen Sie dort das Vereinbarungsformular aus.
- Machen Sie Angaben zu Ihren Steuerdaten. Navigieren Sie dazu im Kundenportal zu Vereinbarungen und Steuern > Steuerdaten, und füllen Sie das Formular aus.
- Wechseln Sie in die Produktionsumgebung. Entfernen Sie dazu die Bezeichnung
“sandbox”: true
aus der Token-erstellen-Anfrage.
Haben Sie einen Tippfehler oder einen anderen Textfehler gefunden? Wählen Sie den Text aus und drücken Sie Strg+Eingabe.