ডিজিটাল গুডস এপিআই এবং পেমেন্ট রিকোয়েস্ট এপিআই-এর মাধ্যমে Google Play বিলিং-এর মাধ্যমে পেমেন্ট পান

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

বিশ্বস্ত ওয়েব অ্যাক্টিভিটিগুলি ব্যবহার করে তৈরি করা অ্যাপগুলির জন্য এবং Google Play স্টোরের মাধ্যমে বিতরণ করা হয়েছে, আপনি এখন Google Play বিলিং-এর সাথে একীভূত করতে অর্থপ্রদানের অনুরোধ API এবং Digital Goods API ব্যবহার করতে পারেন৷ এটি Android এবং ChromeOS এর জন্য Chrome 101 এবং তার উপরে উপলব্ধ।

এই নির্দেশিকাটিতে, আপনি শিখবেন কীভাবে আপনার PWA-তে Google Play বিলিং সমর্থন যোগ করবেন এবং ChromeOS এবং Play Store উভয়ের জন্য Google Play Store-এ বিতরণের জন্য প্যাকেজ করবেন।

আপনার PWA-তে প্লে বিলিং সমর্থন যোগ করতে আপনি দুটি ওয়েব প্ল্যাটফর্ম API ব্যবহার করবেন। ডিজিটাল গুডস API SKU তথ্য সংগ্রহ করতে এবং Play Store থেকে কেনাকাটা এবং এনটাইটেলমেন্ট চেক করতে ব্যবহার করা হয়। পেমেন্ট রিকোয়েস্ট API Google Play Store-কে অর্থপ্রদানের পদ্ধতি হিসেবে কনফিগার করতে এবং ক্রয় প্রবাহ সম্পূর্ণ করতে ব্যবহার করা হয়।

প্লে স্টোরে অ্যাপ্লিকেশনগুলি কীভাবে নগদীকরণ করবেন

প্লে স্টোরে Google Play বিলিংয়ের মাধ্যমে আপনার অ্যাপ্লিকেশনটি নগদীকরণ করতে পারে এমন দুটি উপায় রয়েছে:

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

প্রয়োজনীয়তা

Google Play বিলিং সেটআপ করার জন্য, আপনার প্রয়োজন হবে:

Bubblewrap প্রকল্প আপডেট করুন

আপনার যদি Bubblewrap ইনস্টল না থাকে তবে আপনাকে এটি ইনস্টল করতে হবে। কিভাবে শুরু করতে হয় তার বিস্তারিত জানার জন্য দ্রুত শুরু নির্দেশিকা দেখুন। আপনার যদি ইতিমধ্যেই Bubblewrap থাকে, তাহলে 1.8.2 বা তার উপরে সংস্করণে আপডেট করতে ভুলবেন না।

একটি পতাকার পিছনে বাবল র‍্যাপের বৈশিষ্ট্যও রয়েছে। এটি সক্ষম করার জন্য, আপনাকে প্রকল্পের মূলে অবস্থিত twa-manifest.json এ প্রকল্পের কনফিগারেশন পরিবর্তন করতে হবে এবং alphaDependencies এবং playBilling বৈশিষ্ট্য উভয়ই সক্ষম করতে হবে:

  ...,
  "enableNotifications": true,
  "features": {
    "playBilling": {
      "enabled": true
    }
  },
  "alphaDependencies": {
    "enabled": true
  },
  ...

কনফিগারেশন ফাইল আপডেট করার সাথে সাথে, প্রকল্পে কনফিগারেশন প্রয়োগ করতে bubblewrap update চালান, তারপরে একটি নতুন অ্যান্ড্রয়েড প্যাকেজ তৈরি করতে এবং প্লে স্টোরে এই প্যাকেজটি আপলোড করতে bubblewrap build বিল্ড করুন৷

ডিজিটাল গুডস API এবং Google Play বিলিং উপলব্ধতা সনাক্তকারী বৈশিষ্ট্য

ডিজিটাল গুডস এপিআই বর্তমানে শুধুমাত্র Chrome দ্বারা সমর্থিত হয় যখন PWA একটি বিশ্বস্ত ওয়েব অ্যাক্টিভিটির মধ্যে কার্যকর করা হয় এবং window অবজেক্টে getDigitalGoodsService চেক করে এটি উপলব্ধ কিনা তা সনাক্ত করা সম্ভব:

if ('getDigitalGoodsService' in window) {
 // Digital Goods API is supported!
}

ডিজিটাল গুডস এপিআই যেকোনো ব্রাউজারে উপলব্ধ হতে পারে এবং বিভিন্ন স্টোরকে সমর্থন করে। একটি নির্দিষ্ট স্টোর ব্যাকএন্ড সমর্থিত কিনা তা পরীক্ষা করার জন্য, আপনাকে একটি প্যারামিটার হিসাবে স্টোর আইডি পাস করে getDigitalGoodsService() আহ্বান করতে হবে। Google Play Store কে https://play.google.com/billing স্ট্রিং দ্বারা চিহ্নিত করা হয় :

