# Google Play সাবস্ক্রিপশন ট্র্যাকিং

<Aside type="caution" icon="setting" title="ডেভেলপারের সহায়তা প্রয়োজন">
এই ইন্টিগ্রেশন সেট আপ করার জন্য আপনার ডেভেলপমেন্ট টিমের সাহায্য প্রয়োজন হবে। অনুগ্রহ করে এই গাইডটি তাদের সাথে শেয়ার করুন।
</Aside>

## ইন্টিগ্রেশন ওভারভিউ

[Real-Time Developer Notifications (RTDN)](https://developer.android.com/google/play/billing/rtdn-reference) হলো Google Play-এর একটি সার্ভার-টু-সার্ভার পরিষেবা যা সাবস্ক্রিপশনের স্ট্যাটাস পরিবর্তন হলে একটি রিয়েল-টাইম মেসেজ পাঠায়।

Pushwoosh-এর সাথে Google Play RTDN সংযোগ করে, আপনি সম্পূর্ণ সাবস্ক্রিপশন লাইফসাইকেলের উপর প্রতিক্রিয়া জানাতে পারেন, যার মধ্যে রয়েছে কেনাকাটা, পুনর্নবীকরণ, বাতিলকরণ, বিলিং সমস্যা, মেয়াদোত্তীর্ণ এবং রিফান্ড — আপনার নিজের ব্যাকএন্ড পরিকাঠামো তৈরি না করেই। যখনই কোনো ব্যবহারকারীর Google Play অ্যাকাউন্টে সাবস্ক্রিপশনের স্ট্যাটাস পরিবর্তন হয়, Google Pushwoosh-কে জানায়, এবং Pushwoosh ব্যবহারকারীর প্রোফাইলে সংশ্লিষ্ট [`PW_Subscription*`](#tracked-events) ইভেন্ট ফায়ার করে।

<Aside type="note">
এই ইন্টিগ্রেশন **Android সাবস্ক্রিপশন** (Google Play RTDN) সমর্থন করে। iOS সাবস্ক্রিপশন ট্র্যাক করতে, দেখুন [App Store সাবস্ক্রিপশন ট্র্যাকিং](/bn/product/integrations/app-store-subscription-tracking/)।
</Aside>

### ইন্টিগ্রেশনের প্রকার

**উৎস:** Real-Time Developer Notifications Google Play থেকে Pushwoosh-এ পাঠানো হয়।

### ট্র্যাক করা ইভেন্ট

Pushwoosh প্রতিটি সমর্থিত Google Play নোটিফিকেশনকে একটি ইউনিফাইড `PW_Subscription*` ইভেন্ট সেটে ম্যাপ করে, যাতে আপনি সাবস্ক্রিপশন লাইফসাইকেলের যেকোনো পর্যায়ে ক্যাম্পেইন ট্রিগার করতে পারেন।

| ইভেন্ট | কখন ফায়ার হয় |
| ----- | ---------- |
| `PW_SubscriptionStart` | একজন ব্যবহারকারী প্রথমবার সাবস্ক্রিপশন কিনলে। |
| `PW_SubscriptionRenew` | সাবস্ক্রিপশনটি একটি নতুন বিলিং সময়ের জন্য স্বয়ংক্রিয়ভাবে পুনর্নবীকরণ হলে। |
| `PW_SubscriptionCancel` | একজন ব্যবহারকারী স্বয়ংক্রিয়-পুনর্নবীকরণ বন্ধ করলে। সাবস্ক্রিপশনটি মেয়াদ শেষ না হওয়া পর্যন্ত সক্রিয় থাকে। |
| `PW_SubscriptionResume` | একজন ব্যবহারকারী সাবস্ক্রিপশনটি শেষ হওয়ার আগে পুনরায় চালু করলে। |
| `PW_SubscriptionBillingIssue` | একটি পুনর্নবীকরণ পেমেন্ট ব্যর্থ হলে এবং সাবস্ক্রিপশনটি তার গ্রেস পিরিয়ডে প্রবেশ করলে। |
| `PW_SubscriptionRecovered` | আগে ব্যর্থ হওয়া একটি পুনর্নবীকরণ সফল হলে এবং সাবস্ক্রিপশনটি আবার সক্রিয় হলে। |
| `PW_SubscriptionExpired` | সাবস্ক্রিপশনটি সম্পূর্ণরূপে শেষ হয়ে গেছে এবং আর সক্রিয় নেই। |
| `PW_SubscriptionRefund` | Google Play সাবস্ক্রিপশনটি বাতিল করলে (উদাহরণস্বরূপ, রিফান্ডের পরে)। |

প্রতিটি ইভেন্ট একই অ্যাট্রিবিউট বহন করে:

- **productID:** সাবস্ক্রিপশনের Google Play প্রোডাক্ট আইডেন্টিফায়ার।
- **expiresAt:** বর্তমান পেইড পিরিয়ড কখন শেষ হবে, সেকেন্ডে একটি ইউনিক্স টাইমস্ট্যাম্প হিসাবে। Google এটি প্রদান করলে অন্তর্ভুক্ত করা হয়।

<details>

<summary>ইভেন্টগুলি কীভাবে Real-Time Developer Notifications-এ ম্যাপ করা হয়</summary>

ইন্টিগ্রেশন যাচাইকারী ডেভেলপারদের জন্য, প্রতিটি Pushwoosh ইভেন্ট এই RTDN `notificationType` মানগুলির সাথে সঙ্গতিপূর্ণ:

| Pushwoosh ইভেন্ট | RTDN `notificationType` |
| --------------- | ----------------------- |
| `PW_SubscriptionStart` | `SUBSCRIPTION_PURCHASED` (4) |
| `PW_SubscriptionRenew` | `SUBSCRIPTION_RENEWED` (2) |
| `PW_SubscriptionCancel` | `SUBSCRIPTION_CANCELED` (3) |
| `PW_SubscriptionResume` | `SUBSCRIPTION_RESTARTED` (7) |
| `PW_SubscriptionBillingIssue` | `SUBSCRIPTION_IN_GRACE_PERIOD` (6) |
| `PW_SubscriptionRecovered` | `SUBSCRIPTION_RECOVERED` (1) |
| `PW_SubscriptionExpired` | `SUBSCRIPTION_EXPIRED` (13) |
| `PW_SubscriptionRefund` | `SUBSCRIPTION_REVOKED` (12) |

অন্যান্য নোটিফিকেশন প্রকার, যেমন অন-হোল্ড, মূল্য পরিবর্তন, ডেফারেল এবং পজ, স্বীকৃত হয় কিন্তু কোনো ইভেন্ট পোস্ট করে না।

</details>

### এটি কীভাবে কাজ করে

একটি Google Play নোটিফিকেশনে কোনো Pushwoosh আইডেন্টিফায়ার থাকে না। এতে শুধুমাত্র একটি পারচেজ টোকেন এবং অ্যাপের `packageName` থাকে। তাই আপনার অ্যাপ প্রতিটি পারচেজকে Pushwoosh-এর প্রয়োজনীয় আইডেন্টিফায়ার দিয়ে ট্যাগ করে, এবং যখনই কোনো নোটিফিকেশন আসে, Pushwoosh পারচেজ থেকে সেটি পড়ে নেয়।

1. একজন ব্যবহারকারীর Google Play অ্যাকাউন্টে সাবস্ক্রিপশনের স্ট্যাটাস পরিবর্তন হয় (একটি কেনাকাটা, পুনর্নবীকরণ, বাতিলকরণ ইত্যাদি)।
2. Google Play Pushwoosh-এর শেয়ার্ড টপিকে একটি RTDN মেসেজ প্রকাশ করে।
3. Pushwoosh পারচেজের `obfuscatedAccountId` পড়ে, যা আপনার অ্যাপ কেনার সময় `<AppCode>:<hwid>` হিসেবে সেট করেছিল।
4. Pushwoosh সেই ডিভাইসটি খুঁজে বের করে যার HWID মিলে যায়, তার সাথে যুক্ত ব্যবহারকারীকে খুঁজে পায় এবং সেই ব্যবহারকারীর জন্য সংশ্লিষ্ট `PW_Subscription*` ইভেন্ট পোস্ট করে।

<Aside type="caution" title="গুরুত্বপূর্ণ">
একটি Google Play পারচেজ এবং একটি Pushwoosh ব্যবহারকারীর মধ্যে ম্যাচটি `obfuscatedAccountId`-এর উপর নির্ভর করে। যদি আপনার অ্যাপ কেনার সময় এই মানটি সেট না করে, Pushwoosh নোটিফিকেশন পায় কিন্তু **কোনো ইভেন্ট পোস্ট করা হয় না**। এটি কেনার সময় সেট করা হয় এবং বিদ্যমান সাবস্ক্রিপশনের জন্য **ব্যাকফিল করা যায় না**। দেখুন [কীভাবে অ্যাকাউন্ট আইডেন্টিফায়ার সেট করতে হয়](#set-the-account-identifier-at-purchase)।
</Aside>

### ব্যবহারের ক্ষেত্র

**চার্নিং সাবস্ক্রাইবারদের ফিরিয়ে আনুন:** স্বয়ংক্রিয়-পুনর্নবীকরণ নিষ্ক্রিয় করলে সাথে সাথেই অ্যাক্সেস শেষ হয়ে যায় না। সাবস্ক্রিপশনটি পেইড পিরিয়ড শেষ না হওয়া পর্যন্ত সক্রিয় থাকে, এবং এটিই ব্যবহারকারীকে ফিরিয়ে আনার সুযোগ। `PW_SubscriptionCancel`-এ, একটি রিটেনশন পুশ সহ একটি [Customer Journey](/bn/product/customer-journey/pushwoosh-journey-overview/) চালু করুন, তারা যে ফিচারগুলি হারাবে সে সম্পর্কে একটি [ইমেল](/bn/product/messaging-channels/emails/) পাঠান, অথবা অ্যাক্সেস শেষ হওয়ার আগে একটি পুনর্নবীকরণ ডিসকাউন্ট সহ একটি [ইন-অ্যাপ মেসেজ](/bn/product/messaging-channels/in-apps/) পাঠান।

**নতুন সাবস্ক্রাইবারদের অনবোর্ড করুন:** `PW_SubscriptionStart`-এ একটি ওয়েলকাম সিরিজ ট্রিগার করুন যাতে ব্যবহারকারীরা তাদের প্ল্যান থেকে তাড়াতাড়ি ভ্যালু পেতে পারে এবং পুনর্নবীকরণের জন্য প্রস্তুত হতে পারে।

**ব্যর্থ পেমেন্ট উদ্ধার করুন:** যখন `PW_SubscriptionBillingIssue` ফায়ার হয়, তখন একটি পুনর্নবীকরণ পেমেন্ট সফল হয়নি এবং সাবস্ক্রিপশনটি গ্রেস পিরিয়ডে রয়েছে। ব্যবহারকারীকে অ্যাক্সেস হারানোর আগে তাদের পেমেন্ট পদ্ধতি আপডেট করতে অনুরোধ করুন, এবং সমাধান হয়ে গেলে নিশ্চিত করতে `PW_SubscriptionRecovered` দিয়ে ফলো-আপ করুন।

**ল্যাপসড ব্যবহারকারীদের পুনরায় যুক্ত করুন:** যারা সম্পূর্ণরূপে চার্ন করেছে তাদের জন্য একটি রিটার্নিং-কাস্টমার অফার সহ `PW_SubscriptionExpired`-এ একটি রিঅ্যাক্টিভেশন ক্যাম্পেইন শুরু করুন।

## ইন্টিগ্রেশন সেট আপ করা

শুরু করার আগে, নিশ্চিত করুন যে আপনার একটি Pushwoosh অ্যাপ রয়েছে যেখানে [FCM কনফিগার করা](/bn/developer/pushwoosh-sdk/android-sdk/firebase-integration/integrate-pushwoosh-android-sdk/) আছে (পুশের জন্য ইতিমধ্যেই প্রয়োজন), একটি সাবস্ক্রিপশন সহ একটি Google Play অ্যাপ, এবং Play Console অ্যাডমিন অ্যাক্সেস রয়েছে।

### কেনার সময় অ্যাকাউন্ট আইডেন্টিফায়ার সেট করুন

Pushwoosh ডিভাইসের **HWID** এবং আপনার **Application Code** ব্যবহার করে সঠিক ব্যবহারকারীকে শনাক্ত করে। Pushwoosh Android SDK একটি হেল্পার, `getSubscriptionAccountId()`, এক্সপোজ করে যা এই মানটি ইতিমধ্যেই `<AppCode>:<hwid>` হিসাবে ফর্ম্যাট করে ফেরত দেয়। Google Play বিলিং ফ্লো চালু করার সময় এটিকে `BillingFlowParams.setObfuscatedAccountId()`-এ পাস করুন।

<Tabs>
<TabItem label="Kotlin">
```kotlin
val billingParams = BillingFlowParams.newBuilder()
    .setProductDetailsParamsList(productDetailsParamsList)
    // Pushwoosh অ্যাকাউন্ট আইডেন্টিফায়ার "<AppCode>:<hwid>" দিয়ে পারচেজ ট্যাগ করুন
    .setObfuscatedAccountId(Pushwoosh.getInstance().subscriptionAccountId)
    .build()

billingClient.launchBillingFlow(activity, billingParams)
```
</TabItem>
<TabItem label="Java">
```java
BillingFlowParams billingParams = BillingFlowParams.newBuilder()
        .setProductDetailsParamsList(productDetailsParamsList)
        // Pushwoosh অ্যাকাউন্ট আইডেন্টিফায়ার "<AppCode>:<hwid>" দিয়ে পারচেজ ট্যাগ করুন
        .setObfuscatedAccountId(Pushwoosh.getInstance().getSubscriptionAccountId())
        .build();

billingClient.launchBillingFlow(activity, billingParams);
```
</TabItem>
</Tabs>

<Aside type="note">
SDK ইনিশিয়ালাইজড হওয়ার পরে `getSubscriptionAccountId()` কল করুন। Application Code বা HWID এখনও উপলব্ধ না হলে এটি একটি খালি স্ট্রিং ফেরত দেয়। Google অবফাসকেটেড অ্যাকাউন্ট আইডি 64 অক্ষরে সীমাবদ্ধ করে। Pushwoosh `<AppCode>:<hwid>` মানটি সেই সীমার মধ্যে থাকে।
</Aside>

<Aside type="caution">
যদি আপনার অ্যাপ একটি কাস্টম মান দিয়ে Pushwoosh HWID ওভাররাইড করে, `getSubscriptionAccountId()` স্বয়ংক্রিয়ভাবে তা প্রতিফলিত করে। আইডেন্টিফায়ারটি নিজে তৈরি করবেন না। সর্বদা হেল্পার ব্যবহার করুন যাতে মানটি Pushwoosh-এ ডিভাইসের HWID-এর সাথে মিলে যায়, নতুবা ইভেন্টটি অ্যাট্রিবিউট করা যাবে না।
</Aside>

### Pushwoosh-এ Real-Time Developer Notifications পয়েন্ট করুন

1. [Google Play Console](https://play.google.com/console/)-এ, **Monetize → Monetization setup**-এ যান।
2. **Real-time developer notifications** খুঁজুন এবং **Topic name** সেট করুন:

```
projects/pw-playstore-subscriptions/topics/play-rtdn
```

3. **Save**-এ ক্লিক করুন। Google-এর নোটিফিকেশন পরিষেবাতে ইতিমধ্যেই প্রকাশের অনুমতি দেওয়া আছে, তাই এখানে আর কিছু কনফিগার করার নেই।

### Pushwoosh-এর পরিষেবা অ্যাকাউন্টকে অনুমতি দিন

1. Google Play Console-এ, **Users and permissions → Invite new user**-এ যান।
2. Pushwoosh পরিষেবা অ্যাকাউন্টের ইমেল লিখুন:

```
play-api@pw-playstore-subscriptions.iam.gserviceaccount.com
```

3. **App permissions**-এর অধীনে, আপনার অ্যাপ যোগ করুন এবং **View financial data, orders, and cancellation survey responses** (এবং শুধুমাত্র পঠনযোগ্য অ্যাপ তথ্যের অনুমতি) প্রদান করুন।
4. **Save**-এ ক্লিক করুন। একটি পরিষেবা অ্যাকাউন্টকে আমন্ত্রণ গ্রহণ করতে হয় না। অ্যাক্সেস অবিলম্বে সক্রিয় হয়ে যায়।

### Pushwoosh-এ ইভেন্টগুলি নিশ্চিত করুন

Pushwoosh আপনার প্রজেক্টে প্রতিটি `PW_Subscription*` ইভেন্ট প্রথমবার ঘটার সময় `productID` এবং `expiresAt` অ্যাট্রিবিউট সহ রেজিস্টার করে। একটি পরীক্ষার পরে, ইভেন্টগুলি প্রদর্শিত হচ্ছে কিনা তা যাচাই করতে **Audience → Events** খুলুন। তারপরে সেগুলি সেগমেন্টেশন, পরিসংখ্যান এবং Customer Journeys-এর জন্য প্রস্তুত হয়ে যায়।

### আপনার ক্যাম্পেইন তৈরি করুন

যেকোনো `PW_Subscription*` ইভেন্টে একটি [ট্রিগার-ভিত্তিক এন্ট্রি](/bn/product/customer-journey/journey-elements/entry-elements/trigger-based-entry/) সহ একটি [Customer Journey](/bn/product/customer-journey/pushwoosh-journey-overview/) তৈরি করুন, উদাহরণস্বরূপ উইন-ব্যাকের জন্য `PW_SubscriptionCancel` বা অনবোর্ডিংয়ের জন্য `PW_SubscriptionStart`, এবং আপনি যে মেসেজগুলি পাঠাতে চান তা যোগ করুন।

## টেস্টিং

ইন্টিগ্রেশনটি এন্ড-টু-এন্ড যাচাই করতে:

1. Google Play Console-এ, **Monetization setup** খুলুন এবং **Send test notification**-এ ক্লিক করুন। এটি সফল রিপোর্ট করা উচিত, যা নিশ্চিত করে যে টপিকটি সঠিকভাবে সংযুক্ত আছে।
2. উপরে বর্ণিত হিসাবে অ্যাকাউন্ট আইডেন্টিফায়ার সেট করে একটি সাবস্ক্রিপশন কিনুন (এটি `PW_SubscriptionStart` ফায়ার করে), তারপর **Play Store → Subscriptions → Cancel** থেকে এটি বাতিল করুন (এটি `PW_SubscriptionCancel` ফায়ার করে)।
3. Pushwoosh কন্ট্রোল প্যানেলে, ব্যবহারকারীর প্রোফাইল খুলুন এবং [Events history](/bn/product/audience-data-and-segmentation/user-explorer/#events-history-tab)-এ যান।
4. নিশ্চিত করুন যে ইভেন্টগুলি কয়েক মুহূর্তের মধ্যে প্রদর্শিত হচ্ছে।