# Cordova প্লাগইন কাস্টমাইজ করা

## ফোরগ্রাউন্ডে পুশ নোটিফিকেশন

ব্যাকগ্রাউন্ডে পুশ গ্রহণ করার সময়, পুশ নোটিফিকেশনে ক্লিক না করা পর্যন্ত কোনো ইভেন্ট ট্রিগার হয় না। এটি খোলার পরে, Pushwoosh প্লাগইন `push-receive` এবং `push-notification` ইভেন্ট ফায়ার করে।

যখন ফোরগ্রাউন্ডে একটি পুশ গ্রহণ করা হয়, প্লাগইনটি স্বয়ংক্রিয়ভাবে `push-receive` ফায়ার করে এবং নোটিফিকেশন সেন্টারে একটি নোটিফিকেশন তৈরি করে। যখন এই নোটিফিকেশনটি খোলা হয়, তখন এটি `push-notification` ফায়ার করে।

আপনি `push-receive` ইভেন্ট শুনতে পারেন যাতে ফোরগ্রাউন্ডে পুশ পাওয়ার সাথে সাথে প্রতিক্রিয়া জানাতে পারেন, যেমন আপনার অ্যাপের বর্তমান পেজের কন্টেন্ট আপডেট করা। অন্যদিকে, `push-notification` একটি নোটিফিকেশন ক্লিক ইভেন্টে প্রতিক্রিয়া জানাতে ব্যবহৃত হয়, যার জন্য ব্যবহারকারীর ইন্টারঅ্যাকশন প্রয়োজন, যেমন আপনার অ্যাপের মধ্যে নেভিগেট করা, আপনার অ্যাপে একটি নতুন প্রক্রিয়া ট্রিগার করা ইত্যাদি।

পুশ নোটিফিকেশনের ফোরগ্রাউন্ড অ্যাপিয়ারেন্স পরিবর্তন করতে, আপনি **IOS\_FOREGROUND\_ALERT\_TYPE** এবং **ANDROID\_FOREGROUND\_PUSH** প্রেফারেন্স ব্যবহার করতে পারেন:

**IOS\_FOREGROUND\_ALERT\_TYPE**

*   `NONE` – অ্যাপ ফোরগ্রাউন্ডে থাকলে কোনো নোটিফিকেশন প্রদর্শন করবেন না (ডিফল্ট)
*   `BANNER` – একটি ব্যানার ইন-অ্যাপ অ্যালার্ট প্রদর্শন করে
*   `ALERT` – অ্যালার্ট নোটিফিকেশন

**ANDROID\_FOREGROUND\_PUSH**

*   `true` – ফোরগ্রাউন্ড পুশ স্বয়ংক্রিয়ভাবে হ্যান্ডেল করবেন না
*   `false` – ফোরগ্রাউন্ড পুশ স্বয়ংক্রিয়ভাবে হ্যান্ডেল করুন (ডিফল্ট)

উদাহরণ:

```
cordova plugin add pushwoosh-cordova-plugin --variable IOS_FOREGROUND_ALERT_TYPE="ALERT" --variable ANDROID_FOREGROUND_PUSH="true"
```

## কাস্টম পুশ সাউন্ড

অ্যান্ড্রয়েডে কাস্টম নোটিফিকেশন সাউন্ড সক্রিয় করতে, সাউন্ড ফাইলগুলো **www/res** ফোল্ডারে রাখুন এবং `config.xml`-এ প্রতিটি সাউন্ড নির্দিষ্ট করুন:

```txt
<?xml version=‘1.0’ encoding=‘utf-8’?>
<widget id="YOUR_ID" version="1.0.0" xmlns="http://www.w3.org/ns/widgets” xmlns:cdv=“http://cordova.apache.org/ns/1.0">
	...
    <platform name="android">
        <allow-intent href="market:*" />
		...
        <-- Add this line for each sound -->
        <resource-file src="www/res/push.wav" target="res/raw/push.wav" />
    </platform>
</widget>
```

সাউন্ডগুলো **Send Push** প্যানেলের **Sound** ড্রপডাউন মেনুতে অ্যাক্সেসযোগ্য হবে।

iOS-এ, সাউন্ড ফাইলগুলো এখনও Pushwoosh অ্যাপ্লিকেশনের সাথে স্বয়ংক্রিয়ভাবে যুক্ত হয় না, তবে ম্যানুয়ালি ব্যবহার করা যেতে পারে, যেমন `www/res/sound_name.wav`।

<Aside type="caution">
#### iOS

iOS নোটিফিকেশন শুধুমাত্র .aiff, .wav, এবং .caf ফাইল ফরম্যাট সমর্থন করে।
</Aside>

## কাস্টম পুশ আইকন

