Payment Request API का इस्तेमाल करके, वेबव्यू में Android के पेमेंट ऐप्लिकेशन इस्तेमाल करने की सुविधा

WebView में चल रही वेबसाइटों से, Android के पेमेंट ऐप्लिकेशन लॉन्च करने के लिए, पेमेंट रिक्वेस्ट एपीआई का इस्तेमाल किया जा सकता है. यह सुविधा, Chrome में पहले से मौजूद उसी JavaScript API का इस्तेमाल करके काम करती है.

यह सुविधा, वेबव्यू के 136 वर्शन से उपलब्ध है. आम तौर पर, यह सुविधा Chrome के 136 वर्शन के साथ शिप होती है.

वेबव्यू होस्ट ऐप्लिकेशन में पेमेंट का अनुरोध सेट अप करना

वेबव्यू से Android के पेमेंट ऐप्लिकेशन लॉन्च करने के लिए, पेमेंट रिक्वेस्ट एपीआई, Android इंटेंट का इस्तेमाल करके सिस्टम से क्वेरी करता है. इस सुविधा का इस्तेमाल करने के लिए, वेबव्यू होस्ट ऐप्लिकेशन को अपनी AndroidManifest.xml फ़ाइल में उन इंटेंट का एलान करना होगा.

वेबव्यू में, पेमेंट का अनुरोध करने की सुविधा डिफ़ॉल्ट रूप से बंद रहती है.

AndroidX WebKit के 1.14.0 या उसके बाद के वर्शन में WebSettingsCompat का इस्तेमाल करके, इसे चालू करने के लिए यह तरीका अपनाएं:

पहला चरण: AndroidX 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" }

दूसरा चरण: ज़रूरी क्लास इंपोर्ट करना

इन क्लास की मदद से, वेबव्यू की सेटिंग को ऐक्सेस और कॉन्फ़िगर किया जा सकता है. साथ ही, रनटाइम के दौरान सुविधा के काम करने की जांच की जा सकती है.

import android.webkit.WebSettings;
import android.webkit.WebView;
import androidx.webkit.WebSettingsCompat;
import androidx.webkit.WebViewFeature;

तीसरा चरण: वेबव्यू कोड में पेमेंट का अनुरोध करने की सुविधा चालू करना

यह चरण, आपके वेबव्यू में पेमेंट का अनुरोध करने की सुविधा चालू करता है. साथ ही, यह पक्का करता है कि साइट, JavaScript का इस्तेमाल करके इसे ट्रिगर कर सकती है.

यह चरण, आपके वेबव्यू में पेमेंट का अनुरोध करने की सुविधा चालू करता है. साथ ही, यह पक्का करता है कि साइट, 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);
}

चौथा चरण: AndroidManifest.xml में इंटेंट फ़िल्टर जोड़ना

इन फ़िल्टर की मदद से, वेबव्यू, सिस्टम इंटेंट का इस्तेमाल करके 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 में इन इंटेंट का इस्तेमाल करें:

पांचवां चरण: अपना ऐप्लिकेशन फिर से बनाना और पब्लिश करना

ये बदलाव करने के बाद, अपना ऐप्लिकेशन फिर से बनाएं और Play Store पर अपडेट किया गया वर्शन रिलीज़ करें.

ज़रूरी नहीं: तैयारी की जांच को पसंद के मुताबिक बनाना

Android पर पेमेंट ऐप्लिकेशन लॉन्च करने के अलावा, पेमेंट रिक्वेस्ट एपीआई की मदद से वेबसाइटें यह पता लगा सकती हैं कि उपयोगकर्ता पेमेंट करने के लिए तैयार है या नहीं. उदाहरण के लिए, वेबसाइटें यह पता लगा सकती हैं कि उपयोगकर्ता ने, इस्तेमाल किए जा सकने वाले पेमेंट का कोई तरीका सेट अप किया है या नहीं.

Chrome में एक सेटिंग होती है, जिसकी मदद से उपयोगकर्ता इस जांच को चालू या बंद कर सकते हैं. वेबव्यू होस्ट ऐप्लिकेशन, मिलता-जुलता टॉगल इनका इस्तेमाल करके दे सकते हैं:

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

यह सेटिंग डिफ़ॉल्ट रूप से चालू होती है (true). चालू होने पर, यह वेबव्यू में चल रही वेबसाइटों को यह पता लगाने की अनुमति देती है कि उपयोगकर्ता के पास रजिस्टर किया गया पेमेंट इंस्ट्रूमेंट है या नहीं.

