Zum Hauptinhalt springen




Erfahren Sie, wie Sie Ihre Android-Zahlungsanwendung an die Arbeit mit Web Payments anpassen und Kunden eine bessere Benutzererfahrung bieten.

das Zahlungsanforderungs-API bringt eine integrierte browserbasierte Oberfläche ins Web, mit der Benutzer die erforderlichen Zahlungsinformationen einfacher als je zuvor eingeben können. Die API kann auch plattformspezifische Zahlungsanwendungen aufrufen.

Zahlungsfluss mit der plattformspezifischen Google Pay-Anwendung, die Web Payments verwendet.

Im Vergleich zur Verwendung von nur Android Intents ermöglichen Webzahlungen eine bessere Browserintegration, Sicherheit und Benutzererfahrung:

  • Die Zahlungsanwendung wird modal im Kontext der Website des Händlers gestartet.
  • Die Implementierung ergänzt Ihre bestehende Zahlungsanwendung und ermöglicht es Ihnen, Ihre Benutzerbasis zu nutzen.
  • Die Signatur der Zahlungs-App wird überprüft, um dies zu vermeiden
    seitliche Belastung.
  • Zahlungs-Apps können mehrere Zahlungsmethoden unterstützen.
  • Jede Zahlungsmethode kann integriert werden, z. B. Kryptowährungen, Banküberweisungen und mehr. Zahlungsanwendungen auf Android-Geräten können sogar Methoden integrieren, die den Zugriff auf den Hardware-Chip im Gerät erfordern.

Es sind vier Schritte erforderlich, um Webzahlungen in einer Android-Zahlungsanwendung zu implementieren:

  1. Lassen Sie Händler Ihre Zahlungsanwendung entdecken.
  2. Informieren Sie einen Händler, wenn ein Kunde über ein registriertes Instrument (z. B. eine Kreditkarte) verfügt, dass er zur Zahlung bereit ist.
  3. Lassen Sie einen Kunden die Zahlung leisten.
  4. Überprüfen Sie das Signaturzertifikat des Anrufers.

Informationen zum Anzeigen von Webzahlungen in Aktion finden Sie unter
Zahlung-Web-Android
Manifestation.

Schritt 1: Lassen Sie Händler Ihre Zahlungs-App entdecken

Damit ein Händler Ihre Zahlungsanwendung verwenden kann, muss er die verwenden Zahlungsanforderungs-API und geben Sie die Zahlungsmethode an, die Sie mit dem unterstützen Kennung der Zahlungsmethode.

Wenn Sie eine eindeutige Zahlungsmethoden-ID für Ihre Zahlungs-App haben, können Sie Ihre festlegen Zahlungsmethode manifest damit Browser Ihre Anwendung erkennen können.

Schritt 2: Informieren Sie einen Händler, wenn ein Kunde ein registriertes Instrument hat, dass er bereit ist zu zahlen

Der Händler kann anrufen hasEnrolledInstrument () um zu sehen, ob der Kunde eine Zahlung leisten kann. Sie können implementieren IS_READY_TO_PAY als Android-Dienst zur Beantwortung dieser Frage.

AndroidManifest.xml

Deklarieren Sie Ihren Service mit einem Absichtsfilter mit Aktion
org.chromium.intent.action.IS_READY_TO_PAY.

<Bedienung
android:Süßkartoffel=".SampleIsReadyToPayService"
android:exported="wahr">

<intent-filter>
<Aktion android:Süßkartoffel="org.chromium.intent.action.IS_READY_TO_PAY" />
</intent-filter>
</Bedienung>

das IS_READY_TO_PAY Der Service ist optional. Wenn die Zahlungsanwendung keinen solchen Intent-Handler enthält, geht der Webbrowser davon aus, dass die Anwendung jederzeit Zahlungen ausführen kann.

AIDL

Die API für IS_READY_TO_PAY Der Dienst ist in AIDL definiert. Erstellen Sie zwei AIDL-Dateien mit folgendem Inhalt:

app / src / main / aidl / org / chrom / IsReadyToPayServiceCallback.aidl

package org.chromium;
interface IsReadyToPayServiceCallback {
oneway void handleIsReadyToPay(boolean isReadyToPay);
}

app / src / main / aidl / org / chrom / IsReadyToPayService.aidl

package org.chromium;
importieren org.chromium.IsReadyToPayServiceCallback;

interface IsReadyToPayService {
oneway void isReadyToPay(IsReadyToPayServiceCallback callback);
}

Implementieren IsReadyToPayService

Die einfachste Implementierung von IsReadyToPayService im folgenden Beispiel gezeigt:

Klasse SampleIsReadyToPayService : Service() {
private val binder = object : IsReadyToPayService.Stub() {
override fun isReadyToPay(Rückrufen: IsReadyToPayServiceCallback?) {
Rückrufen?.handleIsReadyToPay(wahr)
}
}

override fun onBind(Ich habe es versucht: Absicht?): IBinder? {
Rückkehr binder
}
}

Parameter

Übergeben Sie die folgenden Parameter an onBind als Absichts-Extras:

  • methodNames
  • methodData
  • topLevelOrigin
  • topLevelCertificateChain
  • topLevelCertificateChain
  • paymentRequestOrigin

override fun onBind(Ich habe es versucht: Absicht?): IBinder? {
val extras: Bündeln? = Ich habe es versucht?.extras
}

methodNames

Die Namen der abgefragten Methoden. Die Elemente sind die Schlüssel in der
methodData Wörterbuch und geben Sie die Methoden an, die die Zahlungsanwendung unterstützt.

val methodNames: Liste<String>? = extras.getStringArrayList("methodNames")

methodData

Eine Zuordnung jeder Eingabe von methodNames zum
methodData.

val methodData: Bündeln? = extras.getBundle("methodData")

topLevelOrigin

Der Ursprung des Händlers ohne das Schema (der Ursprung ohne das Schema des Navigationskontexts der obersten Ebene). Zum Beispiel, https://mystore.com/checkout es wird wie vergehen mystore.com.

val topLevelOrigin: String? = extras.getString("topLevelOrigin")

topLevelCertificateChain

Die Zertifikatkette des Händlers (die Zertifikatkette aus dem Navigationskontext der obersten Ebene). Null für localhost und Datei auf der Festplatte, die sichere Kontexte ohne SSL-Zertifikate sind. Die Zertifikatskette ist erforderlich, da für einen Zahlungsantrag möglicherweise unterschiedliche Vertrauensanforderungen für Websites gelten.

val topLevelCertificateChain: Array<Paketierbar>? =
extras.getParcelableArray("topLevelCertificateChain")

Jeder Paketierbar ist ein Bündeln mit einer "Zertifikat" Schlüssel und ein Byte-Array-Wert.

val list: Liste<ByteArray>? = topLevelCertificateChain?.mapNotNull { p ->
(p As Bündeln).getByteArray("Zertifikat")
}

paymentRequestOrigin

Die Nicht-Schema-Quelle des aufgerufenen Iframe-Navigationskontexts neue PaymentRequest (methodData, Details, Optionen) Konstruktor in JavaScript. Wenn der Konstruktor aus dem Kontext der obersten Ebene aufgerufen wurde, entspricht der Wert dieses Parameters dem Wert von topLevelOrigin Parameter.

val paymentRequestOrigin: String? = extras.getString("paymentRequestOrigin")

Antworten

Der Dienst kann seine Antwort durch senden handleIsReadyToPay (Boolean) Methode.

Rückrufen?.handleIsReadyToPay(wahr)

Entschuldigen Sie mich

Sie können verwenden Binder.getCallingUid () um zu überprüfen, wer der Anrufer ist. Beachten Sie, dass Sie dies in der tun müssen isReadyToPay Methode, nicht die onBind Methode.