পুশ নোটিফিকেশন আইকন অ্যান্ড্রয়েডে স্থানীয়ভাবে কাস্টমাইজ করা যেতে পারে `pw_notification` রিসোর্স নাম ব্যবহার করে (নমুনা দেখুন [1](https://github.com/Pushwoosh/pushwoosh-phonegap-cordova-sample/blob/master/Cordova/hooks/after_platform_add/2_set_notification_icon.js) [2](https://github.com/Pushwoosh/pushwoosh-phonegap-cordova-sample/tree/master/Cordova/config/android/res)); অথবা দূরবর্তীভাবে **Send Push** প্যানেলের **Icon** সেটিং-এ যেকোনো রিসোর্স নামের রেফারেন্স দিয়ে।

## কাস্টম পুশ ডেটা

কাস্টম পুশ ডেটা **Send Push** প্যানেলের **Action** সেটিং ব্যবহার করে পাঠানো যেতে পারে। এই ধরনের ডেটা গ্রহণ এবং হ্যান্ডেল করতে নিম্নলিখিত কোডটি ব্যবহার করুন:

```javascript
document.addEventListener('push-notification',
  function(event) {
    var message = event.notification.message; // Push message
    var userData = event.notification.userdata; // Custom push data

    if (userData) {
      // handle custom push data here
    }
  }
);
```

## লগ লেভেল নিয়ন্ত্রণ করা

ডিবাগিং এবং ইন্টিগ্রেশনে সহায়তা করার জন্য, SDK ডিফল্টরূপে কনসোলে সমস্ত অনুরোধ প্রিন্ট করবে। আপনি যখন প্রোডাকশন বিল্ডের জন্য প্রস্তুত হবেন, তখন `LOG_LEVEL` ভেরিয়েবলটি নিম্নলিখিত মানগুলির মধ্যে একটিতে সেট করুন:

*   `NONE` – SDK থেকে কোনো লগ নেই
*   `ERROR` – শুধুমাত্র কনসোলে ত্রুটি প্রদর্শন করুন
*   `WARNING` – সতর্কতা দেখান
*   `INFO` – তথ্যমূলক বার্তা দেখান
*   `DEBUG` – ডিবাগ তথ্য সহ সবকিছু দেখান (ডিফল্ট)

উদাহরণ:

```
cordova plugin add pushwoosh-cordova-plugin --variable LOG_LEVEL="INFO"
```

## ডিপ লিঙ্কিং

আমরা [https://github.com/EddyVerbruggen/Custom-URL-scheme](https://github.com/EddyVerbruggen/Custom-URL-scheme) ব্যবহার করার সুপারিশ করি।\
Cordova-এর জন্য ডিপ লিঙ্ক সেট করা খুব সহজ এবং এটি Pushwoosh ডিপ লিঙ্কিং কার্যকারিতার সাথে আউট অফ দ্য বক্স কাজ করে।

আপনি [এই গাইডে](/bn/developer/guides/messaging-channels/deep-linking/) অথবা [প্লাগইন ডক্সে](https://github.com/EddyVerbruggen/Custom-URL-scheme#2-installation) ইনস্টলেশন এবং ব্যবহার খুঁজে পেতে পারেন।

## রিচ মিডিয়া JS ব্রিজ

আপনি জাভাস্ক্রিপ্ট ইন্টারফেসের মাধ্যমে Cordova WebView-তে রিচ মিডিয়া থেকে আপনার JS ফাংশন কল করতে পারেন।\
রিচ মিডিয়া থেকে একটি কলের নিম্নলিখিত ফরম্যাট থাকতে হবে:

\<interface>.callFunction('\<function\_name>', \<params\_string>)

উদাহরণ:

**১.** একটি জাভাস্ক্রিপ্ট কল সহ রিচ মিডিয়া তৈরি করুন:

```javascript
testBridge.callFunction('testFunction', JSON.stringify({'param1' : 1, 'param2':'test'}))
```

**২.** আপনার প্রজেক্টে একটি জাভাস্ক্রিপ্ট ইন্টারফেস যোগ করুন:

```javascript
pushNotification.addJavaScriptInterface('testBridge');
```

**৩.** ফাংশন যোগ করুন:

```javascript
function testFunction(params) {
    alert("Bridge is working! " + params.param1 + " " + params.param2);
}
```

## অন্যান্য FCM পরিষেবার সাথে Pushwoosh প্লাগইন ব্যবহার করা

যদি আপনার অ্যাপ **firebase-messaging**-এর উপর নির্ভরশীল অন্যান্য প্লাগইন ব্যবহার করে, তাহলে এর ফলে দ্বন্দ্ব হতে পারে, অথবা প্লাগইনগুলির মধ্যে একটি প্রত্যাশিতভাবে কাজ নাও করতে পারে। এই দ্বন্দ্ব সমাধান করতে, আপনি একটি কাস্টম FirebaseMessagingService ক্লাস যোগ করতে পারেন যা প্লাগইনগুলির মধ্যে পুশ নোটিফিকেশন রুট করবে। Pushwoosh Cordova প্লাগইনে এই ক্লাসের একটি টেমপ্লেট রয়েছে যা আপনি যেমন আছে তেমন ব্যবহার করতে পারেন সমস্ত নোটিফিকেশন Pushwoosh হ্যান্ডলারের মাধ্যমে যেতে বাধ্য করার জন্য অথবা অন্যান্য প্রদানকারীদের থেকে নোটিফিকেশন হ্যান্ডেল করার জন্য এটি পরিবর্তন করতে পারেন। টেমপ্লেটটি সক্রিয় করতে, প্লাগইনের `plugin.xml`-এ নিম্নলিখিত লাইনগুলি আনকমেন্ট করুন:

```
    <service android:name="com.pushwoosh.plugin.pushnotifications.CustomFirebaseMessagingService" android:exported="false">
        <intent-filter>
            <action android:name="com.google.firebase.MESSAGING_EVENT"/>
        </intent-filter>
    </service>
```

## আমাদের সাথে আপনার মতামত শেয়ার করুন

আপনার মতামত আমাদের একটি উন্নত অভিজ্ঞতা তৈরি করতে সাহায্য করে, তাই SDK ইন্টিগ্রেশন প্রক্রিয়ার সময় আপনার কোনো সমস্যা হলে আমরা আপনার কাছ থেকে শুনতে চাই। আপনি যদি কোনো অসুবিধার সম্মুখীন হন, অনুগ্রহ করে [এই ফর্মের মাধ্যমে](https://docs.google.com/forms/d/e/1FAIpQLSd_0b8jwn-V_JmoPLIxIFYbHACCQhrzidOZV3ELywoQPXRSxw/viewform) আমাদের সাথে আপনার চিন্তা শেয়ার করতে দ্বিধা করবেন না।