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

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

## পূর্বশর্ত

আপনার অ্যাপে Pushwoosh Flutter 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 প্ল্যাটফর্ম। আমরা সবচেয়ে সহজ পদ্ধতি হিসাবে [Token-Based Authentication কনফিগারেশন](/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>

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

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

আপনার `pubspec.yaml` ফাইলে `pushwoosh_flutter` প্যাকেজ যোগ করুন:

```yaml title="pubspec.yaml"
dependencies:
  flutter:
    sdk: flutter
  # Use the latest version from https://pub.dev/packages/pushwoosh_flutter
  pushwoosh_flutter: ^[LATEST_VERSION]
```
pub.dev-এ [সর্বশেষ সংস্করণ](https://pub.dev/packages/pushwoosh_flutter) দেখুন।

তারপর, ডিপেন্ডেন্সি ইনস্টল করতে আপনার প্রজেক্টের রুট ডিরেক্টরিতে নিম্নলিখিত কমান্ডটি চালান:

```bash
flutter pub get
```

প্যাকেজটি সঠিকভাবে ইনস্টল হয়েছে কিনা তা দুবার পরীক্ষা করুন:
```bash
flutter pub deps | grep pushwoosh_flutter

# Example output:
# ❯ flutter pub deps | grep pushwoosh_flutter
# └── pushwoosh_flutter 2.3.11
```

### ২. Flutter SDK ইনিশিয়ালাইজেশন

আপনার `main.dart` ফাইলের রুট কম্পোনেন্টে:
- `pushwoosh_flutter` প্যাকেজটি ইম্পোর্ট করুন।
- Pushwoosh SDK ইনিশিয়ালাইজ করুন।
- পুশ নোটিফিকেশনের জন্য রেজিস্টার করতে আপনার ইনিশিয়ালাইজেশন লজিকে `registerForPushNotifications()` কল করুন।

```dart title="main.dart"
import 'package:pushwoosh_flutter/pushwoosh_flutter.dart';

void main() async {
  runApp(const MyApp());
  Pushwoosh.initialize({
    "app_id": "__YOUR_APP_ID__"
  });
  Pushwoosh.getInstance.registerForPushNotifications();
}
```

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


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

#### ৩.১ Capabilities

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

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

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

#### ৩.২ 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>
```

#### ৩.৩ মেসেজ ডেলিভারি ট্র্যাকিং

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

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

আপনার Flutter প্রজেক্টে Notification Service Extension সঠিকভাবে ইন্টিগ্রেটেড হয়েছে তা নিশ্চিত করতে, আপনাকে নিম্নলিখিত Podfile কনফিগারেশন ব্যবহার করতে হবে:

```ruby title="Podfile"
target 'NotificationServiceExtension' do
  use_frameworks!
  use_modular_headers!

  pod 'PushwooshXCFramework'

  inherit! :search_paths
end
```

#### ৩.৪ iOS Flutter প্রজেক্টের জন্য ডিপেন্ডেন্সি ইনস্টল করা

iOS Flutter প্রজেক্টের জন্য ডিপেন্ডেন্সি ইনস্টল করতে, নিম্নলিখিত কমান্ডটি চালান:

```bash
flutter run
```

অথবা টার্মিনালে `ios` ফোল্ডারে নেভিগেট করুন এবং চালান:

```bash
pod install --repo-update
```

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

#### ৪.১ ডিপেন্ডেন্সি ইনস্টল করুন

নিশ্চিত করুন যে প্রয়োজনীয় ডিপেন্ডেন্সি এবং প্লাগইনগুলি আপনার 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'
```

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

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

#### ৪.৩ 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)

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

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

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

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

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

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

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

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

```dart
import 'package:pushwoosh_flutter/pushwoosh_flutter.dart';

class PushwooshNotificationHandler {
  void setupPushListeners(Pushwoosh pushwoosh) {

    pushwoosh.onPushReceived.listen((event) {
      print("Push received: ${event.pushwooshMessage.payload}");
    });

    pushwoosh.onPushAccepted.listen((event) {
      print("Push accepted: ${event.pushwooshMessage.payload}");
    });
    
  }
}
```

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

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

```dart
import 'package:pushwoosh_flutter/pushwoosh_flutter.dart';

class Registration {
  void afterUserLogin(User user) {
  
    // ব্যবহারকারী আইডি সেট করুন
    Pushwoosh().setUserId(user.getId());
    
    // ব্যবহারকারী ইমেল সেট করুন
    Pushwoosh().setEmail(user.getEmail());

    // SMS নম্বর রেজিস্টার করুন
    // SMS এবং WhatsApp নম্বরগুলি অবশ্যই E.164 ফরম্যাটে (যেমন, "+1234567890") এবং বৈধ হতে হবে
    Pushwoosh().registerSmsNumber(user.getSmsNumber());

    // WhatsApp নম্বর রেজিস্টার করুন
    Pushwoosh().registerWhatsappNumber(user.getWhatsappNumber());
    
    // Pushwoosh-এর জন্য ট্যাগ হিসাবে অতিরিক্ত ব্যবহারকারীর তথ্য সেট করা
    Pushwoosh().setTags({
      "age": user.getAge(),
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }
}
```

### ট্যাগ

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

```dart
import 'package:pushwoosh_flutter/pushwoosh_flutter.dart';

class UpdateUser {
  void afterUserUpdateProfile(User user) {

    // প্রিয় ক্যাটাগরির তালিকা সেট করুন
    Pushwoosh().setTags({
      "favorite_categories": user.getFavoriteCategoriesList()
    });
    
    // পেমেন্ট তথ্য সেট করুন
    Pushwoosh().setTags({
      "is_subscribed": user.isSubscribed(),
      "payment_status": user.getPaymentStatus(),
      "billing_address": user.getBillingAddress()
    });
  }
}
```

### ইভেন্ট

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

```dart
import 'package:pushwoosh_flutter/pushwoosh_flutter.dart';

class Registration {

  // লগইন ইভেন্ট ট্র্যাক করুন
  void afterUserLogin(User user) {
    Pushwoosh().postEvent("login", {
      "name": user.getName(),
      "last_login": user.getLastLoginDate()
    });
  }

  void afterUserPurchase(Product product) {

  // ক্রয় ইভেন্ট ট্র্যাক করুন
  Pushwoosh().postEvent("purchase", {
    "product_id": product.getId(),
    "product_name": product.getName(),
    "price": product.getPrice(),
    "quantity": product.getQuantity()
  });
 }
}
```

## ProGuard ব্যবহার

<Aside type="note">
মনে রাখবেন যে `flutter build apk` কমান্ডটি ডিফল্টরূপে আপনার কোডকে অবফাসকেট (obfuscate) করে।
</Aside>

সুতরাং, আপনি এই ব্যতিক্রমটি পেতে পারেন:

```java
java.lang.IllegalStateException: Could not find class for name: com.pushwoosh.plugin.PushwooshNotificationServiceExtension
```

এই ক্ষেত্রে দুটি সমাধান আছে:

১. অবফাসকেশন ছাড়া আপনার কোড কম্পাইল করতে `flutter build apk --no-shrink` কমান্ডটি ব্যবহার করুন।
২. অথবা আপনি ম্যানুয়ালি ProGuard সক্রিয় করতে পারেন এবং প্রয়োজনীয় নিয়ম যোগ করতে পারেন।

আপনার প্রজেক্টের জন্য ProGuard সক্রিয় করতে, আপনার `build.gradle` ফাইলে নিম্নলিখিত স্ট্রিংগুলি যোগ করুন:

```java title="build.gradle"
buildTypes {
        release {
            minifyEnabled true
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'

            signingConfig signingConfigs.debug
        }
    }
```

তারপর, `android/app/proguard-rules.pro`-তে নিম্নলিখিত নিয়মগুলি যোগ করুন

```java title="proguard-rules.pro"
#Pushwoosh Flutter
-keep class com.pushwoosh.plugin.PushwooshPlugin { *; }
-keep class com.pushwoosh.plugin.PushwooshNotificationServiceExtension { *; }
```


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

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