override fun isReadyToPay(Rückrufen: IsReadyToPayServiceCallback?) {
try {
val callingPackage = packageManager.getNameForUid(Binder.getCallingUid())

Informationen zum Überprüfen, ob das anrufende Paket die richtige Signatur hat, finden Sie unter Überprüfen des Signaturzertifikats des Anrufers.

Schritt 3: Lassen Sie einen Kunden auschecken

Der Händler ruft an Show() um den Zahlungsantrag zu starten, damit der Kunde eine Zahlung leisten kann. Die kostenpflichtige App wird über eine Android-Absicht aufgerufen ZAHLEN mit Transaktionsinformationen in den Intent-Parametern.

Der Zahlungsantrag antwortet mit Methodenname y Einzelheiten, die spezifisch für die Zahlungsanwendung sind und für den Browser undurchsichtig sind. Der Browser konvertiert die Einzelheiten
Zeichenfolge in einem JavaScript-Objekt für den Händler über JSON-Deserialisierung, aber darüber hinaus keine Gültigkeit. Der Browser ändert das nicht
Einzelheiten;; Der Wert dieses Parameters wird direkt an den Händler übergeben.

AndroidManifest.xml

Die Aktivität mit dem ZAHLEN Der Absichtsfilter muss a haben Ein Tag, das die Standardkennung der Zahlungsmethode für die Anwendung angibt.

Fügen Sie a hinzu, um mehrere Zahlungsmethoden zu unterstützen Etikett mit a
Ressource.

<activity
android:Süßkartoffel=".PaymentActivity"
android:Thema="@style/Theme.SamplePay.Dialog">

<intent-filter>
<Aktion android:Süßkartoffel="org.chromium.intent.action.PAY" />
</intent-filter>

<meta-data
android:Süßkartoffel="org.chromium.default_payment_method_name"
android:Wert="https://bobpay.xyz/pay" />

<meta-data
android:Süßkartoffel="org.chromium.payment_method_names"
android:Ressource="@array/method_names" />

</activity>

das Ressource muss eine Liste von Zeichenfolgen sein, von denen jede eine gültige absolute URL mit einem HTTPS-Schema sein muss, wie hier gezeigt.

<?xml version="1.0" encoding="utf-8"?>
<Ressourcen>
<string-array Süßkartoffel="method_names">
<Artikel>https://alicepay.com/put/optional/path/here</Artikel>
<Artikel>https://charliepay.com/put/optional/path/here</Artikel>
</string-array>
</Ressourcen>

Parameter

Die folgenden Parameter werden als Absichts-Extras an die Aktivität übergeben:

  • methodNames
  • methodData
  • topLevelOrigin
  • topLevelCertificateChain
  • paymentRequestOrigin
  • gesamt
  • Modifikatoren
  • paymentRequestId

val extras: Bündeln? = Ich habe es versucht?.extras

methodNames

Die Namen der verwendeten Methoden. Die Elemente sind die Schlüssel in der
methodData Wörterbuch. Dies sind die Methoden, die die Zahlungsanwendung unterstützt.

val methodNames: Liste<String>? = extras.getStringArrayList("methodNames")

methodData

Eine Zuordnung von jedem der methodNames zum
methodData.

val methodData: Bündeln? = extras.getBundle("methodData")

Händlername

Der Inhalt der </ html></code> HTML-Tag der Händler-Checkout-Seite (der Navigationskontext der obersten Ebene des Browsers).</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> merchantName<span class="token operator">:</span> String<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"merchantName"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h4 id="toplevelorigin-2"><span class="ez-toc-section" id="topLevelOrigin-2"></span><code>topLevelOrigin</code> <span class="ez-toc-section-end"></span></h4> <p>Der Ursprung des Händlers ohne das Schema (Der Ursprung ohne das Schema des Navigationskontexts der obersten Ebene). Zum Beispiel, <code>https://mystore.com/checkout</code> es passiert wie <code>mystore.com</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> topLevelOrigin<span class="token operator">:</span> String<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"topLevelOrigin"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h4 id="toplevelcertificatechain-2"><span class="ez-toc-section" id="topLevelCertificateChain-2"></span><code>topLevelCertificateChain</code> <span class="ez-toc-section-end"></span></h4> <p>Die Zertifikatkette des Händlers (die Zertifikatkette aus dem Navigationskontext der obersten Ebene). Null für localhost und Datei auf der Festplatte, die sichere Kontexte ohne SSL-Zertifikate sind. Jeder <code>Paketierbar</code> Es ist ein Paket mit einem<br /> <code>Zertifikat</code> Schlüssel und ein Byte-Array-Wert.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> topLevelCertificateChain<span class="token operator">:</span> Array<span class="token operator"><</span>Paketierbar<span class="token operator">></span><span class="token operator">?</span> <span class="token operator">=</span><br>extras<span class="token punctuation">.</span><span class="token function">getParcelableArray</span><span class="token punctuation">(</span><span class="token string">"topLevelCertificateChain"</span><span class="token punctuation">)</span><br><span class="token keyword">val</span> list<span class="token operator">:</span> Liste<span class="token operator"><</span>ByteArray<span class="token operator">></span><span class="token operator">?</span> <span class="token operator">=</span> topLevelCertificateChain<span class="token operator">?</span><span class="token punctuation">.</span><span class="token function">mapNotNull</span> <span class="token punctuation">{</span> p <span class="token operator">-></span><br><span class="token punctuation">(</span>p <span class="token keyword">As</span> Bündeln<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getByteArray</span><span class="token punctuation">(</span><span class="token string">"Zertifikat"</span><span class="token punctuation">)</span><br><span class="token punctuation">}</span></code></pre> <p></web-copy-code></p> <h4 id="paymentrequestorigin-2"><span class="ez-toc-section" id="paymentRequestOrigin-2"></span><code>paymentRequestOrigin</code> <span class="ez-toc-section-end"></span></h4> <p>Die Nicht-Schema-Quelle des aufgerufenen Iframe-Navigationskontexts <code>neue PaymentRequest (methodData, Details, Optionen)</code> Konstruktor in JavaScript. Wenn der Konstruktor aus dem Kontext der obersten Ebene aufgerufen wurde, entspricht der Wert dieses Parameters dem Wert von <code>topLevelOrigin</code> Parameter.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> paymentRequestOrigin<span class="token operator">:</span> String<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"paymentRequestOrigin"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h4 id="total"><span class="ez-toc-section" id="total"></span><code>gesamt</code> <span class="ez-toc-section-end"></span></h4> <p>Die JSON-Zeichenfolge, die den Gesamtbetrag der Transaktion darstellt.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> gesamt<span class="token operator">:</span> String<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"total"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p>Hier ist ein Beispiel für den Inhalt von Zeichenfolgen:</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token punctuation">{</span><span class="token string">"currency"</span><span class="token operator">:</span><span class="token string">"USD"</span><span class="token punctuation">,</span><span class="token string">"value"</span><span class="token operator">:</span><span class="token string">"25.00"</span><span class="token punctuation">}</span></code></pre> <p></web-copy-code></p> <h4 id="modifiers"><span class="ez-toc-section" id="modifiers"></span><code>Modifikatoren</code> <span class="ez-toc-section-end"></span></h4> <p>Die Ausgabe von <code>JSON.stringify (details.modifiers)</code>, wo <code>details.modifiers</code><br /> nur enthalten <code>unterstützte Methoden</code> y <code>gesamt</code>.</p> <h4 id="paymentrequestid"><span class="ez-toc-section" id="paymentRequestId"></span><code>paymentRequestId</code> <span class="ez-toc-section-end"></span></h4> <p>das <code>PaymentRequest.id</code> Feld, das Anwendungen für die automatische Zahlung mit dem Status der Transaktion verknüpfen sollen. Händler-Websites verwenden dieses Feld, um "Auto Pay" -Anwendungen nach dem Out-of-Band-Transaktionsstatus abzufragen.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> paymentRequestId<span class="token operator">:</span> String<span class="token operator">?</span> <span class="token operator">=</span> extras<span class="token punctuation">.</span><span class="token function">getString</span><span class="token punctuation">(</span><span class="token string">"paymentRequestId"</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <h3 id="response-2"><span class="ez-toc-section" id="Respuesta-2"></span>Antworten <span class="ez-toc-section-end"></span></h3> <p>Die Aktivität kann ihre Antwort durch senden <code>setResult</code> mit <code>RESULT_OK</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token function">setResult</span><span class="token punctuation">(</span>Activity<span class="token punctuation">.</span>RESULT_OK<span class="token punctuation">,</span> <span class="token function">Absicht</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">apply</span> <span class="token punctuation">{</span><br><span class="token function">putExtra</span><span class="token punctuation">(</span><span class="token string">"methodName"</span><span class="token punctuation">,</span> <span class="token string">"https://bobpay.xyz/pay"</span><span class="token punctuation">)</span><br><span class="token function">putExtra</span><span class="token punctuation">(</span><span class="token string">"details"</span><span class="token punctuation">,</span> <span class="token string">"{"token": "put-some-data-here"}"</span><span class="token punctuation">)</span><br><span class="token punctuation">}</span><span class="token punctuation">)</span><br><span class="token function">finish</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p>Sie müssen zwei Parameter als Absichts-Extras angeben:</p> <ul> <li><code>Methodenname</code>: Der Name der verwendeten Methode.</li> <li><code>Einzelheiten</code>: JSON-Zeichenfolge mit den Informationen, die der Händler zum Abschließen der Transaktion benötigt. Wenn Erfolg ist <code>wahr</code>, dann <code>Einzelheiten</code> muss so konstruiert sein, dass <code>JSON.parse (Details)</code> es könnte passieren.</li> </ul> <p>Du kannst passieren <code>RESULT_CANCELED</code> Wenn die Transaktion in der Zahlungsanwendung nicht abgeschlossen wurde, z. B. wenn der Benutzer in der Zahlungsanwendung nicht den richtigen PIN-Code für sein Konto eingegeben hat. Der Browser kann es dem Benutzer ermöglichen, eine andere Zahlungsanwendung auszuwählen.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token function">setResult</span><span class="token punctuation">(</span>RESULT_CANCELED<span class="token punctuation">)</span><br><span class="token function">finish</span><span class="token punctuation">(</span><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p>Wenn das Aktivitätsergebnis einer von der aufgerufenen Zahlungsanwendung empfangenen Zahlungsantwort auf gesetzt ist <code>RESULT_OK</code>Dann prüft Chrome, ob es nicht leer ist <code>Methodenname</code> y<br /> <code>Einzelheiten</code> in Ihren Extras. Wenn die Validierung fehlschlägt, gibt Chrome ein abgelehntes Versprechen von zurück <code>request.show ()</code> mit einer der folgenden Fehlermeldungen für Entwickler:</p> <p><web-copy-code></p> <pre class="language-js"><code class="language-js"><span class="token string">'Payment app returned invalid response. Missing field "details".'</span><br><span class="token string">'Payment app returned invalid response. Missing field "methodName".'</span></code></pre> <p></web-copy-code></p> <h3 id="permission-2"><span class="ez-toc-section" id="Permiso-2"></span>Entschuldigen Sie mich <span class="ez-toc-section-end"></span></h3> <p>Die Aktivität kann den Anrufer mit ihrem überprüfen <code>getCallingPackage ()</code> Methode.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> caller<span class="token operator">:</span> String<span class="token operator">?</span> <span class="token operator">=</span> callingPackage</code></pre> <p></web-copy-code></p> <p>Der letzte Schritt besteht darin, das Signaturzertifikat des Anrufers zu überprüfen, um zu bestätigen, dass das anrufende Paket die richtige Signatur hat.</p> <h2 id="step-4:-verify-the-caller's-signing-certificate"><span class="ez-toc-section" id="Paso-4-Verifique-el-certificado-de-firma-de-la-persona-que-llama"></span>Schritt 4: Überprüfen Sie das Signaturzertifikat des Anrufers <span class="ez-toc-section-end"></span></h2> <p>Sie können den Paketnamen des Anrufers mit überprüfen <code>Binder.getCallingUid ()</code> im<br /> <code>IS_READY_TO_PAY</code>, und mit <code>Activity.getCallingPackage ()</code> im <code>ZAHLEN</code>. Um wirklich zu überprüfen, ob der Anrufer der Browser ist, an den Sie denken, müssen Sie das Signaturzertifikat überprüfen und sicherstellen, dass es mit dem richtigen Wert übereinstimmt.</p> <p>Wenn Sie auf API-Level 28 und höher abzielen und in einen Browser mit einem einzigen Signaturzertifikat integrieren, können Sie diesen verwenden<br /> <code>PackageManager.hasSigningCertificate ()</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> packageName<span class="token operator">:</span> String <span class="token operator">=</span> … <br><span class="token keyword">val</span> Zertifikat<span class="token operator">:</span> ByteArray <span class="token operator">=</span> … <br><span class="token keyword">val</span> verified <span class="token operator">=</span> packageManager<span class="token punctuation">.</span><span class="token function">hasSigningCertificate</span><span class="token punctuation">(</span><br>callingPackage<span class="token punctuation">,</span><br>Zertifikat<span class="token punctuation">,</span><br>PackageManager<span class="token punctuation">.</span>CERT_INPUT_SHA256<br><span class="token punctuation">)</span></code></pre> <p></web-copy-code></p> <p><code>PackageManager.hasSigningCertificate ()</code> Es wird für einzelne Zertifikatbrowser bevorzugt, da die Zertifikatrotation korrekt ausgeführt wird. (Chrome hat nur ein Signaturzertifikat.) Anwendungen mit mehreren Signaturzertifikaten können diese nicht drehen.</p> <p>Wenn Sie API-Levels unterstützen müssen, die älter als 27 Jahre oder niedriger sind, oder wenn Sie Browser mit mehreren Signaturzertifikaten verarbeiten müssen, können Sie diese verwenden<br /> <code>PackageManager.GET_SIGNATURES</code>.</p> <p><web-copy-code></p> <pre class="language-kotlin"><code class="language-kotlin"><span class="token keyword">val</span> packageName<span class="token operator">:</span> String <span class="token operator">=</span> … <br><span class="token keyword">val</span> certificates<span class="token operator">:</span> einstellen<span class="token operator"><</span>ByteArray<span class="token operator">></span> <span class="token operator">=</span> … <p><span class="token keyword">val</span> packageInfo <span class="token operator">=</span> <span class="token function">getPackageInfo</span><span class="token punctuation">(</span>packageName<span class="token punctuation">,</span> PackageManager<span class="token punctuation">.</span>GET_SIGNATURES<span class="token punctuation">)</span><br><span class="token keyword">val</span> sha256 <span class="token operator">=</span> MessageDigest<span class="token punctuation">.</span><span class="token function">getInstance</span><span class="token punctuation">(</span><span class="token string">"SHA-256"</span><span class="token punctuation">)</span><br><span class="token keyword">val</span> signatures <span class="token operator">=</span> packageInfo<span class="token punctuation">.</span>signatures<span class="token punctuation">.</span><span class="token function">map</span> <span class="token punctuation">{</span> sha256<span class="token punctuation">.</span><span class="token function">digest</span><span class="token punctuation">(</span>Artikel<span class="token punctuation">.</span><span class="token function">toByteArray</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">}</span><br><span class="token keyword">val</span> verified <span class="token operator">=</span> signatures<span class="token punctuation">.</span>Größe <span class="token operator">==</span> certificates<span class="token punctuation">.</span>Größe <span class="token operator">&&</span><br>signatures<span class="token punctuation">.</span><span class="token function">Dort</span> <span class="token punctuation">{</span> s <span class="token operator">-></span> certificates<span class="token punctuation">.</span><span class="token function">any</span> <span class="token punctuation">{</span> Artikel<span class="token punctuation">.</span><span class="token function">contentEquals</span><span class="token punctuation">(</span>s<span class="token punctuation">)</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span></p></code></pre> <p></web-copy-code></p> <p> <web-feedback additional-questions="api"></web-feedback> </div> <div id="ez-toc-container" class="ez-toc-v2_0_67_1 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction"> <div class="ez-toc-title-container"> <p class="ez-toc-title" >Inhalt</p> <span class="ez-toc-title-toggle"><a href="#" class="ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle" aria-label="Toggle Table of Content"><span class="ez-toc-js-icon-con"><span class=""><span class="eztoc-hide" style="display:none;">Toggle</span><span class="ez-toc-icon-toggle-span"><svg style="fill: #999;color:#999" xmlns="http://www.w3.org/2000/svg" class="list-377408" width="20px" height="20px" viewbox="0 0 24 24" fill="none"><path d="M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z" fill="currentColor"></path></svg><svg style="fill: #999;color:#999" class="arrow-unsorted-368013" xmlns="http://www.w3.org/2000/svg" width="10px" height="10px" viewbox="0 0 24 24" version="1.2" baseprofile="tiny"><path d="M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z"/></svg></span></span></span></a></span></div> <nav><ul class='ez-toc-list ez-toc-list-level-1' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-1" href="#Paso-1-permita-que-los-comerciantes-descubran-su-aplicacion-de-pago" title="Schritt 1: Lassen Sie Händler Ihre Zahlungs-App entdecken ">Schritt 1: Lassen Sie Händler Ihre Zahlungs-App entdecken </a></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-2" href="#Paso-2-Informe-a-un-comerciante-si-un-cliente-tiene-un-instrumento-registrado-que-esta-listo-para-pagar" title="Schritt 2: Informieren Sie einen Händler, wenn ein Kunde ein registriertes Instrument hat, dass er bereit ist zu zahlen ">Schritt 2: Informieren Sie einen Händler, wenn ein Kunde ein registriertes Instrument hat, dass er bereit ist zu zahlen </a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-3" href="#AndroidManifestxml" title="AndroidManifest.xml ">AndroidManifest.xml </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-4" href="#AIDL" title="AIDL ">AIDL </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-5" href="#Implementar-IsReadyToPayService" title="Implementieren Sie IsReadyToPayService ">Implementieren Sie IsReadyToPayService </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-6" href="#Parametros" title="Parameter ">Parameter </a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-7" href="#methodNames" title="methodNames ">methodNames </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-8" href="#methodData" title="methodData ">methodData </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-9" href="#topLevelOrigin" title="topLevelOrigin ">topLevelOrigin </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-10" href="#topLevelCertificateChain" title="topLevelCertificateChain ">topLevelCertificateChain </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-11" href="#paymentRequestOrigin" title="paymentRequestOrigin ">paymentRequestOrigin </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-12" href="#Respuesta" title="Antworten ">Antworten </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-13" href="#Permiso" title="Entschuldigen Sie mich ">Entschuldigen Sie mich </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-14" href="#Paso-3-deje-que-un-cliente-realice-el-pago" title="Schritt 3: Lassen Sie einen Kunden auschecken ">Schritt 3: Lassen Sie einen Kunden auschecken </a><ul class='ez-toc-list-level-3' ><li class='ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-15" href="#AndroidManifestxml-2" title="AndroidManifest.xml ">AndroidManifest.xml </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-16" href="#Parametros-2" title="Parameter ">Parameter </a><ul class='ez-toc-list-level-4' ><li class='ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-17" href="#methodNames-2" title="methodNames ">methodNames </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-18" href="#methodData-2" title="methodData ">methodData </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-19" href="#Nombre-del-comerciante" title="Händlername ">Händlername </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-20" href="#topLevelOrigin-2" title="topLevelOrigin ">topLevelOrigin </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-21" href="#topLevelCertificateChain-2" title="topLevelCertificateChain ">topLevelCertificateChain </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-22" href="#paymentRequestOrigin-2" title="paymentRequestOrigin ">paymentRequestOrigin </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-23" href="#total" title="gesamt ">gesamt </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-24" href="#modifiers" title="Modifikatoren ">Modifikatoren </a></li><li class='ez-toc-page-1 ez-toc-heading-level-4'><a class="ez-toc-link ez-toc-heading-25" href="#paymentRequestId" title="paymentRequestId ">paymentRequestId </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-26" href="#Respuesta-2" title="Antworten ">Antworten </a></li><li class='ez-toc-page-1 ez-toc-heading-level-3'><a class="ez-toc-link ez-toc-heading-27" href="#Permiso-2" title="Entschuldigen Sie mich ">Entschuldigen Sie mich </a></li></ul></li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class="ez-toc-link ez-toc-heading-28" href="#Paso-4-Verifique-el-certificado-de-firma-de-la-persona-que-llama" title="Schritt 4: Überprüfen Sie das Signaturzertifikat des Anrufers ">Schritt 4: Überprüfen Sie das Signaturzertifikat des Anrufers </a></li></ul></nav></div> <script type="rocketlazyloadscript" async="" src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- before contente - R Marketing --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9047562926713908" data-ad-slot="3528200093" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> <div class='yarpp yarpp-related yarpp-related-website yarpp-template-yarpp-template-example-4258839'> <!-- YARPP List --> <h5>zusammenhängende Posts</h3><ol> <li><a href="https://rmarketingdigital.com/de/dev/ubersicht-uber-webbasierte-zahlungsanwendungen/" rel="bookmark" title="Übersicht über webbasierte Zahlungsanwendungen" data-wpel-link="internal">Übersicht über webbasierte Zahlungsanwendungen</a></li> <li><a href="https://rmarketingdigital.com/de/dev/empower-payment-anwendungen-mit-web-zahlungen/" rel="bookmark" title="Steigern Sie Zahlungsanwendungen mit Web-Zahlungen" data-wpel-link="internal">Steigern Sie Zahlungsanwendungen mit Web-Zahlungen</a></li> <li><a href="https://rmarketingdigital.com/de/plantilla-excel/urlaubsangestellte/" rel="bookmark" title="Berechnung von Überstunden" data-wpel-link="internal">Berechnung von Überstunden</a></li> <li><a href="https://rmarketingdigital.com/de/elementor/plugins-und-add-ons-fur-elementor/" rel="bookmark" title="Plugins und Plugins für Elementor" data-wpel-link="internal">Plugins und Plugins für Elementor</a></li> </ol> </div> <div class='yarpp yarpp-related yarpp-related-website yarpp-template-yarpp-template-example-8968778'> <!-- YARPP List --> <h5>zusammenhängende Posts</h3><ol> <li><a href="https://rmarketingdigital.com/de/dev/ubersicht-uber-webbasierte-zahlungsanwendungen/" rel="bookmark" title="Übersicht über webbasierte Zahlungsanwendungen" data-wpel-link="internal">Übersicht über webbasierte Zahlungsanwendungen</a></li> <li><a href="https://rmarketingdigital.com/de/dev/empower-payment-anwendungen-mit-web-zahlungen/" rel="bookmark" title="Steigern Sie Zahlungsanwendungen mit Web-Zahlungen" data-wpel-link="internal">Steigern Sie Zahlungsanwendungen mit Web-Zahlungen</a></li> <li><a href="https://rmarketingdigital.com/de/plantilla-excel/urlaubsangestellte/" rel="bookmark" title="Berechnung von Überstunden" data-wpel-link="internal">Berechnung von Überstunden</a></li> <li><a href="https://rmarketingdigital.com/de/elementor/plugins-und-add-ons-fur-elementor/" rel="bookmark" title="Plugins und Plugins für Elementor" data-wpel-link="internal">Plugins und Plugins für Elementor</a></li> </ol> </div> </div> </div><!--/post-content--> </div><!--/inner-wrap--> </article> </div><!--/post-area--> <div id="sidebar" data-nectar-ss="1" class="col span_3 col_last"> <div id="custom_html-9" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><center><script type="rocketlazyloadscript" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- Sidebar Widget - R Marketing --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9047562926713908" data-ad-slot="9140386366" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center></div></div><div id="custom_html-24" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><center><script type="rocketlazyloadscript" async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script> <!-- Sidebar Widget - R Marketing --> <ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-9047562926713908" data-ad-slot="9140386366" data-ad-format="auto" data-full-width-responsive="true"></ins> <script type="rocketlazyloadscript"> (adsbygoogle = window.adsbygoogle || []).push({}); </script> </center></div></div> </div><!--/sidebar--> </div><!--/row--> <div class="row"> <div class="row vc_row-fluid full-width-section related-post-wrap" data-using-post-pagination="false" data-midnight="dark"> <div class="row-bg-wrap"><div class="row-bg"></div></div> <h3 class="related-title hidden" data-no-translation="" data-trp-gettext="">zusammenhängende Posts</h3><div class="row span_12 blog-recent related-posts columns-3" data-style="material" data-color-scheme="light"> <div class="col span_4"> <div class="inner-wrap post-81486 post type-post status-publish format-standard has-post-thumbnail category-dev"> <a href="https://rmarketingdigital.com/de/dev/geben-von-superkraften-an-css-variablen/" class="img-link" data-wpel-link="internal"><span class="post-featured-img"><img width="600" height="360" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20600%20360'%3E%3C/svg%3E" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="hero-7923897-5622351-jpg" title="" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-7923897-600x360.jpg" /><noscript><img width="600" height="360" src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-7923897-600x360.jpg" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="hero-7923897-5622351-jpg" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/de/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/de/dev/geben-von-superkraften-an-css-variablen/" aria-label="CSS-Variablen Superkräfte verleihen" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">CSS-Variablen Superkräfte verleihen</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='R Digitales Marketing' src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2070%2070'%3E%3C/svg%3E" data-lazy-srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async' data-lazy-src="https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g"/><noscript><img alt='R Digitales Marketing' src='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async'/></noscript><div class="text"> <a href="https://rmarketingdigital.com/de/author/r-marketing-digital/" data-wpel-link="internal">R Digitales Marketing</a><span>22/10/2022</span></div></div> </div> </div> </div> <div class="col span_4"> <div class="inner-wrap post-83979 post type-post status-publish format-standard has-post-thumbnail category-dev"> <a href="https://rmarketingdigital.com/de/dev/fix-an-overloaded-server/" class="img-link" data-wpel-link="internal"><span class="post-featured-img"><img width="600" height="360" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20600%20360'%3E%3C/svg%3E" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="hero-2836929-1047989-jpg" title="" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-2836929-600x360.jpg" /><noscript><img width="600" height="360" src="https://rmarketingdigital.com/wp-content/uploads/2020/09/hero-2836929-600x360.jpg" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="hero-2836929-1047989-jpg" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/de/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/de/dev/fix-an-overloaded-server/" aria-label="Beheben Sie einen überlasteten Server" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">Beheben Sie einen überlasteten Server</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='R Digitales Marketing' src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2070%2070'%3E%3C/svg%3E" data-lazy-srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async' data-lazy-src="https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g"/><noscript><img alt='R Digitales Marketing' src='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async'/></noscript><div class="text"> <a href="https://rmarketingdigital.com/de/author/r-marketing-digital/" data-wpel-link="internal">R Digitales Marketing</a><span>22/10/2022</span></div></div> </div> </div> </div> <div class="col span_4"> <div class="inner-wrap post-92984 post type-post status-publish format-standard has-post-thumbnail category-dev"> <a href="https://rmarketingdigital.com/de/dev/whats-new-in-lighthouse-6-0/" class="img-link" data-wpel-link="internal"><span class="post-featured-img"><img width="1" height="1" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201%201'%3E%3C/svg%3E" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="Leuchtturm-Logo-5769199-svg_-3706970-svgxml" title="" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2020/10/lighthouse-logo-5769199.svg.svg+xml" /><noscript><img width="1" height="1" src="https://rmarketingdigital.com/wp-content/uploads/2020/10/lighthouse-logo-5769199.svg.svg+xml" class="attachment-portfolio-thumb size-portfolio-thumb wp-post-image" alt="Leuchtturm-Logo-5769199-svg_-3706970-svgxml" title="" decoding="async" /></noscript></span></a> <span class="meta-category"><a class="dev" href="https://rmarketingdigital.com/de/dev/" data-wpel-link="internal">Dev</a></span> <a class="entire-meta-link" href="https://rmarketingdigital.com/de/dev/whats-new-in-lighthouse-6-0/" aria-label="What’s New in Lighthouse 6.0" data-wpel-link="internal"></a> <div class="article-content-wrap"> <div class="post-header"> <span class="meta"> </span> <h3 class="title">Was ist neu in Lighthouse 6.0?</h3> </div><!--/post-header--> <div class="grav-wrap"><img alt='R Digitales Marketing' src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2070%2070'%3E%3C/svg%3E" data-lazy-srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async' data-lazy-src="https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g"/><noscript><img alt='R Digitales Marketing' src='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=70&d=mm&r=g' srcset='https://secure.gravatar.com/avatar/42eef922ac92618c401c429d408c0225?s=140&d=mm&r=g 2x' class='avatar avatar-70 photo' height='70' width='70' decoding='async'/></noscript><div class="text"> <a href="https://rmarketingdigital.com/de/author/r-marketing-digital/" data-wpel-link="internal">R Digitales Marketing</a><span>20/10/2022</span></div></div> </div> </div> </div> </div></div> <div class="comments-section" data-author-bio="false"> <div class="comment-wrap" data-midnight="dark" data-comments-open="false"> <!-- If comments are closed. --> <!--<p class="nocomments">Comments are closed.</p>--> </div> </div> </div><!--/row--> </div><!--/container main-content--> </div><!--/container-wrap--> <div id="footer-outer" data-midnight="light" data-cols="3" data-custom-color="true" data-disable-copyright="false" data-matching-section-color="false" data-copyright-line="true" data-using-bg-img="false" data-bg-img-overlay="0.3" data-full-width="1" data-using-widget-area="true" data-link-hover="default"> <div id="footer-widgets" data-has-widgets="true" data-cols="3"> <div class="container"> <div class="row"> <div class="col span_4"> <div id="media_image-2" class="widget widget_media_image"><img width="150" height="55" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20150%2055'%3E%3C/svg%3E" class="image wp-image-67039 attachment-thumbnail size-thumbnail" alt="" style="max-width: 100%; height: auto;" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2018/10/headerlogo-blanco-footer-1-150x55.png" /><noscript><img width="150" height="55" src="https://rmarketingdigital.com/wp-content/uploads/2018/10/headerlogo-blanco-footer-1-150x55.png" class="image wp-image-67039 attachment-thumbnail size-thumbnail" alt="" style="max-width: 100%; height: auto;" decoding="async" /></noscript></div><div id="text-5" class="widget widget_text"> <div class="textwidget"><p>R Digitales Marketing: WhatsApp-Marketing. Social Media Management, Webdesign und -management, Online-Werbung, SEM und SEO, E-Mail-Marketing.</p> </div> </div><div id="media_image-4" class="widget widget_media_image"><img width="220" height="110" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20220%20110'%3E%3C/svg%3E" class="image wp-image-67115 attachment-full size-full" alt="Facebook-Partner" style="max-width: 100%; height: auto;" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage-1.jpg" /><noscript><img width="220" height="110" src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage-1.jpg" class="image wp-image-67115 attachment-full size-full" alt="Facebook-Partner" style="max-width: 100%; height: auto;" decoding="async" /></noscript></div><div id="media_image-3" class="widget widget_media_image"><img width="220" height="110" src="data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20220%20110'%3E%3C/svg%3E" class="image wp-image-67114 attachment-full size-full" alt="Google-Partner" style="max-width: 100%; height: auto;" decoding="async" data-lazy-src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage.png" /><noscript><img width="220" height="110" src="https://rmarketingdigital.com/wp-content/uploads/2019/06/Webp.net-resizeimage.png" class="image wp-image-67114 attachment-full size-full" alt="Google-Partner" style="max-width: 100%; height: auto;" decoding="async" /></noscript></div> </div> <div class="col span_4"> <div id="custom_html-3" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><h4>Tutorials und Schulungen</h4> <ul> <li><a href="https://rmarketingdigital.com/de/formacion/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Ausbildung</a></li> <li><a href="https://rmarketingdigital.com/de/power-bi-blog/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Power Bi</a></li> <li><a href="https://rmarketingdigital.com/de/marketing/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Marketing</a></li> <li><a href="https://rmarketingdigital.com/de/dev/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Dev</a></li> <li><a href="https://rmarketingdigital.com/de/elementor/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Elementor</a></li> <li><a href="https://rmarketingdigital.com/de/seo/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">SEO</a></li> <li><a href="https://rmarketingdigital.com/de/elementor/werkzeuge/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Werkzeuge</a></li> <li><a href="https://rmarketingdigital.com/de/excel-vorlagen/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Excel-Vorlagen</a></li> <li><a href="https://rmarketingdigital.com/de/negocios/" rel="noopener noreferrer nofollow external" target="_self" data-wpel-link="external">Geschäft</a></li> </ul> <p><br></p></div></div> </div> <div class="col span_4"> <div id="custom_html-2" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><h4>Wordpress</h4> <ul> <ul> <li><a href="https://rmarketingdigital.com/de/wordpress/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Wordpress 101</a></li> </ul> </ul> <h4>Soziale Netzwerke</h4> <ul> <ul> <li><a href="https://rmarketingdigital.com/de/facebook/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Facebook</a></li> <li><a href="https://rmarketingdigital.com/de/instagram/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Instagram</a></li> <li><a href="https://rmarketingdigital.com/de/whatsapp/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">WhatsApp</a></li> <li><a href="https://rmarketingdigital.com/de/download-torrents/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Torrents</a></li> <li><a href="https://rmarketingdigital.com/de/cine-series/" target="_self" rel="noopener noreferrer nofollow external" data-wpel-link="external">Filme und Serien</a></li> </ul> </ul></div></div><div id="nav_menu-4" class="widget widget_nav_menu"><h4>Idiom</h4><div class="menu-lenguaje-switcher-container"><ul id="menu-lenguaje-switcher" class="menu"><li id="menu-item-93714" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-93714"><a href="https://rmarketingdigital.com/dev/guia-para-desarrolladores-de-aplicaciones-de-pago-de-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Español</span></span></a></li> <li id="menu-item-110873" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher current-language-menu-item menu-item-110873"><a href="https://rmarketingdigital.com/de/dev/entwickler-leitfaden-fur-android-kostenpflichtige-apps/" data-wpel-link="internal"><span data-no-translation><span class="trp-ls-language-name">Deutsch</span></span></a></li> <li id="menu-item-129688" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129688"><a href="https://rmarketingdigital.com/en/dev/developer-guide-for-android-paid-apps/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">English</span></span></a></li> <li id="menu-item-129689" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129689"><a href="https://rmarketingdigital.com/fr/dev/guide-du-developpeur-pour-applications-payantes-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Français</span></span></a></li> </ul></div></div><div id="custom_html-23" class="widget_text widget widget_custom_html"><div class="textwidget custom-html-widget"><h4>Nutzer</h4> <ul> <li style="list-style-type: none;"> <ul> <li class="cookie-policy-p"><a href="https://rmarketingdigital.com/de/datenschutz-bestimmungen/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Datenschutz-Bestimmungen</a></li> <li><a href="https://rmarketingdigital.com/de/politica-de-cookies/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Cookie-Richtlinie</a></li> </ul> </li> </ul> </div></div> </div> </div> </div><!--/container--> </div><!--/footer-widgets--> <div class="row" id="copyright" data-layout="centered"> <div class="container"> <div class="col span_5"> <div class="widget"> </div> <p>© 2024 R Digitales Marketing. </p> </div><!--/span_5--> <div class="col span_7 col_last"> <ul class="social"> </ul> </div><!--/span_7--> </div><!--/container--> </div><!--/row--> </div><!--/footer-outer--> <div id="slide-out-widget-area-bg" class="slide-out-from-right solid"> </div> <div id="slide-out-widget-area" class="slide-out-from-right" data-dropdown-func="separate-dropdown-parent-link" data-back-txt="Zurück" data-no-translation-data-back-txt=""> <div class="inner" data-prepend-menu-mobile="false"> <a class="slide_out_area_close" href="#"><span class="screen-reader-text" data-no-translation="" data-trp-gettext="">Menü schließen</span> <span class="icon-salient-x icon-default-style"></span> </a> <div class="off-canvas-menu-container" role="navigation"> <ul class="menu"> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-67249"><a href="https://rmarketingdigital.com/de/blog/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Blog</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-105292"><a>💻Entwicklung</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105258"><a href="https://rmarketingdigital.com/de/android/" data-wpel-link="internal">Android</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-post menu-item-129712467"><a href="https://rmarketingdigital.com/de/chatgpt/chatgpt-enfocado-al-marketing-digital-y-al-seo/" data-wpel-link="internal">ChatGPT</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-105261"><a href="https://rmarketingdigital.com/de/dev/" data-wpel-link="internal">Dev</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105268"><a href="https://rmarketingdigital.com/de/freeware/" data-wpel-link="internal">Freeware</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105273"><a href="https://rmarketingdigital.com/de/javascript/" data-wpel-link="internal">Javascript</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105282"><a href="https://rmarketingdigital.com/de/servidores-vps/" data-wpel-link="internal">Server / VPS</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129672"><a href="https://rmarketingdigital.com/de/vpn/" data-wpel-link="internal">VPN</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105287"><a href="https://rmarketingdigital.com/de/windows-10/" data-wpel-link="internal">Windows 10</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105276"><a href="https://rmarketingdigital.com/de/negocios/" data-wpel-link="internal">💼Geschäft</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105264"><a href="https://rmarketingdigital.com/de/emprendedores/" data-wpel-link="internal">Unternehmer</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105265"><a href="https://rmarketingdigital.com/de/estrategias/" data-wpel-link="internal">Strategien</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105267"><a href="https://rmarketingdigital.com/de/formacion/" data-wpel-link="internal">Ausbildung</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105275"><a href="https://rmarketingdigital.com/de/marketing/" data-wpel-link="internal">Marketing</a></li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-105637"><a href="https://rmarketingdigital.com/de/excel-vorlagen/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Excel-Vorlagen</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-106686"><a href="https://rmarketingdigital.com/de/power-bi-blog/" data-wpel-link="internal">Power BI</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-109500"><a href="https://rmarketingdigital.com/de/software-gestion/" data-wpel-link="internal">Management-Software</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-109498"><a href="https://rmarketingdigital.com/de/crm/" data-wpel-link="internal">CRM</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-109499"><a href="https://rmarketingdigital.com/de/erp/" data-wpel-link="internal">ERP</a></li> </ul> </li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105270"><a href="https://rmarketingdigital.com/de/guias/" data-wpel-link="internal">👓Führer</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-132612"><a href="https://rmarketingdigital.com/de/files/" data-wpel-link="internal">🗂️Dateien</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-132614"><a href="https://rmarketingdigital.com/de/files/exe/" data-wpel-link="internal">exe</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-132613"><a href="https://rmarketingdigital.com/de/files/dll/" data-wpel-link="internal">dll</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105271"><a href="https://rmarketingdigital.com/de/herramientas/" data-wpel-link="internal">🧰Werkzeuge</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-135948"><a href="https://rmarketingdigital.com/de/marketing-deportivo/" data-wpel-link="internal">⚽Sportmarketing</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105280"><a href="https://rmarketingdigital.com/de/redes-sociales/" data-wpel-link="internal">📱Soziale Netzwerke</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105266"><a href="https://rmarketingdigital.com/de/facebook/" data-wpel-link="internal">Facebook</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105272"><a href="https://rmarketingdigital.com/de/instagram/" data-wpel-link="internal">Instagram</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105274"><a href="https://rmarketingdigital.com/de/linkedin/" data-wpel-link="internal">LinkedIn</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-106055"><a href="https://rmarketingdigital.com/de/streaming/" data-wpel-link="internal">Streaming</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105283"><a href="https://rmarketingdigital.com/de/tiktok/" data-wpel-link="internal">TitTok</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105286"><a href="https://rmarketingdigital.com/de/whatsapp/" data-wpel-link="internal">WhatsApp</a></li> </ul> </li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-129667"><a href="#">📺Freizeit</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129668"><a href="https://rmarketingdigital.com/de/cine-series/" data-wpel-link="internal">Kino und Serie</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129669"><a href="https://rmarketingdigital.com/de/gaming/" data-wpel-link="internal">Spielen</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-129670"><a href="https://rmarketingdigital.com/de/tv-online/" data-wpel-link="internal">Online-Fernsehen</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-108306"><a href="https://rmarketingdigital.com/de/download-torrents/" data-wpel-link="internal">Torrents</a></li> </ul> </li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-105285"><a href="https://rmarketingdigital.com/de/webs/" data-wpel-link="internal">🌐Netze</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105263"><a href="https://rmarketingdigital.com/de/elementor/" data-wpel-link="internal">Elementor</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105262"><a href="https://rmarketingdigital.com/de/ecommerce/" data-wpel-link="internal">E-Commerce</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105288"><a href="https://rmarketingdigital.com/de/wordpress/" data-wpel-link="internal">WordPress</a></li> <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-105281"><a href="https://rmarketingdigital.com/de/seo/" data-wpel-link="internal">SEO</a></li> </ul> </li> </ul> </li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-67232"><a>Dienstleistungen</a> <ul class="sub-menu"> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-78763"><a href="https://rmarketingdigital.com/de/agentur-seo/" data-wpel-link="internal">Web-Positionierung</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67229"><a href="https://rmarketingdigital.com/de/werbung-soziale-netzwerke-facebook-instagram/" data-wpel-link="internal">Werbung in sozialen Netzwerken</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67230"><a href="https://rmarketingdigital.com/de/community-manager/" data-wpel-link="internal">Community Manager</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67228"><a href="https://rmarketingdigital.com/de/follower-boost-instagram-konten/" data-wpel-link="internal">Follower-Boost</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67231"><a href="https://rmarketingdigital.com/de/e-commerce/" data-wpel-link="internal">E-Commerce</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-67710"><a href="https://rmarketingdigital.com/de/losungslernen/" data-wpel-link="internal">E-Learning-Lösungen</a></li> </ul> </li> <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-93606"><a href="https://rmarketingdigital.com/de/glossar-digital-marketing/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Glossar</a></li> </ul> </div> <div id="nav_menu-3" class="widget widget_nav_menu"><div class="menu-r-pop-up-menu-container"><ul id="menu-r-pop-up-menu" class="menu"><li id="menu-item-66980" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-66980"><a href="https://m.me/rmarketingdigital" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer">Fragen Sie nach dem Budget</a></li> <li id="menu-item-78761" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-78761"><a href="https://rmarketingdigital.com/de/arbeite-mit-uns/" data-wpel-link="internal">Arbeite mit uns</a></li> <li id="menu-item-129594" class="menu-item menu-item-type-custom menu-item-object-custom menu-item-has-children menu-item-129594"><a href="#">Idiom</a> <ul class="sub-menu"> <li id="menu-item-129687" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129687"><a href="https://rmarketingdigital.com/en/dev/developer-guide-for-android-paid-apps/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">English</span></span></a></li> <li id="menu-item-129591" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher current-language-menu-item menu-item-129591"><a href="https://rmarketingdigital.com/de/dev/entwickler-leitfaden-fur-android-kostenpflichtige-apps/" data-wpel-link="internal"><span data-no-translation><span class="trp-ls-language-name">Deutsch</span></span></a></li> <li id="menu-item-129593" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129593"><a href="https://rmarketingdigital.com/dev/guia-para-desarrolladores-de-aplicaciones-de-pago-de-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Español</span></span></a></li> <li id="menu-item-129635" class="trp-language-switcher-container menu-item menu-item-type-post_type menu-item-object-language_switcher menu-item-129635"><a href="https://rmarketingdigital.com/fr/dev/guide-du-developpeur-pour-applications-payantes-android/" data-wpel-link="external" target="_self" rel="nofollow external noopener noreferrer"><span data-no-translation><span class="trp-ls-language-name">Français</span></span></a></li> </ul> </li> </ul></div></div> </div> <div class="bottom-meta-wrap"><ul class="off-canvas-social-links"><li><a target="_self" rel="noopener nofollow external noreferrer" href="https://www.facebook.com/R-Marketing-Digital-1995820950678942/" data-wpel-link="external"><i class="fa fa-facebook"></i></a></li><li><a target="_self" rel="noopener nofollow external noreferrer" href="https://www.linkedin.com/company/r-marketing-digital/" data-wpel-link="external"><i class="fa fa-linkedin"></i></a></li><li><a target="_self" rel="noopener nofollow external noreferrer" href="https://www.instagram.com/rmarketingdigital/" data-wpel-link="external"><i class="fa fa-instagram"></i></a></li><li><a target="_self" rel="noopener nofollow external noreferrer" href="http://m.me/rmarketingdigital" data-wpel-link="external"><i class="fa fa-phone"></i></a></li><li><a target="_blank" rel="noopener" href="mailto:hola@rmarketingdigital.com"><i class="fa fa-envelope"></i></a></li></ul></div><!--/bottom-meta-wrap--> </div> </div> <!--/ajax-content-wrap--> <template id="tp-language" data-tp-language="de_DE"></template> <!-- Lockers: user tracker for visibility filters OnePress, bizpanda.com --> <script type="rocketlazyloadscript"> window.__bp_session_timeout = '900'; window.__bp_session_freezing = 0; window.bizpanda||(window.bizpanda={}),window.bizpanda.bp_can_store_localy=function(){return!1},window.bizpanda.bp_ut_get_cookie=function(e){for(var n=e+"=",i=document.cookie.split(";"),o=0;o<i.length;o++){for(var t=i[o];" "==t.charAt(0);)t=t.substring(1);if(0==t.indexOf(n))return decodeURIComponent(t.substring(n.length,t.length))}return!1},window.bizpanda.bp_ut_set_cookie=function(e,n,i){var o=new Date;o.setTime(o.getTime()+24*i*60*60*1e3);var t="expires="+o.toUTCString();document.cookie=e+"="+encodeURIComponent(n)+"; "+t+"; path=/"},window.bizpanda.bp_ut_get_obj=function(e){var n=null;if(!(n=window.bizpanda.bp_can_store_localy()?window.localStorage.getItem("bp_ut_session"):window.bizpanda.bp_ut_get_cookie("bp_ut_session")))return!1;n=(n=n.replace(/\-c\-/g,",")).replace(/\-q\-/g,'"');try{n=JSON.parse(n)}catch(e){return!1}return n.started+1e3*e<(new Date).getTime()&&(n=null),n},window.bizpanda.bp_ut_set_obj=function(e,n){e.started&&window.__bp_session_freezing||(e.started=(new Date).getTime()),(e=JSON.stringify(e))&&(e=(e=e.replace(/\"/g,"-q-")).replace(/\,/g,"-c-")),window.bizpanda.bp_can_store_localy()?window.localStorage.setItem("bp_ut_session",e):window.bizpanda.bp_ut_set_cookie("bp_ut_session",e,5e3)},window.bizpanda.bp_ut_count_pageview=function(){var e=window.bizpanda.bp_ut_get_obj(window.__bp_session_timeout);e||(e={}),e.pageviews||(e.pageviews=0),0===e.pageviews&&(e.referrer=document.referrer,e.landingPage=window.location.href,e.pageviews=0),e.pageviews++,window.bizpanda.bp_ut_set_obj(e)},window.bizpanda.bp_ut_count_locker_pageview=function(){var e=window.bizpanda.bp_ut_get_obj(window.__bp_timeout);e||(e={}),e.lockerPageviews||(e.lockerPageviews=0),e.lockerPageviews++,window.bizpanda.bp_ut_set_obj(e)},window.bizpanda.bp_ut_count_pageview(); </script> <!-- / --> <link data-minify="1" data-pagespeed-no-defer data-nowprocket data-wpacu-skip data-no-optimize data-noptimize rel='stylesheet' id='main-styles-non-critical-css' href='https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/css/build/style-non-critical.css?ver=1718893866' type='text/css' media='all' /> <link data-minify="1" data-pagespeed-no-defer data-nowprocket data-wpacu-skip data-no-optimize data-noptimize rel='stylesheet' id='fancyBox-css' href='https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/css/build/plugins/jquery.fancybox.css?ver=1718893866' type='text/css' media='all' /> <link data-minify="1" data-pagespeed-no-defer data-nowprocket data-wpacu-skip data-no-optimize data-noptimize rel='stylesheet' id='nectar-ocm-core-css' href='https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/css/build/off-canvas/core.css?ver=1718893866' type='text/css' media='all' /> <script type="text/javascript" id="trp-dynamic-translator-js-extra"> /* <![CDATA[ */ var trp_data = {"trp_custom_ajax_url":"https:\/\/rmarketingdigital.com\/wp-content\/plugins\/translatepress-multilingual\/includes\/trp-ajax.php","trp_wp_ajax_url":"https:\/\/rmarketingdigital.com\/wp-admin\/admin-ajax.php","trp_language_to_query":"de_DE","trp_original_language":"es_ES","trp_current_language":"de_DE","trp_skip_selectors":["[data-no-translation]","[data-no-dynamic-translation]","[data-trp-translate-id-innertext]","script","style","head","trp-span","translate-press","[data-trp-translate-id]","[data-trpgettextoriginal]","[data-trp-post-slug]"],"trp_base_selectors":["data-trp-translate-id","data-trpgettextoriginal","data-trp-post-slug"],"trp_attributes_selectors":{"text":{"accessor":"outertext","attribute":false},"block":{"accessor":"innertext","attribute":false},"image_src":{"selector":"img[src]","accessor":"src","attribute":true},"submit":{"selector":"input[type='submit'],input[type='button'], input[type='reset']","accessor":"value","attribute":true},"placeholder":{"selector":"input[placeholder],textarea[placeholder]","accessor":"placeholder","attribute":true},"title":{"selector":"[title]","accessor":"title","attribute":true},"a_href":{"selector":"a[href]","accessor":"href","attribute":true},"button":{"accessor":"outertext","attribute":false},"option":{"accessor":"innertext","attribute":false},"aria_label":{"selector":"[aria-label]","accessor":"aria-label","attribute":true},"image_alt":{"selector":"img[alt]","accessor":"alt","attribute":true},"meta_desc":{"selector":"meta[name=\"description\"],meta[property=\"og:title\"],meta[property=\"og:description\"],meta[property=\"og:site_name\"],meta[property=\"og:image:alt\"],meta[name=\"twitter:title\"],meta[name=\"twitter:description\"],meta[name=\"twitter:image:alt\"],meta[name=\"DC.Title\"],meta[name=\"DC.Description\"],meta[property=\"article:section\"],meta[property=\"article:tag\"]","accessor":"content","attribute":true},"page_title":{"selector":"title","accessor":"innertext","attribute":false},"meta_desc_img":{"selector":"meta[property=\"og:image\"],meta[property=\"og:image:secure_url\"],meta[name=\"twitter:image\"]","accessor":"content","attribute":true}},"trp_attributes_accessors":["outertext","innertext","src","value","placeholder","title","href","aria-label","alt","content"],"gettranslationsnonceregular":"c31e8c80ab","showdynamiccontentbeforetranslation":"","skip_strings_from_dynamic_translation":[],"skip_strings_from_dynamic_translation_for_substrings":{"href":["amazon-adsystem","googleads","g.doubleclick"]},"duplicate_detections_allowed":"100","trp_translate_numerals_opt":"no","trp_no_auto_translation_selectors":["[data-no-auto-translation]"]}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/translatepress-multilingual/assets/js/trp-translate-dom-changes.js?ver=1718893869" id="trp-dynamic-translator-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/contact-form-7/includes/swv/js/index.js?ver=1718893866" id="swv-js" defer></script> <script type="text/javascript" id="contact-form-7-js-extra"> /* <![CDATA[ */ var wpcf7 = {"api":{"root":"https:\/\/rmarketingdigital.com\/de\/wp-json\/","namespace":"contact-form-7\/v1"},"cached":"1"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/contact-form-7/includes/js/index.js?ver=1718893866" id="contact-form-7-js" defer></script> <script type="text/javascript" id="wpcf7-redirect-script-js-extra"> /* <![CDATA[ */ var wpcf7r = {"ajax_url":"https:\/\/rmarketingdigital.com\/wp-admin\/admin-ajax.php"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/plugins/wpcf7-redirect/build/js/wpcf7r-fe.js?ver=1718893866" id="wpcf7-redirect-script-js" defer></script> <script type="text/javascript" id="ez-toc-scroll-scriptjs-js-extra"> /* <![CDATA[ */ var eztoc_smooth_local = {"scroll_offset":"30","add_request_uri":""}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/assets/js/smooth_scroll.min.js?ver=2.0.67.1" id="ez-toc-scroll-scriptjs-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/vendor/js-cookie/js.cookie.min.js?ver=2.2.1" id="ez-toc-js-cookie-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/vendor/sticky-kit/jquery.sticky-kit.min.js?ver=1.9.2" id="ez-toc-jquery-sticky-kit-js" defer></script> <script type="text/javascript" id="ez-toc-js-js-extra"> /* <![CDATA[ */ var ezTOC = {"smooth_scroll":"1","visibility_hide_by_default":"","scroll_offset":"30","fallbackIcon":"<span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span>"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/easy-table-of-contents/assets/js/front.min.js?ver=2.0.67.1-1720133908" id="ez-toc-js-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" id="rocket-browser-checker-js-after"> /* <![CDATA[ */ "use strict";var _createClass=function(){function defineProperties(target,props){for(var i=0;i<props.length;i++){var descriptor=props[i];descriptor.enumerable=descriptor.enumerable||!1,descriptor.configurable=!0,"value"in descriptor&&(descriptor.writable=!0),Object.defineProperty(target,descriptor.key,descriptor)}}return function(Constructor,protoProps,staticProps){return protoProps&&defineProperties(Constructor.prototype,protoProps),staticProps&&defineProperties(Constructor,staticProps),Constructor}}();function _classCallCheck(instance,Constructor){if(!(instance instanceof Constructor))throw new TypeError("Cannot call a class as a function")}var RocketBrowserCompatibilityChecker=function(){function RocketBrowserCompatibilityChecker(options){_classCallCheck(this,RocketBrowserCompatibilityChecker),this.passiveSupported=!1,this._checkPassiveOption(this),this.options=!!this.passiveSupported&&options}return _createClass(RocketBrowserCompatibilityChecker,[{key:"_checkPassiveOption",value:function(self){try{var options={get passive(){return!(self.passiveSupported=!0)}};window.addEventListener("test",null,options),window.removeEventListener("test",null,options)}catch(err){self.passiveSupported=!1}}},{key:"initRequestIdleCallback",value:function(){!1 in window&&(window.requestIdleCallback=function(cb){var start=Date.now();return setTimeout(function(){cb({didTimeout:!1,timeRemaining:function(){return Math.max(0,50-(Date.now()-start))}})},1)}),!1 in window&&(window.cancelIdleCallback=function(id){return clearTimeout(id)})}},{key:"isDataSaverModeOn",value:function(){return"connection"in navigator&&!0===navigator.connection.saveData}},{key:"supportsLinkPrefetch",value:function(){var elem=document.createElement("link");return elem.relList&&elem.relList.supports&&elem.relList.supports("prefetch")&&window.IntersectionObserver&&"isIntersecting"in IntersectionObserverEntry.prototype}},{key:"isSlowConnection",value:function(){return"connection"in navigator&&"effectiveType"in navigator.connection&&("2g"===navigator.connection.effectiveType||"slow-2g"===navigator.connection.effectiveType)}}]),RocketBrowserCompatibilityChecker}(); /* ]]> */ </script> <script type="text/javascript" id="rocket-preload-links-js-extra"> /* <![CDATA[ */ var RocketPreloadLinksConfig = {"excludeUris":"\/de(\/(?:.+\/)?feed(?:\/(?:.+\/?)?)?$|\/(?:.+\/)?embed\/|\/(index\\.php\/)?wp\\-json(\/.*|$))|\/refer\/|\/go\/|\/recommend\/|\/recommends\/","usesTrailingSlash":"1","imageExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php","fileExt":"jpg|jpeg|gif|png|tiff|bmp|webp|avif|pdf|doc|docx|xls|xlsx|php|html|htm","siteUrl":"https:\/\/rmarketingdigital.com\/de\/","onHoverDelay":"100","rateThrottle":"3"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" id="rocket-preload-links-js-after"> /* <![CDATA[ */ (function() { "use strict";var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},e=function(){function i(e,t){for(var n=0;n<t.length;n++){var i=t[n];i.enumerable=i.enumerable||!1,i.configurable=!0,"value"in i&&(i.writable=!0),Object.defineProperty(e,i.key,i)}}return function(e,t,n){return t&&i(e.prototype,t),n&&i(e,n),e}}();function i(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var t=function(){function n(e,t){i(this,n),this.browser=e,this.config=t,this.options=this.browser.options,this.prefetched=new Set,this.eventTime=null,this.threshold=1111,this.numOnHover=0}return e(n,[{key:"init",value:function(){!this.browser.supportsLinkPrefetch()||this.browser.isDataSaverModeOn()||this.browser.isSlowConnection()||(this.regex={excludeUris:RegExp(this.config.excludeUris,"i"),images:RegExp(".("+this.config.imageExt+")$","i"),fileExt:RegExp(".("+this.config.fileExt+")$","i")},this._initListeners(this))}},{key:"_initListeners",value:function(e){-1<this.config.onHoverDelay&&document.addEventListener("mouseover",e.listener.bind(e),e.listenerOptions),document.addEventListener("mousedown",e.listener.bind(e),e.listenerOptions),document.addEventListener("touchstart",e.listener.bind(e),e.listenerOptions)}},{key:"listener",value:function(e){var t=e.target.closest("a"),n=this._prepareUrl(t);if(null!==n)switch(e.type){case"mousedown":case"touchstart":this._addPrefetchLink(n);break;case"mouseover":this._earlyPrefetch(t,n,"mouseout")}}},{key:"_earlyPrefetch",value:function(t,e,n){var i=this,r=setTimeout(function(){if(r=null,0===i.numOnHover)setTimeout(function(){return i.numOnHover=0},1e3);else if(i.numOnHover>i.config.rateThrottle)return;i.numOnHover++,i._addPrefetchLink(e)},this.config.onHoverDelay);t.addEventListener(n,function e(){t.removeEventListener(n,e,{passive:!0}),null!==r&&(clearTimeout(r),r=null)},{passive:!0})}},{key:"_addPrefetchLink",value:function(i){return this.prefetched.add(i.href),new Promise(function(e,t){var n=document.createElement("link");n.rel="prefetch",n.href=i.href,n.onload=e,n.onerror=t,document.head.appendChild(n)}).catch(function(){})}},{key:"_prepareUrl",value:function(e){if(null===e||"object"!==(void 0===e?"undefined":r(e))||!1 in e||-1===["http:","https:"].indexOf(e.protocol))return null;var t=e.href.substring(0,this.config.siteUrl.length),n=this._getPathname(e.href,t),i={original:e.href,protocol:e.protocol,origin:t,pathname:n,href:t+n};return this._isLinkOk(i)?i:null}},{key:"_getPathname",value:function(e,t){var n=t?e.substring(this.config.siteUrl.length):e;return n.startsWith("/")||(n="/"+n),this._shouldAddTrailingSlash(n)?n+"/":n}},{key:"_shouldAddTrailingSlash",value:function(e){return this.config.usesTrailingSlash&&!e.endsWith("/")&&!this.regex.fileExt.test(e)}},{key:"_isLinkOk",value:function(e){return null!==e&&"object"===(void 0===e?"undefined":r(e))&&(!this.prefetched.has(e.href)&&e.origin===this.config.siteUrl&&-1===e.href.indexOf("?")&&-1===e.href.indexOf("#")&&!this.regex.excludeUris.test(e.href)&&!this.regex.images.test(e.href))}}],[{key:"run",value:function(){"undefined"!=typeof RocketPreloadLinksConfig&&new n(new RocketBrowserCompatibilityChecker({capture:!0,passive:!0}),RocketPreloadLinksConfig).init()}}]),n}();t.run(); }()); /* ]]> */ </script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/jquery.easing.min.js?ver=1.3" id="jquery-easing-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/jquery.mousewheel.min.js?ver=3.1.13" id="jquery-mousewheel-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/priority.js?ver=1718893866" id="nectar_priority-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/transit.min.js?ver=0.9.9" id="nectar-transit-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/waypoints.js?ver=1718893866" id="nectar-waypoints-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/salient-portfolio/js/third-party/imagesLoaded.min.js?ver=4.1.4" id="imagesLoaded-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/hoverintent.min.js?ver=1.9" id="hoverintent-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/jquery.fancybox.js?ver=1718893866" id="fancyBox-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/anime.min.js?ver=4.5.1" id="anime-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/stickkit.js?ver=1718893869" id="stickykit-js" defer></script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/third-party/superfish.js?ver=1718893866" id="superfish-js" defer></script> <script type="text/javascript" id="nectar-frontend-js-extra"> /* <![CDATA[ */ var nectarLove = {"ajaxurl":"https:\/\/rmarketingdigital.com\/wp-admin\/admin-ajax.php","postID":"93401","rooturl":"https:\/\/rmarketingdigital.com\/de\/","disqusComments":"false","loveNonce":"1e9c50f4fd","mapApiKey":""}; var nectarOptions = {"delay_js":"false","quick_search":"false","react_compat":"disabled","header_entrance":"false","dropdown_hover_intent":"default","simplify_ocm_mobile":"0","mobile_header_format":"default","ocm_btn_position":"default","left_header_dropdown_func":"default","ajax_add_to_cart":"0","ocm_remove_ext_menu_items":"remove_images","woo_product_filter_toggle":"0","woo_sidebar_toggles":"true","woo_sticky_sidebar":"0","woo_minimal_product_hover":"default","woo_minimal_product_effect":"default","woo_related_upsell_carousel":"false","woo_product_variable_select":"default","woo_using_cart_addons":"false"}; var nectar_front_i18n = {"menu":"Menu","next":"Next","previous":"Previous","close":"Close"}; /* ]]> */ </script> <script type="rocketlazyloadscript" data-minify="1" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/cache/min/1/wp-content/themes/salient/js/build/init.js?ver=1718893866" id="nectar-frontend-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/plugins/salient-core/js/third-party/touchswipe.min.js?ver=1.0" id="touchswipe-js" defer></script> <script type="rocketlazyloadscript" data-rocket-type="text/javascript" src="https://rmarketingdigital.com/wp-content/themes/salient/js/build/third-party/select2.min.js?ver=4.0.1" id="select2-js" defer></script> <script type="rocketlazyloadscript"></script><script>window.lazyLoadOptions=[{elements_selector:"img[data-lazy-src],.rocket-lazyload",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,callback_loaded:function(element){if(element.tagName==="IFRAME"&&element.dataset.rocketLazyload=="fitvidscompatible"){if(element.classList.contains("lazyloaded")){if(typeof window.jQuery!="undefined"){if(jQuery.fn.fitVids){jQuery(element).parent().fitVids()}}}}}},{elements_selector:".rocket-lazyload",data_src:"lazy-src",data_srcset:"lazy-srcset",data_sizes:"lazy-sizes",class_loading:"lazyloading",class_loaded:"lazyloaded",threshold:300,}];window.addEventListener('LazyLoad::Initialized',function(e){var lazyLoadInstance=e.detail.instance;if(window.MutationObserver){var observer=new MutationObserver(function(mutations){var image_count=0;var iframe_count=0;var rocketlazy_count=0;mutations.forEach(function(mutation){for(var i=0;i<mutation.addedNodes.length;i++){if(typeof mutation.addedNodes[i].getElementsByTagName!=='function'){continue} if(typeof mutation.addedNodes[i].getElementsByClassName!=='function'){continue} images=mutation.addedNodes[i].getElementsByTagName('img');is_image=mutation.addedNodes[i].tagName=="IMG";iframes=mutation.addedNodes[i].getElementsByTagName('iframe');is_iframe=mutation.addedNodes[i].tagName=="IFRAME";rocket_lazy=mutation.addedNodes[i].getElementsByClassName('rocket-lazyload');image_count+=images.length;iframe_count+=iframes.length;rocketlazy_count+=rocket_lazy.length;if(is_image){image_count+=1} if(is_iframe){iframe_count+=1}}});if(image_count>0||iframe_count>0||rocketlazy_count>0){lazyLoadInstance.update()}});var b=document.getElementsByTagName("body")[0];var config={childList:!0,subtree:!0};observer.observe(b,config)}},!1)</script><script data-no-minify="1" async src="https://rmarketingdigital.com/wp-content/plugins/wp-rocket/assets/js/lazyload/17.5/lazyload.min.js"></script></body> </html> <!-- This website is like a Rocket, isn't it? Performance optimized by WP Rocket. Learn more: https://wp-rocket.me - Debug: cached@1722129674 --><script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="1871a4708ba296b898ed21b2-|49" defer></script>