if ('getDigitalGoodsService' in window) {
  // Digital Goods API is supported!
  try {
    const service =
        await window.getDigitalGoodsService('https://play.google.com/billing');
    // Google Play Billing is supported!

  } catch (error) {
    // Google Play Billing is not available. Use another payment flow.
    return;
  }
}

একটি SKU এর জন্য বিশদ পুনরুদ্ধার করুন

ডিজিটাল গুডস এপিআই getDetails() প্রদান করে, যা পেমেন্ট ব্যাকএন্ড থেকে পণ্যের শিরোনাম, বিবরণ এবং সবচেয়ে গুরুত্বপূর্ণভাবে মূল্যের মতো তথ্য পুনরুদ্ধার করতে দেয়।

তারপরে আপনি আপনার ব্যবহারের ইন্টারফেসে এই তথ্যটি ব্যবহার করতে পারেন এবং ব্যবহারকারীকে আরও বিশদ প্রদান করতে পারেন:

const skuDetails = await service.getDetails(['shiny_sword', 'gem']);
for (item of skuDetails) {
  // Format the price according to the user locale.
  const localizedPrice = new Intl.NumberFormat(
      navigator.language,
      {style: 'currency', currency: item.price.currency}
    ).format(item.price.value);

  // Render the price to the UI.
  renderProductDetails(
        item.itemId, item.title, localizedPrice, item.description);
}

ক্রয় প্রবাহ তৈরি করুন

একটি পেমেন্ট রিকোয়েস্টের কনস্ট্রাক্টর দুটি প্যারামিটার নেয়: পেমেন্ট পদ্ধতির একটি তালিকা এবং পেমেন্টের বিবরণের একটি তালিকা।

বিশ্বস্ত ওয়েব কার্যকলাপের ভিতরে থাকাকালীন, আপনাকে অবশ্যই https://play.google.com/billing শনাক্তকারী হিসাবে সেট করে এবং ডেটা সদস্য হিসাবে পণ্য SKU যোগ করে Google Play বিলিং অর্থপ্রদানের পদ্ধতি ব্যবহার করতে হবে:

async function makePurchase(service, sku) {
   // Define the preferred payment method and item ID
   const paymentMethods = [{
       supportedMethods: "https://play.google.com/billing",
       data: {
           sku: sku,
       }
   }];

   ...
}

যদিও অর্থপ্রদানের বিশদ বিবরণ প্রয়োজন, প্লে বিলিং সেই মানগুলিকে উপেক্ষা করবে এবং প্লে কনসোলে SKU তৈরি করার সময় সেট করা মানগুলি ব্যবহার করবে, যাতে সেগুলি ভুয়া মান দিয়ে পূর্ণ হতে পারে:

const paymentDetails = {
    total: {
        label: `Total`,
        amount: {currency: `USD`, value: `0`}
    }
};

const request = new PaymentRequest(paymentMethods, paymentDetails);

পেমেন্ট ফ্লো শুরু করতে পেমেন্ট রিকোয়েস্ট অবজেক্টের show() কে কল করুন। প্রতিশ্রুতি সফল হলে পেমেন্ট সফল হতে পারে। যদি এটি ব্যর্থ হয়, ব্যবহারকারী সম্ভবত অর্থপ্রদান বাতিল করেছেন।

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

...
const request = new PaymentRequest(paymentMethods, paymentDetails);
try {
    const paymentResponse = await request.show();
    const {purchaseToken} = paymentResponse.details;

    // Call backend to validate and acknowledge the purchase.
    if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
        // Optional: tell the PaymentRequest API the validation was
        // successful. The user-agent may show a "payment successful"
        // message to the user.
        const paymentComplete = await paymentResponse.complete('success');
    } else {
        // Optional: tell the PaymentRequest API the validation failed. The
        // user agent may show a message to the user.
        const paymentComplete = await paymentResponse.complete('fail');
    }
} catch(e) {
    // The purchase failed, and we can handle the failure here. AbortError
    // usually means a user cancellation
}
...

ঐচ্ছিকভাবে, consume() একটি purchaseToken-এ ডাকা হতে পারে যাতে ক্রয়টিকে ব্যবহার করা হয়েছে হিসাবে চিহ্নিত করা যায় এবং এটি আবার কেনার অনুমতি দেওয়া হয়।

সবকিছু একসাথে রেখে, একটি ক্রয় পদ্ধতি নিম্নলিখিত মত দেখায়:

async function makePurchase(service, sku) {
    // Define the preferred payment method and item ID
    const paymentMethods = [{
        supportedMethods: "https://play.google.com/billing",
        data: {
            sku: sku,
        }
    }];

    // The "total" member of the paymentDetails is required by the Payment
    // Request API, but is not used when using Google Play Billing. We can
    // set it up with bogus details.
    const paymentDetails = {
        total: {
            label: `Total`,
            amount: {currency: `USD`, value: `0`}
        }
    };

    const request = new PaymentRequest(paymentMethods, paymentDetails);
    try {
        const paymentResponse = await request.show();
        const {purchaseToken} = paymentResponse.details;

        // Call backend to validate and acknowledge the purchase.
        if (await acknowledgePurchaseOnBackend(purchaseToken, sku)) {
            // Optional: consume the purchase, allowing the user to purchase
            // the same item again.
            service.consume(purchaseToken);

            // Optional: tell the PaymentRequest API the validation was
            // successful. The user-agent may show a "payment successful"
            // message to the user.
            const paymentComplete =
                    await paymentResponse.complete('success');
        } else {
            // Optional: tell the PaymentRequest API the validation failed.
            // The user agent may show a message to the user.
            const paymentComplete = await paymentResponse.complete('fail');
        }
    } catch(e) {
        // The purchase failed, and we can handle the failure here.
        // AbortError usually means a user cancellation
    }
}

