বিজ্ঞপ্তি থেকে পেমেন্ট করুন

দ্রুত পেমেন্ট ডেমো ইন্টিগ্রেশন

কিছু ব্যবসার পরিষেবা পেতে বা পুনরায় অ্যাক্সেস পেতে (যেমন: মোবাইল ডেটা প্ল্যান, গৃহস্থালীর বিল, পরিষেবা আপগ্রেড বা পূর্বে প্রত্যাখ্যাত পেমেন্ট) দ্রুত অর্থপ্রদান করার ক্ষমতা প্রয়োজন হয়। অনেক সময়, ব্যবসাগুলি তাদের মোবাইল ডিভাইসে ব্যবহারকারীদের এই ঘটনাগুলি সম্পর্কে অবহিত করে। তবে, প্রকৃত পেমেন্ট করার জন্য, ব্যবহারকারীকে প্রসঙ্গ পরিবর্তন করতে হবে এবং সময়সাপেক্ষ ফর্মগুলির মধ্য দিয়ে যেতে হবে, যা পেমেন্ট সম্পূর্ণ করার সুযোগকে উল্লেখযোগ্যভাবে হ্রাস করে।

এই প্যাটার্নটি আপনাকে সরাসরি একটি বিজ্ঞপ্তিতে একটি পেমেন্ট অ্যাকশন যোগ করতে সাহায্য করে, যার ফলে ব্যবহারকারীরা তাৎক্ষণিকভাবে পদক্ষেপ নিতে পারেন এবং মাত্র দুটি ট্যাপ করেই পেমেন্ট করতে পারেন। এই নির্দেশিকায়, আপনি আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে কীভাবে একই রকম অভিজ্ঞতা তৈরি করবেন তা শিখবেন।

আবশ্যকতা

এই নির্দেশিকাটি ধরে নিয়েছে যে আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে একটি সক্রিয় Google Pay ইন্টিগ্রেশন আছে। যদি আপনি এখনও ইন্টিগ্রেটেড যোগ না করে থাকেন, তাহলে আপনি আমাদের টিউটোরিয়াল বা ধাপে ধাপে নির্দেশিত কোডল্যাব দিয়ে শুরু করতে পারেন।

বিল্ডিং ব্লক

আপনার বিজ্ঞপ্তিগুলিতে Google Pay বোতাম যুক্ত করা অ্যান্ড্রয়েডের দুটি মৌলিক ভিত্তির উপর ভিত্তি করে:

কাস্টম বিজ্ঞপ্তি লেআউট

অ্যান্ড্রয়েডে নিয়মিত বিজ্ঞপ্তিগুলির একটি সুনির্দিষ্ট অ্যানাটমি থাকে যা একাধিক ভিজ্যুয়াল প্রসঙ্গের সাথে খাপ খাইয়ে নেয়। স্ট্যান্ডার্ড টেমপ্লেট ব্যবহার আপনাকে নিশ্চিত করতে সাহায্য করে যে ডিভাইসের ওরিয়েন্টেশন, ফর্ম ফ্যাক্টর এবং ওএস সংস্করণ নির্বিশেষে আপনার বিজ্ঞপ্তিগুলি সঠিকভাবে দেখানো হচ্ছে, এবং তাই, ব্যবহারকারীদের মনোযোগের প্রয়োজন এমন ইভেন্টগুলি সম্পর্কে অবহিত করার জন্য এটি একটি প্রস্তাবিত উপায়।

যেসব পরিস্থিতিতে স্ট্যান্ডার্ড লেআউট আপনার চাহিদা পূরণ করে না, সেখানে আপনি কাস্টম নোটিফিকেশন লেআউট ব্যবহার করে আপনার নিজস্ব লেআউট প্রদান করতে পারেন। এই নির্দেশিকায়, আপনি আপনার নোটিফিকেশনে একটি Google Pay বোতাম যোগ করার জন্য একটি কাস্টম লেআউট ব্যবহার করবেন এবং আপনার ব্যবহারকারীদের সেখান থেকে সরাসরি পেমেন্ট শুরু করার অনুমতি দেবেন।

ক্রিয়াকলাপ

অ্যাক্টিভিটিস আপনার অ্যাপ্লিকেশনের ব্যবহারকারীদের কাছে কার্যকারিতা প্রকাশ করতে সাহায্য করে। সাধারণত, অ্যাক্টিভিটিসের একটি সংশ্লিষ্ট ইউজার ইন্টারফেস থাকে এবং আপনার অ্যাপ্লিকেশনের স্ক্রিনগুলির ব্রাউজযোগ্য শ্রেণিবিন্যাস তৈরি করে।

