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

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

## পূর্বশর্ত

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

<Aside type="note" title="প্রয়োজনীয়তা">
 - একটি [পুশউশ অ্যাকাউন্ট](https://sso.pushwoosh.com/login)।
 - আপনার অ্যাকাউন্টে একটি [পুশউশ প্রজেক্ট](/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)
    - আপনার ফায়ারবেস প্রজেক্ট থেকে `google-services.json` ফাইল এবং `package name`।
    - আপনার অ্যান্ড্রয়েড অ্যাপ্লিকেশনের সাথে সংযুক্ত একটি ফায়ারবেস প্রজেক্ট। প্রয়োজনে [ফায়ারবেস সেটআপ গাইড](https://firebase.google.com/docs/android/setup#manually_add_firebase) অনুসরণ করুন।
 - আপনার অ্যাপ্লিকেশনের জন্য পুশউশ কন্ট্রোল প্যানেল থেকে আপনার `Pushwoosh Application Code` এবং [পুশউশ ডিভাইস API টোকেন](/bn/developer/api-reference/api-access-token/#device-api-token)।
</Aside>

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

### ১. প্লাগইন ইনস্টল করুন

এক্সপো CLI ব্যবহার করে পুশউশ এক্সপো প্লাগইন ইনস্টল করুন

```bash
expo install pushwoosh-expo-plugin
```

পুশউশ রিঅ্যাক্ট নেটিভ SDK ইনস্টল করুন

```bash
npm install pushwoosh-react-native-plugin --save
```

### ২. প্লাগইন প্রপার্টি সেট করুন

প্রয়োজনীয় প্রপার্টি সহ প্লাগইনটিকে প্লাগইন অ্যারের সামনে যোগ করুন:

```json title="app.json/app.config.js"
{
  "expo": {
    "plugins": [
      [
        "pushwoosh-expo-plugin",
        {
          "mode": "development",
          "ios": {
            "PW_API_TOKEN": "__YOUR_DEVICE_API_TOKEN__"
          },
          "android": {
            "apiToken": "__YOUR_DEVICE_API_TOKEN__"
          }
        }
      ]
    ]
  }
}
```
যেখানে:

- `mode` APNs এনভায়রনমেন্ট এনটাইটেলমেন্ট কনফিগার করতে ব্যবহৃত হয়। “Development” বা “production” মান উপলব্ধ।
- `PW_API_TOKEN`, `apiToken` হল আপনার [পুশউশ ডিভাইস API টোকেন।](/bn/developer/api-reference/api-access-token/#device-api-token)

### ৩. পুশউশ ইনিশিয়ালাইজ করুন

আপনার অ্যাপ্লিকেশনের রুট কম্পোনেন্টে:
- `pushwoosh-react-native-plugin` প্লাগইনটি ইম্পোর্ট করুন।
- পুশউশ SDK ইনিশিয়ালাইজ করুন।
- পুশ নোটিফিকেশনের জন্য রেজিস্টার করতে আপনার ইনিশিয়ালাইজেশন লজিকে `register()` কল করুন।

```javascript title="index.tsx"
import Pushwoosh from 'pushwoosh-react-native-plugin';

Pushwoosh.init({
    "pw_appid": "__YOUR_APP_ID__"
});

Pushwoosh.register();
```
যেখানে:
- `__YOUR_APP_ID__` হল পুশউশ কন্ট্রোল প্যানেল থেকে অ্যাপ্লিকেশন কোড।

### ৪. অ্যান্ড্রয়েড নেটিভ সেটআপ

ফায়ারবেস কনফিগারেশন ফাইল যোগ করুন:

1. আপনার `google-services.json` ফাইলটি প্রজেক্টের রুট ডিরেক্টরিতে কপি করুন।
2. `googleServicesFile` প্রপার্টিকে আপনার `google-services.json`-এর পাথে সেট করুন এবং `package` প্রপার্টি নির্দিষ্ট করুন:

```json title="app.json/app.config.js"
  "expo": {
    "name": "sample",
  "android": {
    "package": "com.pushwoosh.sample",
    "googleServicesFile": "./google-services.json"
  },
  "plugins": [
    [
      "pushwoosh-expo-plugin",
      {
        "mode": "development",
        "ios": {
          "PW_API_TOKEN": "__YOUR_DEVICE_API_TOKEN__"
        },
        "android": {
          "apiToken": "__YOUR_DEVICE_API_TOKEN__"
        }
      }
    ]
  ]
}
```

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

`bundleIdentifier` প্রপার্টিকে `ios` অবজেক্টে সেট করুন:

```json title="app.json/app.config.js"
  "expo": {
    "name": "sample",
    "ios": {
      "bundleIdentifier": "com.pushwoosh.sample"
    },
    "plugins": [
    [
      "pushwoosh-expo-plugin",
      {
        "mode": "development",
        "ios": {
          "PW_API_TOKEN": "__YOUR_DEVICE_API_TOKEN__"
        },
        "android": {
          "apiToken": "__YOUR_DEVICE_API_TOKEN__"
        }
      }
    ]
  ]
}
```

### ৬. অ্যাপটি প্রি-বিল্ড করুন
প্রি-বিল্ড চালিয়ে প্রতিটি প্ল্যাটফর্মের জন্য নেটিভ কোড তৈরি করুন এবং ডিপেন্ডেন্সি কনফিগার করুন:
```bash
npx expo prebuild
```

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

১. প্রজেক্টটি বিল্ড এবং রান করুন:
<Tabs>
<TabItem label="Android">
```bash
npx expo run:android
```
</TabItem>

<TabItem label="iOS">
```bash
npx expo run:ios
```
</TabItem>
</Tabs>

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

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

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

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

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

- `onPushReceived` ইভেন্টটি ট্রিগার হয়, যখন একটি পুশ নোটিফিকেশন গৃহীত হয়
- `onPushAccepted` ইভেন্টটি ট্রিগার হয়, যখন একজন ব্যবহারকারী একটি নোটিফিকেশন খোলেন

অ্যাপ্লিকেশন শুরু হওয়ার সময় SDK-এর ইনিশিয়ালাইজেশনের ঠিক পরেই আপনার এই ইভেন্ট লিসেনারগুলি সেট আপ করা উচিত:

```typescript 
import { DeviceEventEmitter } from 'react-native';
import Pushwoosh from 'pushwoosh-react-native-plugin';

class PushwooshNotificationHandler {
  setupPushListeners(): void {

    DeviceEventEmitter.addListener("pushReceived", (e) => {
      console.warn("Push received: " + JSON.stringify(e));
    });

    DeviceEventEmitter.addListener("pushOpened", (e) => {
      console.warn("Push opened:" + JSON.stringify(e));
    });

  }
}
```

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

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

```typescript
import Pushwoosh from 'pushwoosh-react-native-plugin';

class Registration {
  afterUserLogin(user: User): void {
    
    // Set user ID
    Pushwoosh.setUserId(user.getId());

    // Set user email
    Pushwoosh.setEmails(user.getEmailList());

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

### ট্যাগ

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

```typescript
import Pushwoosh from 'pushwoosh-react-native-plugin';

class UpdateUser {
  afterUserUpdateProfile(user: User): void {

    // 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()
    });
  }
}
```

### ইভেন্ট

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

```typescript
import Pushwoosh from 'pushwoosh-react-native-plugin';

class Registration {

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

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

### iOS-এর জন্য মেসেজ ডেলিভারি ট্র্যাকিং

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

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

### অতিরিক্ত প্লাগইন প্রপার্টি

| প্রপার্টি <div style="width:180px"></div> | ডিফল্ট <div style="width:100px"></div> | বিবরণ |
|-----------------|---------|-------------|
| **iOS প্রপার্টি** | | |
| `Pushwoosh_LOG_LEVEL` | `INFO` | iOS-এর জন্য লগ লেভেল। সম্ভাব্য মান: `NONE`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `NOISE` |
| **Android প্রপার্টি** | | |
| `logLevel` | `INFO` | Android-এর জন্য লগ লেভেল। এর মধ্যে একটি: `NONE`, `ERROR`, `WARN`, `INFO`, `DEBUG`, `NOISE` |
| `multiNotificationMode`| `true` | ব্যবহারকারীর জন্য শুধুমাত্র শেষ নোটিফিকেশনটি প্রদর্শন করতে চাইলে এটিকে false-এ পরিবর্তন করা যেতে পারে |
| `icon` | - | Android-এর জন্য একটি কাস্টম নোটিফিকেশন আইকনের পাথ |

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

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

###### FCM রেজিস্ট্রেশন ত্রুটি: টোকেন পুনরুদ্ধার করতে ব্যর্থ। ফায়ারবেস কি সঠিকভাবে কনফিগার করা হয়েছে?

নিশ্চিত করুন যে আপনার ফায়ারবেস `googleServicesFile` প্রপার্টি এক্সপো কনফিগারেশন ফাইলে সেট আপ করা আছে এবং `google-services.json` ফাইলটি আপনার প্রজেক্টের রুট ডিরেক্টরিতে যোগ করা হয়েছে:
```json title="app.json/app.config.js"
"expo": {
  "name": "sample",
  "android": {
    "package": "com.pushwoosh.sample",
    "googleServicesFile": "./google-services.json"
  },
  "plugins": [
    [
      "pushwoosh-expo-plugin",
      {
        "mode": "development",
        "ios": {
          "PW_API_TOKEN": "__YOUR_DEVICE_API_TOKEN__"
        },
        "android": {
          "apiToken": "__YOUR_DEVICE_API_TOKEN__"
        }
      }
    ]
  ]
}
```

###### TypeError: Cannot read property 'init' of null

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

```bash
npx expo prebuild
```