אפשר להשתמש ב- Payment Request API כדי להפעיל אפליקציות תשלום ל-Android מאתרים שפועלים בתוך WebView. הפעולה הזו מתבצעת באמצעות אותו JavaScript API שכבר זמין ב-Chrome.
התכונה הזו זמינה החל מגרסה 136 של WebView, שבדרך כלל מופצת עם Chrome 136.
הגדרה של בקשת תשלום באפליקציות מארחות של WebView
כדי להפעיל אפליקציות תשלום ל-Android מ-WebView, Payment Request API שולח שאילתה למערכת באמצעות מנגנוני Intent של Android.
כדי לתמוך בזה, אפליקציית המארח של WebView צריכה להצהיר על הכוונות האלה בקובץ AndroidManifest.xml שלה.
כברירת מחדל, התכונה 'בקשת תשלום' מושבתת ב-WebView.
כדי להפעיל את התכונה באמצעות WebSettingsCompat מ-Jetpack Webkit בגרסה 1.14.0 ואילך, פועלים לפי השלבים הבאים:
שלב 1: מוסיפים את התלות של 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'
}
קטלוג גרסאות
[versions]
webkit = "1.14.0"
[libraries]
androidx-ktx = { group = "androidx.webkit", name = "webkit", version.ref = "webkit" }
שלב 2: מייבאים את הכיתות הנדרשות
המחלקות האלה מאפשרות לכם לגשת להגדרות של WebView ולהגדיר אותן, ולבדוק אם יש תמיכה בתכונות בזמן הריצה.
import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;
שלב 3: הפעלת בקשת תשלום בקוד WebView
בשלב הזה מפעילים את התכונה Payment Request ב-WebView, ומוודאים שהאתר יכול להפעיל אותה באמצעות JavaScript.
בשלב הזה מפעילים את התכונה Payment Request ב-WebView, ומוודאים שהאתר יכול להפעיל אותה באמצעות 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);
}
שלב 4: הוספת מסנני Intent בקובץ AndroidManifest.xml
המסננים האלה מאפשרים ל-WebView לגלות ולהפעיל אפליקציות תשלום ל-Android באמצעות כוונות מערכת:
<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>
כדי לתמוך בתכונות מרכזיות של בקשות תשלום, צריך להשתמש בכוונות הבאות ב-AndroidManifest.xml:
-
org.chromium.intent.action.PAY: מאפשר ל-WebView להפעיל אפליקציות תשלום של Android ולקבל תשובות לגבי תשלומים. מידע נוסף זמין במדריך למפתחים בנושא אפליקציות תשלום ל-Android. -
org.chromium.intent.action.IS_READY_TO_PAY: מאפשרת לאתרים לבדוק אם המשתמש הגדיר אמצעי תשלום נתמך. מידע נוסף זמין במדריך למפתחים של אפליקציות תשלום ל-Android -
org.chromium.intent.action.UPDATE_PAYMENT_DETAILS: תומך בעדכונים דינמיים, למשל כשהמשתמש משנה את כתובת המשלוח או את אפשרות המשלוח באפליקציית התשלום. מידע נוסף זמין במאמר איך מספקים פרטי משלוח ופרטים ליצירת קשר מאפליקציית תשלום ל-Android.
שלב 5: יוצרים מחדש את האפליקציה ומפרסמים אותה
אחרי שמבצעים את השינויים האלה, צריך לבנות מחדש את האפליקציה ולפרסם גרסה מעודכנת שלה בחנות Play.
אופציונלי: התאמה אישית של בדיקות המוכנות
בנוסף להפעלת אפליקציות תשלום ל-Android, Payment Request API מאפשר לאתרים לבדוק אם המשתמש מוכן לשלם. לדוגמה, אתרים יכולים לזהות אם המשתמש הגדיר אמצעי תשלום נתמך.
ב-Chrome יש הגדרה שמאפשרת למשתמשים להפעיל או להשבית את הבדיקה הזו. אפליקציות מארחות של WebView יכולות להציע מתג דומה באמצעות:
WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)
ההגדרה הזו מופעלת כברירת מחדל (true). כשהיא פעילה, היא מאפשרת לאתרים שפועלים ב-WebView לזהות אם למשתמש יש אמצעי תשלום רשום.
בדיקה אם יש תמיכה בבקשות תשלום ב-JavaScript
אחרי שקוראים ל-WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) ב-Java או ב-Kotlin, הממשק window.PaymentRequest הופך לזמין ב-JavaScript. אפשר להשתמש בערך הזה כדי לזהות תכונות בדף האינטרנט:
if (window.PaymentRequest) {
// Payment Request is available.
} else {
// Payment Request is not available.
}
אם window.PaymentRequest זמין, דף האינטרנט יכול להמשיך ולהתחיל עסקת תשלום.
שילוב אפליקציות תשלום ל-Android עם בקשת תשלום
כדי לתמוך בבקשת תשלום, אפליקציות תשלום ל-Android צריכות להגיב לכוונות מערכת ספציפיות ולטפל בנתוני התשלום בצורה מאובטחת. במדריכים האלה מוסבר איך לרשום אמצעי תשלום, להטמיע את שירות התשלומים ולהגן על האפליקציה:
- מדריך למפתחים של אפליקציות תשלום ל-Android: איך ליצור ולהגדיר את אפליקציית התשלום, כולל איך לטפל ב-Intents ולאמת את האפליקציה שקוראת לאפליקציה.
- הגדרת אמצעי תשלום: רושמים את אמצעי התשלום ומגדירים את היכולות שלו.
אבטחת האפליקציה מפני שימוש לרעה
כל אפליקציה יכולה לקרוא לכוונות התשלום של Android org.chromium.intent.action.PAY,
IS_READY_TO_PAY ו-UPDATE_PAYMENT_DETAILS. אפליקציות מארחות של WebView יכולות גם לצפות בשיחות של בקשות תשלום, ליזום אותן וליירט אותן. מכיוון ש-WebView פועל בתהליך של אפליקציית המארח, הוא לא יכול להגביל את אופן השימוש ב-Intents האלה.
אפליקציות זדוניות יכולות לנצל את זה כדי לבצע תקיפות אורקל.
במתקפת אורקל, אפליקציית תשלומים חושפת שלא במכוון מידע שהיא לא אמורה לחשוף. לדוגמה, תוקף יכול להשתמש ב-IS_READY_TO_PAY כדי לגלות אילו אמצעי תשלום זמינים למשתמש.
אתם צריכים להוסיף לאפליקציית התשלומים אמצעי הגנה שימנעו שימוש לרעה מהסוג הזה.
כדי לצמצם את הסיכון לניצול לרעה, כדאי להשתמש בשיטות הבאות:
- ויסות נתונים (throttle) של בקשות: הגבלת התדירות שבה האפליקציה מגיבה ל-
IS_READY_TO_PAY. לדוגמה, להגיב רק פעם אחת כל 30 דקות. - שימוש בהצפנה: הצפנה של תשובות רגישות כדי שרק שרתי סוחר מהימנים יוכלו לפענח אותן. תמיד מבצעים הצפנה ופענוח בצד השרת.
- הגבלת הגישה: שמירה על רשימת היתרים של אפליקציות מארחות מהימנות של WebView באמצעות שמות החבילות ואישורי החתימה שלהן מסוג SHA256. מידע נוסף זמין במדריך למפתחים של אפליקציות תשלום ל-Android.