Google Pay से मिली सूचना पर पेमेंट करना

Quick payments के डेमो को इंटिग्रेट करना

कुछ कारोबारों को किसी सेवा का ऐक्सेस पाने या फिर से ऐक्सेस पाने के लिए, तुरंत पेमेंट करने की ज़रूरत होती है. उदाहरण के लिए: मोबाइल डेटा प्लान, घर के बिल, सेवा अपग्रेड करना या पहले अस्वीकार किए गए पेमेंट. कई बार, कारोबार अपने मोबाइल डिवाइसों पर उपयोगकर्ताओं को इन इवेंट के बारे में सूचना देते हैं. हालांकि, असली पेमेंट करने के लिए, उपयोगकर्ता को कॉन्टेक्स्ट बदलना होगा और समय लेने वाले फ़ॉर्म भरने होंगे. इससे पेमेंट पूरा होने की संभावना काफ़ी कम हो जाती है.

इस पैटर्न की मदद से, सूचना में सीधे तौर पर पेमेंट से जुड़ी कार्रवाई जोड़ी जा सकती है. इससे लोग तुरंत कार्रवाई कर पाते हैं और सिर्फ़ दो टैप में पेमेंट कर पाते हैं. इस गाइड में, आपको अपने Android ऐप्लिकेशन पर ऐसा ही अनुभव देने का तरीका बताया जाएगा.

ज़रूरी शर्तें

इस गाइड में यह माना गया है कि आपके Android ऐप्लिकेशन में Google Pay इंटिग्रेशन चालू है. अगर आपने अब तक इंटिग्रेशन नहीं किया है, तो हमारे ट्यूटोरियल या सिलसिलेवार निर्देशों वाले कोडलैब की मदद से शुरू करें.

बिल्डिंग ब्लॉक

Android पर, सूचनाओं में Google Pay बटन जोड़ने की सुविधा इन दो बुनियादी चीज़ों पर आधारित होती है:

सूचनाओं के लिए पसंद के मुताबिक लेआउट

Android पर मिलने वाली सामान्य सूचनाओं की संरचना तय होती है. यह अलग-अलग विज़ुअल कॉन्टेक्स्ट के हिसाब से बदलती है. स्टैंडर्ड टेंप्लेट का इस्तेमाल करने से, यह पक्का किया जा सकता है कि डिवाइस के ओरिएंटेशन, फ़ॉर्म फ़ैक्टर, और ओएस वर्शन के बावजूद, आपकी सूचनाएं सही तरीके से दिखें. इसलिए, उपयोगकर्ताओं को ऐसे इवेंट के बारे में सूचना देने के लिए, स्टैंडर्ड टेंप्लेट का इस्तेमाल करने का सुझाव दिया जाता है जिन पर उनका ध्यान जाना ज़रूरी है.

अगर स्टैंडर्ड लेआउट आपकी ज़रूरतों के मुताबिक नहीं हैं, तो कस्टम सूचना लेआउट का इस्तेमाल करके, अपना लेआउट दिया जा सकता है. इस गाइड में, सूचना में Google Pay बटन जोड़ने के लिए कस्टम लेआउट का इस्तेमाल किया जाएगा. इससे आपके उपयोगकर्ताओं को सीधे सूचना से पेमेंट करने की सुविधा मिलेगी.

गतिविधियां

गतिविधियों की मदद से, आपके ऐप्लिकेशन में मौजूद सुविधाओं के बारे में लोगों को जानकारी मिलती है. आम तौर पर, ऐक्टिविटी में एक यूज़र इंटरफ़ेस होता है. साथ ही, ये आपके ऐप्लिकेशन में स्क्रीन की ब्राउज़ की जा सकने वाली हैरारकी बनाती हैं.

जब उपयोगकर्ता Google Pay बटन दबाता है, तो Google, पेमेंट के उपलब्ध तरीकों की सूची दिखाता है. इससे उपयोगकर्ता लेन-देन पूरा कर पाते हैं. पेमेंट शीट को होस्टिंग ऐक्टिविटी से लॉन्च किया जाना चाहिए. पारदर्शी गतिविधि का इस्तेमाल करके, यह दिखाया जा सकता है कि पेमेंट शीट सीधे तौर पर सूचना के ऊपर दिख रही है.

