Vous pouvez utiliser l' API Payment Request pour lancer des applications de paiement Android à partir de sites Web exécutés dans une WebView. Cette fonctionnalité utilise la même API JavaScript déjà disponible dans Chrome.
Cette fonctionnalité est disponible à partir de la version 136 de WebView, qui est généralement fournie avec Chrome 136.
Configurer Payment Request dans les applications hôtes WebView
Pour lancer des applications de paiement Android depuis WebView, l'API Payment Request interroge le système à l'aide d'intents Android.
Pour ce faire, l'application hôte WebView doit déclarer ces intents dans son fichier AndroidManifest.xml.
Par défaut, Payment Request est désactivé dans WebView.
Pour l'activer à l'aide de WebSettingsCompat à partir de la version 1.14.0 ou ultérieure de Jetpack Webkit, procédez comme suit :
Étape 1 : Ajoutez la dépendance Jetpack Webkit
Kotlin (build.gradle.kts)
dependencies {
implementation("androidx.webkit:webkit:1.14.0")
}
Groovy (build.gradle)
dependencies {
implementation 'androidx.webkit:webkit:1.14.0'
}
Catalogue des versions
[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
Étape 2 : Importez les classes requises
Ces classes vous permettent d'accéder aux paramètres WebView et de les configurer, et de vérifier la compatibilité des fonctionnalités au moment de l'exécution.
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
Étape 3 : Activez Payment Request dans le code WebView
Cette étape active la fonctionnalité de demande de paiement dans votre WebView et garantit que le site peut la déclencher à l'aide de JavaScript.
Cette étape active la fonctionnalité de demande de paiement dans votre WebView et garantit que le site peut la déclencher à l'aide de JavaScript.
Kotlin (Compose)
AndroidView(
factory = {
WebView(it).apply {
settings.javaScriptEnabled = true
if (WebViewFeature.isFeatureSupported(
WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(settings, true);
}
}
},
update = {it.loadUrl(url)
}
)
Java
WebView webView = findViewById(R.id.webview);
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavascriptEnabled(true);
if (WebViewFeature.isFeatureSupported(
WebViewFeature.PAYMENT_REQUEST)) {
WebSettingsCompat.setPaymentRequestEnabled(webSettings, true);
}
Étape 4 : Ajoutez des filtres d'intent dans AndroidManifest.xml
Ces filtres permettent à WebView de découvrir et d'appeler les applications de paiement Android à l'aide d'intents système :
<queries>
<intent>
<action android:name="org.chromium.intent.action.PAY"/>
</intent>
<intent>
<action android:name="org.chromium.intent.action.IS_READY_TO_PAY"/>
</intent>
<intent>
<action android:name="org.chromium.intent.action.UPDATE_PAYMENT_DETAILS"/>
</intent>
</queries>
Utilisez les intents suivants dans votre AndroidManifest.xml pour prendre en charge les principales fonctionnalités de la demande de paiement :
org.chromium.intent.action.PAY: permet à WebView d'appeler des applications de paiement Android et de recevoir des réponses de paiement. Pour en savoir plus, consultez le guide du développeur sur les applications de paiement Android.org.chromium.intent.action.IS_READY_TO_PAY: permet aux sites Web de vérifier si l'utilisateur a configuré un mode de paiement compatible. Pour en savoir plus, consultez le guide du développeur d'applications de paiement Android .org.chromium.intent.action.UPDATE_PAYMENT_DETAILS: prend en charge les mises à jour dynamiques, par exemple lorsque l'utilisateur modifie son adresse ou son option de livraison dans l'application de paiement. Pour en savoir plus, consultez Fournir des informations de livraison et de contact à partir d'une application de paiement Android.
Étape 5 : Recompilez et publiez votre application
Une fois ces modifications apportées, recompilez votre application et publiez une version mise à jour sur le Play Store.
Facultatif : Personnaliser les vérifications de disponibilité
En plus de lancer des applications de paiement Android, l'API Payment Request permet aux sites Web de vérifier si l'utilisateur est prêt à payer. Par exemple, les sites Web peuvent détecter si l'utilisateur a configuré un mode de paiement compatible.
Chrome inclut un paramètre qui permet aux utilisateurs d'activer ou de désactiver cette vérification. Les applications hôtes WebView peuvent proposer un bouton semblable à l'aide de :
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
Ce paramètre est activé par défaut (true). Lorsqu'il est actif, il permet aux sites Web exécutés dans WebView de détecter si l'utilisateur a enregistré un instrument de paiement.
Vérifier la compatibilité de Payment Request dans JavaScript
Une fois que WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) a été appelé en Java ou Kotlin, l'interface window.PaymentRequest devient disponible en JavaScript. Cela peut être utilisé pour la détection de fonctionnalités sur la page Web :
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
Lorsque window.PaymentRequest est disponible, la page Web peut continuer à lancer une transaction de paiement.
Intégrer des applications de paiement Android à Payment Request
Pour prendre en charge la demande de paiement, les applications de paiement Android doivent répondre à des intents système spécifiques et gérer les données de paiement de manière sécurisée. Ces guides expliquent comment enregistrer des modes de paiement, implémenter votre service de paiement et protéger votre application :
- Guide du développeur d'applications de paiement Android : créez et configurez votre application de paiement, y compris la façon de gérer les intents et de valider l'application appelante.
- Configurer un mode de paiement : enregistrez votre mode de paiement et définissez ses fonctionnalités.
Sécuriser votre application contre les utilisations abusives
N'importe quelle application peut appeler les intents de paiement Android org.chromium.intent.action.PAY, IS_READY_TO_PAY et UPDATE_PAYMENT_DETAILS. Les applications hôtes WebView peuvent également observer, lancer et intercepter les appels Payment Request. Étant donné que WebView s'exécute dans le processus de l'application hôte, il ne peut pas limiter la façon dont ces intents sont utilisés.
Les applications malveillantes peuvent exploiter cette fonctionnalité pour lancer des attaques Oracle.
Lors d'une attaque Oracle, une application de paiement révèle involontairement des informations qu'elle ne devrait pas. Par exemple, un pirate informatique peut utiliser IS_READY_TO_PAY pour découvrir les instruments de paiement dont dispose l'utilisateur.
Vous devez intégrer des protections à votre application de paiement pour vous défendre contre ce type d'utilisation abusive.
Utilisez les stratégies suivantes pour limiter les utilisations abusives :
- Limiter les requêtes : limitez la fréquence à laquelle votre application répond à
IS_READY_TO_PAY. Par exemple, ne répondez qu'une fois toutes les 30 minutes. - Utiliser le chiffrement : chiffrez les réponses sensibles pour que seuls vos serveurs marchands de confiance puissent les déchiffrer. Effectuez toujours le chiffrement et le déchiffrement côté serveur.
- Restreindre l'accès : gérez une liste d'autorisation des applications hôtes WebView de confiance à l'aide de leurs noms de package et de leurs certificats de signature SHA256. Pour en savoir plus, consultez le guide du développeur d'applications de paiement Android.