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

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

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

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

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

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

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

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

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

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

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

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

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

इस चरण से, आपके 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);
}

चौथा चरण: 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 में इन इंटेंट का इस्तेमाल करें, ताकि पेमेंट के अनुरोध से जुड़ी मुख्य सुविधाओं को सपोर्ट किया जा सके:

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

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

ज़रूरी नहीं: सिस्टम की ज़रूरी शर्तें पूरी होने की जांच को अपनी पसंद के मुताबिक बनाएं

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

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

WebSettingsCompat.setHasEnrolledInstrumentEnabled(WebSettings, boolean)

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

जांच करें कि 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 को कॉल कर सकता है. वेबव्यू होस्ट करने वाले ऐप्लिकेशन भी, पेमेंट के अनुरोध से जुड़े कॉल को देख सकते हैं, शुरू कर सकते हैं, और उन्हें इंटरसेप्ट कर सकते हैं. WebView, होस्ट ऐप्लिकेशन की प्रोसेस के अंदर काम करता है. इसलिए, यह इन इंटेंट के इस्तेमाल को सीमित नहीं कर सकता. नुकसान पहुंचाने वाले ऐप्लिकेशन, इसका इस्तेमाल ओरेकल अटैक करने के लिए कर सकते हैं.

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

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

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

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