अपनी सूचना के लिए लेआउट तय करना

सूचना के लिए लेआउट बनाने की प्रोसेस, सामान्य गतिविधि के लिए यूज़र इंटरफ़ेस तय करने के तरीके से मिलती-जुलती है. सूचनाएं, विजेट की तरह ही RemoteViews क्लास का इस्तेमाल करती हैं. इससे लेआउट में मौजूद एलिमेंट मैनेज किए जाते हैं. इससे, सामान्य लेआउट की तुलना में, उपलब्ध व्यू की सूची छोटी हो जाती है.

शुरू करने के लिए, अपने res/layout/ फ़ोल्डर में एक लेआउट रिसॉर्स फ़ाइल बनाएं. इसमें यह बताया जाता है कि आपको अपनी सूचना कैसी दिखानी है. रेफ़रंस के लिए, सैंपल ऐप्लिकेशन में मौजूद notification_account_top_up.xml देखें.

कस्टम नोटिफ़िकेशन के लेआउट का उदाहरण
पहली इमेज. कस्टम नोटिफ़िकेशन के लेआउट का उदाहरण.

Google Pay बटन जोड़ना

लेआउट तैयार हो जाने के बाद, आखिरी चरण में उसमें Google Pay बटन जोड़ें. इसके लिए, Google Pay की पहले से तैयार की गई ऐसेट के कलेक्शन से, अपनी लेआउट एक्सएमएल फ़ाइल में बटन की सही संसाधन फ़ाइल शामिल करें. इन ऐसेट में बटन के लिए ग्राफ़िक संसाधन होते हैं. ये अलग-अलग स्क्रीन साइज़, रिज़ॉल्यूशन, और भाषाओं के हिसाब से अपने-आप अडजस्ट हो जाते हैं. साथ ही, Google Pay की ब्रैंडिंग के दिशा-निर्देशों का पालन करते हैं. इन्हें सीधे ब्रैंड से जुड़े दिशा-निर्देश सेक्शन से डाउनलोड किया जा सकता है.

<include
  android:id="@+id/googlePayButton"
  layout="@layout/buy_with_googlepay_button"
  android:layout_width="wrap_content"
  android:layout_height="48sp" />

अब लेआउट के डिज़ाइन व्यू में, Google Pay बटन देखा जा सकता है:

Google Pay बटन वाली पसंद के मुताबिक सूचना का सैंपल
दूसरी इमेज. Google Pay बटन वाली, पसंद के मुताबिक सूचना का सैंपल.

सूचना ट्रिगर करना

अपने ऐप्लिकेशन या सेवा में इंटरैक्शन के फ़्लो के आधार पर, अलग-अलग इवेंट के जवाब में सूचना भेजी जा सकती है. आम तौर पर, मैसेजिंग सेवा का इस्तेमाल करके, बैकएंड सर्वर से पुश नोटिफ़िकेशन जारी किया जाता है. अगर आपने अब तक अपने Android ऐप्लिकेशन में पुश नोटिफ़िकेशन की सुविधा नहीं जोड़ी है, तो Firebase Cloud Messaging देखें. इसके अलावा, शुरू करने के तरीके के बारे में जानने के लिए, यह बेहतरीन ट्यूटोरियल देखें.

व्यू बनाना और उसे सेट अप करना

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

सबसे पहले, लेआउट हैरारकी को सेव करने के लिए RemoteViews ऑब्जेक्ट बनाएं:

Kotlin

    val notificationLayout = RemoteViews(packageName, R.layout.large_notification)

Java

    RemoteViews notificationLayout = new RemoteViews(packageName, R.layout.large_notification);