ব্যবহারকারী যখন Google Pay বোতাম টিপবেন, তখন Google লেনদেন সম্পন্ন করার জন্য ব্যবহারকারীদের জন্য উপলব্ধ পেমেন্ট পদ্ধতির একটি তালিকা ফেরত দেবে। এই পেমেন্ট শিটটি অবশ্যই একটি হোস্টিং অ্যাক্টিভিটি থেকে চালু করতে হবে। আপনি একটি স্বচ্ছ অ্যাক্টিভিটি ব্যবহার করে এমন ধারণা তৈরি করতে পারেন যে পেমেন্ট শিটটি সরাসরি বিজ্ঞপ্তির উপরে প্রদর্শিত হচ্ছে।

আপনার বিজ্ঞপ্তির জন্য একটি লেআউট নির্ধারণ করুন

একটি বিজ্ঞপ্তির জন্য লেআউট তৈরি করার প্রক্রিয়াটি একটি নিয়মিত কার্যকলাপের জন্য ব্যবহারকারী ইন্টারফেসকে কীভাবে সংজ্ঞায়িত করা হয় তার অনুরূপ। উইজেটের মতো বিজ্ঞপ্তিগুলি আপনার লেআউটের উপাদানগুলি পরিচালনা করতে রিমোটভিউস ক্লাস ব্যবহার করে। এটি নিয়মিত লেআউটের তুলনায় উপলব্ধ সমর্থিত ভিউগুলির তালিকা হ্রাস করে।

শুরু করার জন্য, আপনার res/layout/ ফোল্ডারে একটি লেআউট রিসোর্স ফাইল তৈরি করুন যাতে আপনি আপনার বিজ্ঞপ্তিটি কেমন দেখতে চান তা বর্ণনা করতে পারেন। রেফারেন্সের জন্য নমুনা অ্যাপ্লিকেশনে notification_account_top_up.xml দেখুন।

নমুনা কাস্টম বিজ্ঞপ্তি লেআউট
চিত্র ১. নমুনা কাস্টম বিজ্ঞপ্তি বিন্যাস।

Google Pay বোতাম যোগ করুন

আপনার লেআউট প্রস্তুত হয়ে গেলে, শেষ ধাপ হল এতে Google Pay বোতাম যোগ করা। এটি করার জন্য, পূর্বে তৈরি Google Pay সম্পদের সংগ্রহ থেকে আপনার লেআউট XML ফাইলে উপযুক্ত বোতাম রিসোর্সটি অন্তর্ভুক্ত করুন। এই সম্পদগুলিতে বোতামের জন্য গ্রাফিক রিসোর্স রয়েছে যা একাধিক স্ক্রিন আকার এবং রেজোলিউশনের পাশাপাশি ভাষার সাথে খাপ খাইয়ে নেয় এবং 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 বোতাম সহ নমুনা কাস্টম বিজ্ঞপ্তি।

বিজ্ঞপ্তিটি ট্রিগার করুন

আপনার অ্যাপ্লিকেশন বা পরিষেবার ইন্টারঅ্যাকশন প্রবাহের উপর নির্ভর করে, আপনি বিভিন্ন ইভেন্টের প্রতিক্রিয়ায় বিজ্ঞপ্তি প্রেরণ করতে পারেন। একটি সাধারণ প্যাটার্ন হল আপনার ব্যাকএন্ড সার্ভার থেকে একটি মেসেজিং পরিষেবা ব্যবহার করে একটি পুশ বিজ্ঞপ্তি জারি করা। আপনি যদি এখনও আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনে পুশ কার্যকারিতা যোগ না করে থাকেন, তাহলে Firebase Cloud Messaging এবং কীভাবে শুরু করবেন তার এই দুর্দান্ত টিউটোরিয়ালটি একবার দেখুন।

ভিউ তৈরি এবং সেট আপ করুন

একটি বিজ্ঞপ্তি লেআউট এবং এর অন্তর্ভুক্ত ভিউগুলি শুরু করার জন্য, প্রক্রিয়াটি নিয়মিত ক্রিয়াকলাপগুলির চেয়ে কিছুটা আলাদাভাবে কাজ করে। ভিউগুলির নির্মাণ এবং ব্যবহারকারীর মিথস্ক্রিয়ার প্রতিক্রিয়া উভয়ই আলাদাভাবে কনফিগার করুন। প্রতিবার যখন অবস্থা আপডেট হয়, তখন আপনাকে বিজ্ঞপ্তিটি পুনরায় আঁকতে হবে।

প্রথমে, লেআউট অনুক্রম ধরে রাখার জন্য একটি RemoteViews অবজেক্ট তৈরি করুন:

কোটলিন

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

জাভা

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

আপনি এখন notificationLayout অবজেক্ট ব্যবহার করে অন্তর্নিহিত ভিউগুলিতে (বোতাম, টেক্সট, ছবি ইত্যাদি) পরিবর্তন করতে পারেন, যেমন তাদের স্টাইল পরিবর্তন করতে বা ব্যবহারকারীর ইন্টারঅ্যাকশনের প্রতিক্রিয়া জানাতে কনফিগার করতে। এই উদাহরণে, পেমেন্ট ফ্লো চালু করার জন্য Google Pay বোতামটি ট্যাপ ইভেন্টগুলি ক্যাপচার করে:

কোটলিন

    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))

জাভা

    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 কার্যকর করে এবং পেমেন্ট কার্যকলাপকে সামনে নিয়ে আসে।

বিজ্ঞপ্তিটি দেখান

নোটিফিকেশন তৈরি এবং কনফিগার করার পর, শেষ ধাপ হল এটি ব্যবহারকারীকে দেখানো। এটি করার জন্য, উপরে সংজ্ঞায়িত প্যারামিটার এবং এটি কীভাবে আচরণ করে তা নির্ধারণ করার জন্য অতিরিক্ত কনফিগারেশন সহ একটি নোটিফিকেশন অবজেক্ট তৈরি করুন:

কোটলিন

    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()

জাভা

    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 অ্যান্ড্রয়েড ৮.০ (এপিআই লেভেল ২৬) থেকে শুরু করে, আপনাকে অবশ্যই একটি চ্যানেলে সমস্ত বিজ্ঞপ্তি বরাদ্দ করতে হবে। চ্যানেলগুলি বিজ্ঞপ্তিগুলিকে এমন বিষয়গুলিতে গোষ্ঠীভুক্ত করে যা ব্যবহারকারীরা পরিচালনা করতে পারেন। আপনি অ্যান্ড্রয়েড ডক্সে বিজ্ঞপ্তি চ্যানেল সম্পর্কে আরও জানতে পারেন।
কাস্টম বড় কন্টেন্ট ভিউ notificationLayout এখানেই আপনার আগে প্রস্তুত করা লেআউটটি বিজ্ঞপ্তির সাথে সংযুক্ত হয়।
স্বয়ংক্রিয় বাতিল false যদি আপনি আপনার বিজ্ঞপ্তিটি ইন্টারেক্টিভ করেন (যেমন এই উদাহরণে ব্যবহৃত), তাহলে আপনি স্বয়ংক্রিয়-বাতিল প্যারামিটারটিকে false সেট করতে পারেন যাতে ব্যবহারকারী যখন এর ভিতরের কোনও ভিউ স্পর্শ করেন তখন বিজ্ঞপ্তিটি স্বয়ংক্রিয়ভাবে বাতিল না হয়।
শুধুমাত্র একবার সতর্কতা true এই বিজ্ঞপ্তিটি ব্যবহারকারীর ইনপুটের প্রতি সাড়া দেয়। বিজ্ঞপ্তি আপডেট হওয়ার সময় শব্দ, প্রম্পট এবং কম্পন এড়াতে এই প্যারামিটারটি true সেট করুন।

বিজ্ঞপ্তি সম্পর্কিত অন্যান্য কনফিগারেশন এবং সাধারণ ধারণা সম্পর্কে জানতে, অ্যান্ড্রয়েড ডকুমেন্টেশনের কাস্টম বিজ্ঞপ্তি এবং ওভারভিউ বিভাগগুলি দেখুন।

অবশেষে, বিজ্ঞপ্তিটি ট্রিগার এবং প্রদর্শন করতে, পূর্বে তৈরি করা notification অবজেক্টটি পাস করার জন্য notify পদ্ধতিটি ব্যবহার করুন:

কোটলিন

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

জাভা

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

NOTIFICATION_ID হল একটি ইচ্ছামত পূর্ণসংখ্যা যা বিজ্ঞপ্তিটি সনাক্ত করে এবং এটি আপডেট করার জন্য বা পরে অপসারণ করার জন্য প্রয়োজনীয়।

পেমেন্ট করুন

যখন কোনও ব্যবহারকারী Google Pay বোতামে ট্যাপ করেন, তখন পেমেন্ট শিটটি দেখান যাতে আপনার ব্যবহারকারীরা লেনদেন সম্পন্ন করার জন্য একটি পেমেন্ট পদ্ধতি নির্বাচন করতে পারেন। আপনি কোনও কার্যকলাপের উপরে পেমেন্ট শিটটি প্রদর্শন করতে Google Pay API ব্যবহার করতে পারেন। যেহেতু বিজ্ঞপ্তিটি একটি নতুন পেমেন্ট প্রক্রিয়া শুরু করে, তাই ব্যবহারকারীদের ধারণা দেওয়ার জন্য এই কার্যকলাপটি স্বচ্ছ করুন যে আপনার অ্যাপ্লিকেশনটি না খুলেই অপারেশনটি সম্পন্ন হয়েছে। এই কার্যকলাপের জন্য onCreate পদ্ধতিটি একবার দেখুন:

কোটলিন

  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()
  }

জাভা

  @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 ফাইলটি দেখুন।