বিদ্যমান ক্রয় অবস্থা পরীক্ষা করুন

ডিজিটাল গুডস এপিআই আপনাকে চেক করতে দেয় যে ব্যবহারকারীর কোনো বিদ্যমান এনটাইটেলমেন্ট আছে কিনা (অ্যাপ-মধ্যস্থ কেনাকাটা যা এখনও ব্যবহার করা হয়নি বা চলমান সাবস্ক্রিপশন) তারা ইতিমধ্যেই করা আগের কেনাকাটা থেকে, অন্য ডিভাইসে হোক না কেন, আগের থেকে। ইনস্টল করুন, একটি প্রচার কোড থেকে রিডিম করুন বা শেষবার যখন তারা অ্যাপটি খুলেছিলেন।


const service =
     await window.getDigitalGoodsService('https://play.google.com/billing');
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
    // Update the UI with items the user is already entitled to.
    console.log(`Users has entitlement for ${p.itemId}`);
}

পূর্বে করা কিন্তু স্বীকার করা হয়নি এমন কেনাকাটাগুলি পরীক্ষা করার জন্যও এটি একটি ভাল সময়। আপনার ব্যবহারকারীদের এনটাইটেলমেন্টগুলি আপনার অ্যাপে সঠিকভাবে প্রতিফলিত হয়েছে তা নিশ্চিত করতে যত তাড়াতাড়ি সম্ভব কেনাকাটা স্বীকার করার পরামর্শ দেওয়া হচ্ছে।

const service =
     await window.getDigitalGoodsService("https://play.google.com/billing");
...
const existingPurchases = await service.listPurchases();
for (const p of existingPurchases) {
    await verifyOrAcknowledgePurchaseOnBackend(p.purchaseToken, p.itemId);

    // Update the UI with items the user is already entitled to.
    console.log(`Users has entitlement for ${p.itemId}`);
}

আপনার ইন্টিগ্রেশন পরীক্ষা করুন

একটি ডেভেলপমেন্ট অ্যান্ড্রয়েড ডিভাইসে

পরীক্ষার জন্য একটি ডেভেলপমেন্ট অ্যান্ড্রয়েড ডিভাইসে ডিজিটাল গুডস এপিআই সক্ষম করা সম্ভব:

  • ডেভেলপার মোড সক্ষম করে আপনি Android 9 বা তার বেশি ব্যবহার করছেন তা নিশ্চিত করুন৷
  • Chrome 101 বা নতুন ইনস্টল করুন।
  • chrome://flags এ নেভিগেট করে এবং নামের দ্বারা পতাকা অনুসন্ধান করে Chrome-এ নিম্নলিখিত পতাকাগুলি সক্ষম করুন:
    • #enable-debug-for-store-billing
  • নিশ্চিত করুন যে সাইটটি একটি https প্রোটোকল ব্যবহার করে হোস্ট করা হয়েছে। HTTP ব্যবহার করলে এপিআই undefined হবে

একটি ChromeOS ডিভাইসে

ডিজিটাল গুডস এপিআই 89 সংস্করণ থেকে শুরু করে ChromeOS স্ট্যাবলে উপলব্ধ হবে। ইতিমধ্যে, ডিজিটাল গুডস এপিআই পরীক্ষা করা সম্ভব:

  • ডিভাইসে প্লে স্টোর থেকে আপনার অ্যাপটি ইনস্টল করুন।
  • নিশ্চিত করুন যে সাইটটি একটি https প্রোটোকল ব্যবহার করে হোস্ট করা হয়েছে। HTTP ব্যবহার করলে এপিআই undefined হবে

পরীক্ষা ব্যবহারকারী এবং QA টিমের সাথে

প্লে স্টোর ব্যবহারকারীর পরীক্ষার অ্যাকাউন্ট এবং পরীক্ষা SKU সহ পরীক্ষার জন্য সুবিধা প্রদান করে। আরও তথ্যের জন্য Google Play বিলিং পরীক্ষার ডকুমেন্টেশন দেখুন।

পরবর্তী কোথায় যেতে হবে?

এই নথিতে যেমন আলোচনা করা হয়েছে, প্লে বিলিং এপিআই-এর ক্লায়েন্ট-সাইড কম্পোনেন্ট রয়েছে, যা ডিজিটাল গুডস এপিআই এবং সার্ভার-সাইড কম্পোনেন্ট দ্বারা পরিচালিত হয়।