अब notificationLayout ऑब्जेक्ट का इस्तेमाल करके, व्यू (बटन, टेक्स्ट, इमेज वगैरह) में बदलाव किया जा सकता है. जैसे, उनकी स्टाइल में बदलाव करना या उन्हें उपयोगकर्ता के इंटरैक्शन का जवाब देने के लिए कॉन्फ़िगर करना. इस उदाहरण में, Google Pay बटन, टैप इवेंट कैप्चर करता है, ताकि पेमेंट फ़्लो लॉन्च किया जा सके:

Kotlin

    val selectOptionIntent = Intent(context, PaymentNotificationIntentService::class.java)
      selectOptionIntent.action = ACTION_SELECT_PREFIX + option
      notificationLayout.setOnClickPendingIntent(buttonId, PendingIntent.getService(
              context, 0, selectOptionIntent, PendingIntent.FLAG_UPDATE_CURRENT))

Java

    Intent payIntent = new Intent(context, PaymentTransparentActivity.class);
    payIntent.setAction(ACTION_PAY_GOOGLE_PAY);
    payIntent.putExtra(OPTION_PRICE_EXTRA, OPTION_PRICE_CENTS.get(selectedOption));
    notificationLayout.setOnClickPendingIntent(
        R.id.googlePayButton, pendingIntentForActivity(context, payIntent));

इस उदाहरण में, पेमेंट शीट दिखाने वाले Intent में एक ऐसी कार्रवाई शामिल है जिससे Intent के मकसद का पता चलता है. इसमें अतिरिक्त जानकारी भी शामिल होती है, जैसे कि चुने गए आइटम की कीमत. साथ ही, Intent Google Pay बटन से किसी इवेंट को जोड़ता है, ताकि जब भी उपयोगकर्ता इस पर टैप करे, तो Intent काम करे और पेमेंट ऐक्टिविटी को फ़ोरग्राउंड में ले आए.

सूचना दिखाओ

सूचना बनाने और उसे कॉन्फ़िगर करने के बाद, आखिरी चरण में उसे उपयोगकर्ता को दिखाया जाता है. इसके लिए, ऊपर बताए गए पैरामीटर और अतिरिक्त कॉन्फ़िगरेशन के साथ एक सूचना ऑब्जेक्ट बनाएं, ताकि यह तय किया जा सके कि सूचना कैसे काम करेगी:

Kotlin

    val notification = NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle(context.getString(R.string.notification_title))
            .setContentText(context.getString(R.string.notification_text))
            .setCustomBigContentView(notificationLayout)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setAutoCancel(false)
            .setOnlyAlertOnce(true)
            .build()

Java

    Notification notification = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID)
        .setSmallIcon(R.mipmap.ic_launcher)
        .setContentTitle(context.getString(R.string.notification_title))
        .setContentText(context.getString(R.string.notification_text))
        .setCustomBigContentView(notificationLayout)
        .setPriority(NotificationCompat.PRIORITY_DEFAULT)
        .setAutoCancel(false)
        .setOnlyAlertOnce(true)
        .build();

इस कॉन्फ़िगरेशन में मौजूद कुछ प्रॉपर्टी से पता चलता है कि यह सूचना कैसे काम करती है. हालांकि, आपकी पसंद और इस्तेमाल के उदाहरणों के आधार पर, आपके ऐप्लिकेशन में अन्य प्रॉपर्टी अलग-अलग हो सकती हैं. इनमें से कुछ फ़ील्ड ये हैं:

