# Cordova SDK বেসিক ইন্টিগ্রেশন গাইড

এই বিভাগে আপনার অ্যাপ্লিকেশনে Pushwoosh Cordova SDK কীভাবে ইন্টিগ্রেট করতে হয় সে সম্পর্কে তথ্য রয়েছে।

## পূর্বশর্ত

আপনার অ্যাপে Pushwoosh Cordova SDK ইন্টিগ্রেট করার জন্য, আপনার নিম্নলিখিত জিনিসগুলির প্রয়োজন হবে:

<Aside type="note" title="প্রয়োজনীয়তা">
 - একটি [Pushwoosh অ্যাকাউন্ট](https://sso.pushwoosh.com/login)।
 - আপনার অ্যাকাউন্টে একটি [Pushwoosh প্রজেক্ট](/bn/product/first-steps/start-with-your-project/create-your-project) সেট আপ করা।
 - **iOS ইন্টিগ্রেশনের জন্য:**
    - পুশ নোটিফিকেশন পাঠানোর জন্য কনফিগার করা একটি iOS প্ল্যাটফর্ম। আমরা সবচেয়ে সহজ পদ্ধতি হিসাবে [টোকেন-ভিত্তিক প্রমাণীকরণ কনফিগারেশন](/bn/developer/first-steps/connect-messaging-services/ios-configuration/ios-token-based-configuration/) ব্যবহার করার সুপারিশ করি।
    - সিমুলেটরে পুশ পাঠানোর জন্য গেটওয়েকে `Sandbox`-এ সেট করুন।
 - **Android ইন্টিগ্রেশনের জন্য:**
    - একটি [কনফিগার করা Android প্ল্যাটফর্ম](/bn/developer/first-steps/connect-messaging-services/android-configuration/android-firebase-configuration)
    - আপনার Firebase প্রজেক্ট থেকে `google-services.json` ফাইল এবং `package name`।
    - আপনার Android অ্যাপ্লিকেশনের সাথে সংযুক্ত একটি Firebase প্রজেক্ট। প্রয়োজনে [Firebase সেটআপ গাইড](https://firebase.google.com/docs/android/setup#manually_add_firebase) অনুসরণ করুন।
 - আপনার অ্যাপ্লিকেশনের জন্য Pushwoosh কন্ট্রোল প্যানেল থেকে আপনার `Pushwoosh অ্যাপ্লিকেশন কোড` এবং [Pushwoosh ডিভাইস API টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token)।
</Aside>

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

### 1. Pushwoosh Cordova SDK ডিপেন্ডেন্সি যোগ করুন

আপনার প্রজেক্টে Pushwoosh Cordova SDK ডিপেন্ডেন্সি যোগ করুন:

```bash
cordova plugin add pushwoosh-cordova-plugin
```

### 2. Cordova SDK ইনিশিয়ালাইজেশন

আপনার `index.js` ফাইলের রুট কম্পোনেন্টে, `deviceready` ইভেন্ট হ্যান্ডলারের ভিতরে নিম্নলিখিত কোডটি যোগ করুন। ধাপগুলি সঠিক ক্রমে অনুসরণ করুন:

```javascript title="index.js"
document.addEventListener('deviceready', function() {
    var pushwoosh = cordova.require("pushwoosh-cordova-plugin.PushNotification");

    // 1. Register notification callbacks before initialization
    document.addEventListener('push-receive', function(event) {
        var notification = event.notification;
        console.log("Push received: " + JSON.stringify(notification));
    });

    document.addEventListener('push-notification', function(event) {
        var notification = event.notification;
        console.log("Push opened: " + JSON.stringify(notification));
    });

    // 2. Initialize Pushwoosh
    pushwoosh.onDeviceReady({
        appid: "__YOUR_APP_ID__"
    });

    // 3. Register the device to receive push notifications
    pushwoosh.registerDevice(
        function(status) {
            var pushToken = status.pushToken;
            // Handle successful registration
        },
        function(status) {
            // Handle registration error
        }
    );
}, false);
```

যেখানে:
- `__YOUR_APP_ID__` হল Pushwoosh কন্ট্রোল প্যানেল থেকে অ্যাপ্লিকেশন কোড।

<Aside type="caution" title="ইনিশিয়ালাইজেশনের ক্রম গুরুত্বপূর্ণ">
ইনিশিয়ালাইজেশন ক্রমটি **অবশ্যই** উপরে দেখানো সঠিক ক্রম অনুসরণ করতে হবে:

1. **প্রথমে ইভেন্ট লিসেনার রেজিস্টার করুন** (`push-receive`, `push-notification`)
2. **তারপর** `onDeviceReady()` কল করুন
3. **তারপর** `registerDevice()` কল করুন

এই ক্রম পরিবর্তন করলে নিম্নলিখিত সমস্যা হতে পারে:

- **`onDeviceReady()`-এর পরে রেজিস্টার করা ইভেন্ট লিসেনার:** যদি অ্যাপটি একটি পুশ নোটিফিকেশনে ট্যাপ করে চালু করা হয় (কোল্ড স্টার্ট), `onDeviceReady()` অবিলম্বে জাভাস্ক্রিপ্টে লঞ্চ নোটিফিকেশন পেলোড সরবরাহ করে। যদি আপনার লিসেনাররা সেই সময়ে রেজিস্টার করা না থাকে, **লঞ্চ নোটিফিকেশনটি হারিয়ে যায়** এবং এটি পুনরুদ্ধার করার কোনো উপায় থাকে না।
- **`onDeviceReady()`-এর আগে `registerDevice()` কল করা হলে:** নেটিভ SDK এখনও আপনার অ্যাপ আইডি দিয়ে সঠিকভাবে কনফিগার করা নাও হতে পারে, যার ফলে ডিভাইস রেজিস্ট্রেশন নিঃশব্দে ব্যর্থ হতে পারে বা একটি ত্রুটি ফেরত দিতে পারে।
- **`registerDevice()`-এর পরে রেজিস্টার করা ইভেন্ট লিসেনার:** আপনার লিসেনাররা জায়গায় আসার আগে যে কোনো পুশ নোটিফিকেশন আসে এবং প্রক্রিয়া করা হয় তা একটি DOM ইভেন্ট হিসাবে পাঠানো হবে এবং প্লাগইনে কোনো রিপ্লে মেকানিজম না থাকায় **নিঃশব্দে বাদ দেওয়া হবে**।

প্লাগইনটি জাভাস্ক্রিপ্ট সাইডে মিসড ইভেন্টগুলিকে কিউ বা বাফার করে না। `document.dispatchEvent()` দ্বারা ফায়ার করা DOM ইভেন্টগুলি শুধুমাত্র সেই লিসেনারদের কাছে সরবরাহ করা হয় যারা ডিসপ্যাচের সময় ইতিমধ্যে রেজিস্টার করা আছে।
</Aside>


### 3. iOS নেটিভ সেটআপ

#### 3.1 Capabilities

আপনার প্রজেক্টে পুশ নোটিফিকেশন সক্রিয় করতে, আপনাকে নির্দিষ্ট কিছু capabilities যোগ করতে হবে।

Signing & Capabilities বিভাগে, নিম্নলিখিত capabilities যোগ করুন:
- `Push Notifications`
- `Background Modes`। এই capability যোগ করার পরে, `Remote notifications`-এর জন্য বক্সটি চেক করুন।

আপনি যদি Time Sensitive Notifications (iOS 15+) ব্যবহার করতে চান, তাহলে `Time Sensitive Notifications` capability-টিও যোগ করুন।

#### 3.2 Info.plist

আপনার `Runner/Info.plist`-এ `__PUSHWOOSH_DEVICE_API_TOKEN__` কী-কে [Pushwoosh ডিভাইস API টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token)-এ সেট করুন:
```swift title="info.plist"
<key>Pushwoosh_API_TOKEN</key>
<string>__PUSHWOOSH_DEVICE_API_TOKEN__</string>
```

#### 3.3 বার্তা ডেলিভারি ট্র্যাকিং

আপনাকে অবশ্যই আপনার প্রজেক্টে একটি Notification Service Extension টার্গেট যোগ করতে হবে। এটি iOS-এ সঠিক ডেলিভারি ট্র্যাকিং এবং রিচ মিডিয়ার মতো বৈশিষ্ট্যগুলির জন্য অপরিহার্য।

এক্সটেনশন টার্গেট এবং এর মধ্যে প্রয়োজনীয় Pushwoosh কোড যোগ করতে [নেটিভ গাইডের ধাপগুলি](/bn/developer/pushwoosh-sdk/ios-sdk/setting-up-pushwoosh-ios-sdk/basic-integration-guide/#4-message-delivery-tracking) অনুসরণ করুন।

### 4. Android নেটিভ সেটআপ

#### 4.1 ডিপেন্ডেন্সি ইনস্টল করুন

নিশ্চিত করুন যে প্রয়োজনীয় ডিপেন্ডেন্সি এবং প্লাগইনগুলি আপনার Gradle স্ক্রিপ্টে যোগ করা হয়েছে:

আপনার প্রজেক্ট-স্তরের `build.gradle` ডিপেন্ডেন্সিতে Google Services Gradle প্লাগইন যোগ করুন:

```groovy title="android/build.gradle"
buildscript {
  dependencies {
    classpath 'com.google.gms:google-services:4.3.15'
  }
}
```

আপনার অ্যাপ-স্তরের `build.gradle` ফাইলে প্লাগইনটি প্রয়োগ করুন:

```groovy title="app/build.gradle"
apply plugin: 'com.google.gms.google-services'
```

#### 4.2 Firebase কনফিগারেশন ফাইল যোগ করুন

আপনার প্রজেক্ট ডিরেক্টরিতে `android/app` ফোল্ডারের মধ্যে `google-services.json` ফাইলটি রাখুন।

#### 4.3 Pushwoosh মেটাডেটা যোগ করুন

আপনার `main/AndroidManifest.xml`-এ `<application>` ট্যাগের ভিতরে [Pushwoosh ডিভাইস API টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token) যোগ করুন:

```xml title="AndroidManifest.xml"
<meta-data android:name="com.pushwoosh.apitoken" android:value="__YOUR_DEVICE_API_TOKEN__" />
```

> **গুরুত্বপূর্ণ:** আপনার Pushwoosh কন্ট্রোল প্যানেলে সঠিক অ্যাপে টোকেন অ্যাক্সেস দিতে ভুলবেন না। [আরও জানুন](/bn/developer/api-reference/api-access-token/#edit-token)

### 5. প্রজেক্টটি চালান

1. প্রজেক্টটি বিল্ড করুন এবং চালান।
2. Pushwoosh কন্ট্রোল প্যানেলে যান এবং [একটি পুশ নোটিফিকেশন পাঠান](/bn/product/messaging-channels/push-notifications/send-push-notifications/one-time-push)।
3. আপনার অ্যাপে নোটিফিকেশনটি দেখতে পাওয়া উচিত।

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

এই পর্যায়ে, আপনি ইতিমধ্যে SDK ইন্টিগ্রেট করেছেন এবং পুশ নোটিফিকেশন পাঠাতে ও গ্রহণ করতে পারেন। এখন, আসুন মূল কার্যকারিতা অন্বেষণ করি

### পুশ নোটিফিকেশন ইভেন্ট লিসেনার

Pushwoosh SDK-তে দুটি ইভেন্ট লিসেনার রয়েছে, যা পুশ নোটিফিকেশন হ্যান্ডেল করার জন্য ডিজাইন করা হয়েছে:

- `push-receive` ইভেন্টটি ট্রিগার হয় যখন অ্যাপটি ফোরগ্রাউন্ডে থাকা অবস্থায় একটি পুশ নোটিফিকেশন পাওয়া যায়
- `push-notification` ইভেন্টটি ট্রিগার হয় যখন একজন ব্যবহারকারী একটি নোটিফিকেশন খোলে

এই ইভেন্ট লিসেনারগুলি **অবশ্যই** `onDeviceReady()` কল করার **আগে** রেজিস্টার করতে হবে, যেমনটি [উপরের ইনিশিয়ালাইজেশন ধাপে](#2-cordova-sdk-initialization) দেখানো হয়েছে। আপনি আপনার প্রয়োজন অনুসারে হ্যান্ডলার লজিক কাস্টমাইজ করতে পারেন:

```javascript title="index.js"
// Register before onDeviceReady()
document.addEventListener('push-receive', function(event) {
    var message = event.notification.message;
    var payload = event.notification.userdata;
    console.log("Push received: " + message);
    // Add your custom logic here
});

document.addEventListener('push-notification', function(event) {
    var message = event.notification.message;
    var payload = event.notification.userdata;
    console.log("Push accepted: " + message);
    // Add your custom logic here (e.g., navigate to a specific screen)
});
```

### ব্যবহারকারী কনফিগারেশন

ব্যক্তিগত ব্যবহারকারীর আচরণ এবং পছন্দের উপর ফোকাস করে, আপনি ব্যক্তিগতকৃত সামগ্রী সরবরাহ করতে পারেন, যা ব্যবহারকারীর সন্তুষ্টি এবং আনুগত্য বৃদ্ধি করে

```javascript
class Registration {
  afterUserLogin(user) {

    // Set user ID
    pushwoosh.setUserId(user.getId());
    
    // Setting additional user information as tags for Pushwoosh
    pushwoosh.setTags({
      "age": user.getAge(),
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }
}
```

### ট্যাগ

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

```javascript
class UpdateUser {
  afterUserUpdateProfile(user) {

    // Set list of favorite categories
    pushwoosh.setTags({
      "favorite_categories": user.getFavoriteCategoriesList()
    });
    
    // Set payment information
    pushwoosh.setTags({
      "is_subscribed": user.isSubscribed(),
      "payment_status": user.getPaymentStatus(),
      "billing_address": user.getBillingAddress()
    });
  }
}
```

### ইভেন্ট

ইভেন্ট হল অ্যাপের মধ্যে নির্দিষ্ট ব্যবহারকারীর ক্রিয়া বা ঘটনা যা আচরণ বিশ্লেষণ করতে এবং সংশ্লিষ্ট বার্তা বা ক্রিয়া ট্রিগার করতে ট্র্যাক করা যেতে পারে

```javascript
class Registration {

  // Track login event
  afterUserLogin(user) {
    pushwoosh.postEvent("login", {
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }

  // Track purchase event
  afterUserPurchase(product) {
    pushwoosh.postEvent("purchase", {
      "product_id": product.getId(),
      "product_name": product.getName(),
      "price": product.getPrice(),
      "quantity": product.getQuantity()
    });
  }
}
```

## সমস্যা সমাধান

ইন্টিগ্রেশন প্রক্রিয়ার সময় যদি আপনি কোনো সমস্যার সম্মুখীন হন, অনুগ্রহ করে [সাপোর্ট এবং কমিউনিটি](/bn/developer/pushwoosh-sdk/support-and-community) বিভাগটি দেখুন।