# การปรับแต่งปลั๊กอิน Cordova

## Push notifications ในเบื้องหน้า (foreground)

เมื่อได้รับ push ในเบื้องหลัง (background) จะไม่มี event ใดๆ เกิดขึ้นจนกว่าจะมีการคลิกที่ push notification หลังจากที่เปิดแล้ว Pushwoosh plugin จะส่ง event `push-receive` และ `push-notification`

เมื่อได้รับ push ในเบื้องหน้า (foreground) plugin จะส่ง `push-receive` โดยอัตโนมัติ และสร้างการแจ้งเตือนใน Notification Center เมื่อการแจ้งเตือนนี้ถูกเปิด มันจะส่ง `push-notification`

คุณสามารถดักฟัง event `push-receive` เพื่อตอบสนองต่อ push ทันทีในกรณีที่ได้รับในเบื้องหน้า เช่น อัปเดตเนื้อหาในหน้าปัจจุบันของแอปของคุณ ในทางกลับกัน `push-notification` จะใช้เพื่อตอบสนองต่อ event การคลิกการแจ้งเตือน ซึ่งต้องการการโต้ตอบจากผู้ใช้ เช่น เพื่อนำทางภายในแอปของคุณ, เริ่มกระบวนการใหม่ในแอปของคุณ เป็นต้น

หากต้องการเปลี่ยนลักษณะการแสดงผลของ push notification ในเบื้องหน้า คุณสามารถใช้ preference **IOS\_FOREGROUND\_ALERT\_TYPE** และ **ANDROID\_FOREGROUND\_PUSH** ได้:

**IOS\_FOREGROUND\_ALERT\_TYPE**

*   `NONE` – ไม่แสดงการแจ้งเตือนเมื่อแอปอยู่ในเบื้องหน้า (ค่าเริ่มต้น)
*   `BANNER` – แสดงการแจ้งเตือนแบบแบนเนอร์ในแอป
*   `ALERT` – การแจ้งเตือนแบบ alert

**ANDROID\_FOREGROUND\_PUSH**

*   `true` – ไม่จัดการ push ในเบื้องหน้าโดยอัตโนมัติ
*   `false` – จัดการ push ในเบื้องหน้าโดยอัตโนมัติ (ค่าเริ่มต้น)

ตัวอย่าง:

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

## เสียง push ที่กำหนดเอง

หากต้องการเปิดใช้งานเสียงการแจ้งเตือนที่กำหนดเองบน Android ให้วางไฟล์เสียงในโฟลเดอร์ **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>
```

เสียงจะสามารถเข้าถึงได้ในเมนู dropdown **Sound** ของแผง **Send Push**

บน iOS ไฟล์เสียงยังไม่ถูกเชื่อมโยงกับ Pushwoosh Application โดยอัตโนมัติ แต่สามารถใช้งานได้ด้วยตนเอง เช่น `www/res/sound_name.wav`

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

การแจ้งเตือนของ iOS รองรับเฉพาะไฟล์รูปแบบ .aiff, .wav และ .caf เท่านั้น
</Aside>

## ไอคอน push ที่กำหนดเอง

ไอคอน Push notification สามารถปรับแต่งบน Android ได้ในเครื่องโดยใช้ `pw_notification` เป็นชื่อ resource สำหรับไอคอนดังกล่าว (ดูตัวอย่าง [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)); หรือจากระยะไกลโดยอ้างอิงชื่อ resource ใดๆ ในการตั้งค่า **Icon** ในแผง **Send Push**

## ข้อมูล push ที่กำหนดเอง

ข้อมูล push ที่กำหนดเองสามารถส่งได้โดยใช้การตั้งค่า **Action** ในแผง **Send Push** หากต้องการรับและจัดการข้อมูลดังกล่าว ให้ใช้โค้ดต่อไปนี้:

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

## การควบคุมระดับ Log

เพื่อช่วยในการดีบักและการผสานรวม SDK จะพิมพ์คำขอทั้งหมดไปยังคอนโซลโดยค่าเริ่มต้น เมื่อคุณพร้อมสำหรับ build ที่จะใช้งานจริง ให้ตั้งค่าตัวแปร `LOG_LEVEL` เป็นหนึ่งในค่าต่อไปนี้:

*   `NONE` – ไม่มี log จาก SDK
*   `ERROR` – แสดงเฉพาะข้อผิดพลาดในคอนโซล
*   `WARNING` – แสดงคำเตือน
*   `INFO` – แสดงข้อความข้อมูล
*   `DEBUG` – แสดงทุกอย่าง รวมถึงข้อมูลการดีบัก (ค่าเริ่มต้น)

ตัวอย่าง:

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

## Deep linking

เราขอแนะนำให้ใช้ [https://github.com/EddyVerbruggen/Custom-URL-scheme](https://github.com/EddyVerbruggen/Custom-URL-scheme)\
มันง่ายมากที่จะตั้งค่า deep links สำหรับ Cordova และทำงานร่วมกับฟังก์ชัน deep linking ของ Pushwoosh ได้ทันที

คุณสามารถดูการติดตั้งและการใช้งานได้ใน[คู่มือนี้](/th/developer/guides/messaging-channels/deep-linking/) หรือใน [เอกสารของปลั๊กอิน](https://github.com/EddyVerbruggen/Custom-URL-scheme#2-installation)

## Rich Media JS Bridge

คุณสามารถเรียกใช้ฟังก์ชัน JS ของคุณจาก Rich Media ใน Cordova WebView ผ่าน javascript interfaces\
การเรียกจาก Rich Media ต้องมีรูปแบบดังต่อไปนี้:

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

ตัวอย่าง:

**1.** สร้าง Rich Media ด้วยการเรียก javascript:

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

**2.** เพิ่ม javascript interface ไปยังโปรเจกต์ของคุณ:

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

**3.** เพิ่มฟังก์ชัน:

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

## การใช้ปลั๊กอิน Pushwoosh กับบริการ FCM อื่นๆ

หากแอปของคุณใช้ปลั๊กอินอื่นที่ต้องพึ่งพา **firebase-messaging** อาจส่งผลให้เกิดความขัดแย้ง หรือทำให้ปลั๊กอินตัวใดตัวหนึ่งทำงานไม่เป็นไปตามที่คาดไว้ เพื่อแก้ไขความขัดแย้งนี้ คุณสามารถเพิ่มคลาส FirebaseMessagingService ที่กำหนดเองซึ่งจะส่งต่อ push notifications ระหว่างปลั๊กอินต่างๆ ปลั๊กอิน 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)