JavaScript में पेमेंट का अनुरोध करने की सुविधा उपलब्ध है या नहीं, यह देखना

Java या Kotlin में WebSettingsCompat.setPaymentRequestEnabled(webSettings, true) को कॉल करने के बाद, window.PaymentRequest इंटरफ़ेस JavaScript में उपलब्ध हो जाता है. इसका इस्तेमाल, वेबपेज पर सुविधाओं का पता लगाने के लिए किया जा सकता है:

if (window.PaymentRequest) {
  // Payment Request is available.
} else {
  // Payment Request is not available.
}

window.PaymentRequest उपलब्ध होने पर, वेबपेज पेमेंट लेन-देन शुरू करना जारी रख सकता है.

Android के पेमेंट ऐप्लिकेशन को पेमेंट के अनुरोध के साथ इंटिग्रेट करना

पेमेंट का अनुरोध करने की सुविधा के साथ काम करने के लिए, Android के पेमेंट ऐप्लिकेशन को सिस्टम के खास इंटेंट का जवाब देना होगा और पेमेंट डेटा को सुरक्षित तरीके से मैनेज करना होगा. इन गाइड में, पेमेंट के तरीकों को रजिस्टर करने, पेमेंट की सेवा लागू करने, और अपने ऐप्लिकेशन को सुरक्षित रखने का तरीका बताया गया है:

अपने ऐप्लिकेशन को गलत इस्तेमाल से सुरक्षित करना

कोई भी ऐप्लिकेशन, Android के पेमेंट इंटेंट org.chromium.intent.action.PAY, IS_READY_TO_PAY, और UPDATE_PAYMENT_DETAILS को कॉल कर सकता है. वेबव्यू होस्ट ऐप्लिकेशन, पेमेंट के अनुरोध के कॉल को देख सकते हैं, शुरू कर सकते हैं, और उन्हें इंटरसेप्ट कर सकते हैं. वेबव्यू, होस्ट ऐप्लिकेशन की प्रोसेस में चलता है. इसलिए, यह इन इंटेंट के इस्तेमाल पर पाबंदी नहीं लगा सकता. नुकसान पहुंचाने वाले ऐप्लिकेशन इसका फ़ायदा उठाकर, ऑरेकल अटैक लॉन्च कर सकते हैं.

ऑरेकल अटैक में, पेमेंट ऐप्लिकेशन अनजाने में ऐसी जानकारी ज़ाहिर कर देता है जिसे ज़ाहिर नहीं करना चाहिए. उदाहरण के लिए, कोई हमलावर IS_READY_TO_PAY का इस्तेमाल करके यह पता लगा सकता है कि उपयोगकर्ता के पास कौनसे पेमेंट इंस्ट्रूमेंट उपलब्ध हैं.

इस तरह के गलत इस्तेमाल से बचने के लिए, आपको अपने पेमेंट ऐप्लिकेशन में सुरक्षा की सुविधाएं जोड़नी होंगी.

गलत इस्तेमाल को कम करने के लिए, इन रणनीतियों का इस्तेमाल करें:

  • अनुरोधों को कम करना: यह तय करें कि आपका ऐप्लिकेशन, IS_READY_TO_PAY के अनुरोधों का जवाब कितनी बार दे. उदाहरण के लिए, हर 30 मिनट में सिर्फ़ एक बार जवाब दें.
  • एन्क्रिप्शन का इस्तेमाल करना: संवेदनशील रिस्पॉन्स एन्क्रिप्ट करें, ताकि सिर्फ़ आपके भरोसेमंद व्यापारी/कंपनी/कारोबारी के सर्वर उन्हें डिक्रिप्ट कर सकें. एन्क्रिप्शन और डिक्रिप्शन की प्रोसेस हमेशा सर्वर साइड पर करें.
  • ऐक्सेस पर पाबंदी लगाएं: भरोसेमंद वेबव्यू होस्ट ऐप्लिकेशन की अनुमति वाली सूची बनाए रखें. इसके लिए, उनके पैकेज के नाम और SHA256 साइनिंग सर्टिफ़िकेट का इस्तेमाल करें. ज़्यादा जानकारी के लिए, Android पर पेमेंट ऐप्लिकेशन बनाने वाले डेवलपर के लिए बनी गाइड पढ़ें.