# অ্যাপ স্টোর সাবস্ক্রিপশন ট্র্যাকিং

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

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

[App Store Server Notifications](https://developer.apple.com/documentation/appstoreservernotifications) হলো অ্যাপলের সার্ভার-টু-সার্ভার পরিষেবা যা আপনার ব্যাকএন্ডে একটি রিয়েল-টাইম বার্তা পাঠায় যখনই কোনো সাবস্ক্রিপশনের স্ট্যাটাস পরিবর্তন হয়।

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

<Aside type="note">
এই ইন্টিগ্রেশনটি **iOS সাবস্ক্রিপশন** (অ্যাপ স্টোর সার্ভার নোটিফিকেশন V2) সমর্থন করে। অ্যান্ড্রয়েড সাবস্ক্রিপশন ট্র্যাক করতে, দেখুন [Google Play সাবস্ক্রিপশন ট্র্যাকিং](/bn/product/integrations/google-play-subscription-tracking/)।
</Aside>

### ইন্টিগ্রেশনের ধরন

**উৎস:** অ্যাপ স্টোর সার্ভার নোটিফিকেশন অ্যাপল থেকে Pushwoosh-এ পাঠানো হয়।

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

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

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

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

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

<details>

<summary>ইভেন্টগুলি কীভাবে অ্যাপ স্টোর সার্ভার নোটিফিকেশনের সাথে ম্যাপ করে</summary>

ইন্টিগ্রেশন যাচাইকারী ডেভেলপারদের জন্য, প্রতিটি Pushwoosh ইভেন্ট এই অ্যাপ স্টোর `notificationType` (এবং `subtype`) মানগুলির সাথে মিলে যায়:

| Pushwoosh ইভেন্ট | `notificationType` / `subtype` |
| --------------- | ------------------------------ |
| `PW_SubscriptionStart` | `SUBSCRIBED` / `INITIAL_BUY` |
| `PW_SubscriptionRenew` | `DID_RENEW` |
| `PW_SubscriptionCancel` | `DID_CHANGE_RENEWAL_STATUS` / `AUTO_RENEW_DISABLED` |
| `PW_SubscriptionResume` | `DID_CHANGE_RENEWAL_STATUS` / `AUTO_RENEW_ENABLED`, `SUBSCRIBED` / `RESUBSCRIBE` |
| `PW_SubscriptionBillingIssue` | `DID_FAIL_TO_RENEW` |
| `PW_SubscriptionRecovered` | `DID_RENEW` / `BILLING_RECOVERY` |
| `PW_SubscriptionExpired` | `EXPIRED` |
| `PW_SubscriptionRefund` | `REFUND`, `REVOKE` |

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

</details>


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

1. একজন ব্যবহারকারীর অ্যাপ স্টোর অ্যাকাউন্টে একটি সাবস্ক্রিপশনের স্ট্যাটাস পরিবর্তন হয় (একটি কেনাকাটা, পুনর্নবীকরণ, বাতিলকরণ, ইত্যাদি)।
2. অ্যাপল আপনার Pushwoosh নোটিফিকেশন URL-এ একটি অ্যাপ স্টোর সার্ভার নোটিফিকেশন (V2) পাঠায়।
3. Pushwoosh সাইন করা পেলোড ডিকোড করে এবং ট্রানজ্যাকশন থেকে `appAccountToken` পড়ে।
4. Pushwoosh সেই ডিভাইসটি খুঁজে বের করে যার HWID সেই টোকেনের সাথে মেলে, তার সাথে আবদ্ধ ব্যবহারকারীকে খুঁজে পায় এবং সেই ব্যবহারকারীর জন্য সংশ্লিষ্ট `PW_Subscription*` ইভেন্ট পোস্ট করে।

<Aside type="caution" title="গুরুত্বপূর্ণ">
একটি অ্যাপ স্টোর ট্রানজ্যাকশন এবং একটি Pushwoosh ব্যবহারকারীর মধ্যে ম্যাচ `appAccountToken`-এর উপর নির্ভর করে। যদি আপনার অ্যাপ কেনার সময় এই টোকেন সেট না করে, Pushwoosh নোটিফিকেশন পায় কিন্তু **কোনো ইভেন্ট পোস্ট করা হয় না**। দেখুন [কিভাবে `appAccountToken` সেট করবেন](#set-appaccounttoken-to-the-devices-pushwoosh-hwid)।
</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 HWID-কে `appAccountToken` হিসাবে সেট করুন

Pushwoosh ডিভাইসের **HWID** থেকে সঠিক ব্যবহারকারীকে শনাক্ত করে, তাই আপনার অ্যাপকে অবশ্যই সাবস্ক্রিপশনটি StoreKit-এর মাধ্যমে কেনার সময় ডিভাইসের Pushwoosh HWID-কে `appAccountToken` হিসাবে সংযুক্ত করতে হবে।

ডিফল্টরূপে, Pushwoosh iOS SDK ডিভাইসের `identifierForVendor` (IDFV) কে HWID হিসাবে ব্যবহার করে। IDFV ইতিমধ্যেই একটি `UUID`, যা অ্যাপল `appAccountToken`-এর জন্য প্রয়োজনীয় ফরম্যাট। Pushwoosh তারপর স্বয়ংক্রিয়ভাবে সেই ডিভাইসের সাথে বর্তমানে আবদ্ধ ব্যবহারকারীকে খুঁজে বের করে, তাই এটি কাজ করে আপনি আপনার নিজের User ID `setUserId` দিয়ে অ্যাসাইন করুন বা না করুন।

<Tabs>
<TabItem label="StoreKit 2">
```swift
// Attach the device's Pushwoosh HWID (the default IDFV) as the appAccountToken
var options: Set<Product.PurchaseOption> = []
if let hwid = UIDevice.current.identifierForVendor {
    options.insert(.appAccountToken(hwid))
}

let result = try await product.purchase(options: options)
```
</TabItem>
<TabItem label="StoreKit 1">
```swift
// applicationUsername must be a UUID string to populate appAccountToken
let payment = SKMutablePayment(product: product)
payment.applicationUsername = UIDevice.current.identifierForVendor?.uuidString
SKPaymentQueue.default().add(payment)
```
</TabItem>
</Tabs>

<Aside type="caution">
যদি আপনার অ্যাপ Pushwoosh HWID ওভাররাইড করে (উদাহরণস্বরূপ, [`PushwooshKeychain`](/bn/developer/pushwoosh-sdk/ios-sdk/ios-keychain/) পারসিস্টেন্ট HWID মডিউল বা একটি কাস্টম মানের মাধ্যমে), তাহলে `appAccountToken`-কে সেই একই HWID-তে সেট করুন। টোকেনটি অবশ্যই Pushwoosh-এ ডিভাইসের HWID-এর সাথে মিলতে হবে, নতুবা ইভেন্টটি অ্যাট্রিবিউট করা যাবে না।
</Aside>

### আপনার Pushwoosh অ্যাপ্লিকেশন কোড খুঁজুন

Pushwoosh কন্ট্রোল প্যানেলে আপনার অ্যাপ্লিকেশনটি খুলুন। আপনার **অ্যাপ্লিকেশন কোড** (ফরম্যাট `XXXXX-XXXXX`) সাইডবারে প্রজেক্টের নামের নিচে দেখানো হয়েছে।

নোটিফিকেশন URL তৈরি করতে আপনার অ্যাপ্লিকেশন কোডের প্রয়োজন হবে।

### অ্যাপ স্টোর কানেক্টে নোটিফিকেশন URL যোগ করুন

1. [App Store Connect](https://appstoreconnect.apple.com/)-এ, **Apps → আপনার অ্যাপ → App Information** ( *General*-এর অধীনে)-এ যান এবং **App Store Server Notifications**-এ স্ক্রোল করুন।
2. **Version 2** নোটিফিকেশন নির্বাচন করুন।
3. **Production Server URL** এবং **Sandbox Server URL** উভয়কেই সেট করুন:

```
https://appstore-notifications.pushwoosh.com/appstore/YOUR_APPLICATION_CODE/
```

4. `YOUR_APPLICATION_CODE`-কে আগের ধাপ থেকে পাওয়া অ্যাপ্লিকেশন কোড দিয়ে প্রতিস্থাপন করুন। শেষের স্ল্যাশটি রাখুন।

<Aside type="note">
যদি আপনার অ্যাকাউন্ট **US ডেটা সেন্টারে** হোস্ট করা থাকে, তাহলে এর পরিবর্তে `https://appstore-notifications.pushwoosh.us/appstore/YOUR_APPLICATION_CODE/` ব্যবহার করুন। আপনি যদি নিশ্চিত না হন যে আপনার অ্যাকাউন্ট কোন ডেটা সেন্টার ব্যবহার করে, তাহলে আপনার কাস্টমার সাকসেস ম্যানেজারের সাথে বা [Pushwoosh সাপোর্ট](https://www.pushwoosh.com/contact-us/)-এর সাথে যোগাযোগ করুন।
</Aside>

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

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

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

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

## পরীক্ষা করা

অ্যাপ স্টোর সার্ভার নোটিফিকেশন অ্যাপলের **স্যান্ডবক্স** পরিবেশে ট্রিগার করা যেতে পারে। ইন্টিগ্রেশন যাচাই করতে:

1. উপরে বর্ণিত হিসাবে `appAccountToken` সেট করে একটি স্যান্ডবক্স সাবস্ক্রিপশন কিনুন। এটি `PW_SubscriptionStart` ফায়ার করবে।
2. ডিভাইসের সাবস্ক্রিপশন ম্যানেজমেন্ট স্ক্রিন থেকে স্বয়ংক্রিয়-পুনর্নবীকরণ নিষ্ক্রিয় করুন। এটি `PW_SubscriptionCancel` ফায়ার করবে।
3. Pushwoosh কন্ট্রোল প্যানেলে, ব্যবহারকারীর প্রোফাইল খুলুন এবং [ইভেন্টস হিস্ট্রি](/bn/product/audience-data-and-segmentation/user-explorer/#events-history-tab)-তে যান।
4. নিশ্চিত করুন যে ইভেন্টগুলি কয়েক মুহূর্তের মধ্যে প্রদর্শিত হচ্ছে।