फ़ील्ड मान ब्यौरा
सूचना का चैनल NOTIFICATION_CHANNEL_ID Android 8.0 (एपीआई लेवल 26) से, आपको सभी सूचनाओं को किसी चैनल को असाइन करना होगा. चैनल, सूचनाओं को कैटगरी के हिसाब से विषयों में ग्रुप करते हैं. उपयोगकर्ताओं के पास इन विषयों को मैनेज करने का विकल्प होता है. Android के दस्तावेज़ में, सूचना चैनलों के बारे में ज़्यादा जानें.
बड़ा कॉन्टेंट व्यू, जिसे पसंद के मुताबिक बनाया गया हो notificationLayout यहां, पहले से तैयार किया गया लेआउट सूचना से कनेक्ट होता है.
अपने-आप रद्द होने की सुविधा false अगर आपको अपनी सूचना को इंटरैक्टिव बनाना है (जैसे कि इस उदाहरण में इस्तेमाल की गई सूचना), तो ऑटोमैटिक तरीके से रद्द होने वाले पैरामीटर को false पर सेट करें. इससे यह पक्का किया जा सकेगा कि जब उपयोगकर्ता सूचना में मौजूद किसी भी व्यू को छुए, तो सूचना अपने-आप खारिज न हो.
सिर्फ़ एक बार सूचना दें true यह सूचना, उपयोगकर्ता के इनपुट के हिसाब से दिखती है. सूचना अपडेट होने पर आवाज़, प्रॉम्प्ट, और वाइब्रेशन से बचने के लिए, इस पैरामीटर को true पर सेट करें.

सूचनाओं से जुड़े अन्य कॉन्फ़िगरेशन और सामान्य सिद्धांतों के बारे में जानने के लिए, Android के दस्तावेज़ में मौजूद कस्टम सूचनाएं और खास जानकारी सेक्शन देखें.

आखिर में, सूचना को ट्रिगर करने और दिखाने के लिए, notify तरीके का इस्तेमाल करके, पहले बनाया गया notification ऑब्जेक्ट पास करें:

Kotlin

    NotificationManagerCompat.from(context).notify(NOTIFICATION_ID, notification)

Java

    NotificationManagerCompat.from(context).notify(NOTIFICATION_ID, notification);

NOTIFICATION_ID एक पूर्णांक है, जो सूचना की पहचान करता है. बाद में इसे अपडेट करने या हटाने के लिए, इसकी ज़रूरत होती है.

पेमेंट करना

जब कोई उपयोगकर्ता Google Pay बटन पर टैप करता है, तो पेमेंट शीट दिखाएं. इससे आपके उपयोगकर्ता, लेन-देन पूरा करने के लिए पेमेंट का कोई तरीका चुन पाएंगे. Google Pay API का इस्तेमाल करके, गतिविधि के ऊपर पेमेंट शीट दिखाई जा सकती है. सूचना से पेमेंट की नई प्रोसेस शुरू होती है. इसलिए, इस गतिविधि को पारदर्शी बनाएं, ताकि उपयोगकर्ताओं को लगे कि आपका ऐप्लिकेशन खोले बिना ही पेमेंट हो गया है. इस गतिविधि के लिए, onCreate तरीके के बारे में जानें:

Kotlin

  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)

    // Dismiss the notification UI if the activity was opened from a notification
    if (Notifications.ACTION_PAY_GOOGLE_PAY == intent.action) {
      sendBroadcast(Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS))
    }

    // Initialise the payments client
    startPayment()
  }

Java

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Dismiss the notification UI if the activity was opened from a notification
    if (Notifications.ACTION_PAY_GOOGLE_PAY.equals(getIntent().getAction())) {
      sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS));
    }

    // Initialise the payments client
    startPayment();
  }

जैसा कि आपको दिख रहा है, इस गतिविधि में अभी तक कुछ खास नहीं हुआ है. ब्रॉडकास्ट के साथ इंटेंट कॉन्स्टेंट ACTION_CLOSE_SYSTEM_DIALOGS सूचना मेन्यू को खारिज करता है. ध्यान रखें कि इस गतिविधि को सिर्फ़ सूचना में मौजूद Google Pay बटन के ज़रिए ऐक्सेस किया जा सकता है. साथ ही, ब्रॉडकास्ट के बिना सूचना वाला डायलॉग खुला रहता है.

इसके अलावा, इस गतिविधि के लिए सिर्फ़ पेमेंट शीट दिखाने की ज़रूरत होती है. यह showPaymentsSheet तरीके से शुरू होती है. इसके बाद, Google Pay API में loadPaymentData तरीके को कॉल करें. ऐक्टिविटी में मौजूद सभी लॉजिक को एक्सप्लोर करने के लिए, सैंपल ऐप्लिकेशन में मौजूद PaymentTransparentActivity.java फ़ाइल देखें.