ข้ามไปที่เนื้อหา

ขั้นสูง

สร้างกลุ่มการแจ้งเตือน

ในศูนย์การแจ้งเตือน คุณสามารถแสดงการแจ้งเตือนเป็นกลุ่มได้ การแจ้งเตือนที่เกี่ยวข้องกับเหตุการณ์เดียวกันสามารถจัดกลุ่มและแสดงแบบย่อได้ กลุ่มการแจ้งเตือนที่ย่อแล้วสามารถขยายได้อีกครั้งโดยผู้ใช้ และการแจ้งเตือนย่อย (การแจ้งเตือนแต่ละรายการในกลุ่ม) สามารถดำเนินการได้โดยแยกกัน

กลุ่มการแจ้งเตือนสามารถสร้างได้โดยการเปลี่ยนการใช้งานกลุ่มคีย์และเพิ่มค่าในกลุ่มคีย์ที่คอนโซล > การแจ้งเตือน > การส่งข้อความ v4 > ลงทะเบียนแคมเปญการส่งข้อความ > ลงทะเบียนแคมเปญ > ตัวเลือก > กลุ่มคีย์ หลังจากสร้างกลุ่มในคอนโซลแล้ว คุณสามารถใช้ การส่งข้อความท้องถิ่น และการส่งข้อความระยะไกลเมื่อส่ง โดยใช้ groupId เพื่อใช้กลุ่มการแจ้งเตือน เมื่อใช้กลุ่ม การแจ้งเตือนจะถูกย่อให้เห็นตามกลุ่มดังภาพด้านล่าง

แอนดรอยด์
iOS

การแจ้งเตือนสื่อ iOS

ด้วยการใช้เฟรมเวิร์ก UserNotifications ของ Apple คุณสามารถเพิ่มไฟล์สื่อ เช่น รูปภาพและวิดีโอลงในการแจ้งเตือน

JPG(รูปภาพ)
GIF(รูปภาพ)
MP4(วิดีโอ)

ขั้นตอนการทำงาน

ฟังก์ชันนี้ทำงานโดยใช้ Notification Service Extension (เรียกสั้นๆ ว่า Extension) ของ iOS Notification Service Extension คือ App Extension ประเภทหนึ่งที่ช่วยให้สามารถแก้ไข Payload ได้ก่อนที่ Remote Notification จะถูกส่งถึงผู้ใช้ ซึ่งเป็นเทคโนโลยีที่สามารถใช้กระบวนการ (UI หรือฟังก์ชัน) ของแอปอื่นได้โดยไม่ต้องเปลี่ยนบริบท สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ เพิ่มเติม

  • กระบวนการส่ง Remote Notification หลังจากการใช้ Extension

ข้อจำกัดของขนาดไฟล์และประเภท

มีการจำกัดขนาดเมื่อแนบไฟล์มีเดีย และสามารถตรวจสอบรายละเอียดเพิ่มเติมได้ที่ UNNotificationAttachment

Warning

เมื่อแอปที่ใช้ AVAudioSession กำลังทำงานอยู่ เช่น Youtube หรือเกมมือถือต่างๆ (เช่น Summoners War, Starry Night, Chain Strike) หากมีการส่งเสียงที่ได้รับจากการแจ้งเตือน จะพบปัญหาหน้าจอหลัก (Springboard) รีบูต นี่เกิดขึ้นไม่ว่าจะเป็นเวอร์ชัน iOS หรือประเภทอุปกรณ์ใด ๆ และได้รับการยืนยันว่ามีการชนกันเกิดขึ้นในระบบของ Apple แยกจาก Hive

ในวันที่ 20 ธันวาคม 2018 ได้สอบถามเกี่ยวกับปัญหานี้กับ Apple และจนกว่าจะมีการจัดการให้เรียบร้อย กรุณาหยุดใช้ ฟังก์ชันการส่งเสียงผ่านการแจ้งเตือนสื่อ.

ประเภท ชนิด ขนาดที่จำกัด
เสียง WAV, MP3, MP4(เสียง) 5MB
ภาพ JPG, JPEG, PNG, GIF 10MB
วิดีโอ MP4, AVI 50MB
  • หากเกิดการหมดเวลาเนื่องจากเครือข่ายไม่ราบรื่น ผู้ใช้จะได้รับการแจ้งเตือนทั่วไปที่ไม่มีสื่อรวมอยู่ด้วย
  • ในเครือข่ายที่มีความเร็วช้ามาก อาจใช้เวลาถึง 10 นาทีในการดาวน์โหลด ดังนั้นควรพิจารณาสถานะเครือข่ายในพื้นที่นั้นและใช้สื่อที่มีขนาดเหมาะสม

การนำไปใช้และการใช้งาน

ต้องมีการตั้งค่าและการเพิ่มโค้ดบางอย่างเพื่อดาวน์โหลดสื่อและสร้างวัตถุ Notification ใหม่เพื่อส่งมอบให้กับผู้ใช้

???+ หมายเหตุ Notification Service Extension ไม่สามารถรวมอยู่ในไลบรารีหรือเฟรมเวิร์กเพื่อจัดจำหน่ายได้ ดังนั้นในการใช้ Extension จะต้องตั้งค่าตามคำแนะนำที่ Hive จัดเตรียมไว้

เพิ่ม Extension

หากต้องการใช้ฟังก์ชันนี้ คุณต้องเพิ่ม Notification Service Extension ลงในโปรเจกต์ และใช้วิธีการเพิ่มเป้าหมายใหม่ในโปรเจกต์โดยไม่ต้องเพิ่มหรือเขียนทับคลาสโดยตรง

เมื่อเพิ่มเป้าหมายในโครงการ เทมเพลตจะถูกสร้างขึ้นโดยอัตโนมัติ

1. ในการตั้งค่าโปรเจกต์ ให้คลิกที่ปุ่มเพิ่มเป้าหมาย (สี่เหลี่ยมสีแดงด้านล่าง) noti_adv_1_plus-button

2. เลือก Notification Service Extension และคลิก Next
(Xcode 8 เป็นต้นไปสามารถเพิ่ม Notification Service Extension เป็นเป้าหมายในโปรเจกต์ได้) noti_adv_1_plus-button

3. ป้อนชื่อผลิตภัณฑ์ noti_adv_1_plus-button

4. หากมีป๊อปอัปดังต่อไปนี้แสดงขึ้นมา ให้คลิกที่ Activate
Extension จะถูกเพิ่มเข้าไปในโปรเจกต์โดยอัตโนมัติ (Embedded) และจะมี Scheme สำหรับการสร้างเพิ่มขึ้น noti_adv_1_plus-button

5. ตรวจสอบว่า Extension ได้ถูกเพิ่มลงในโครงการในแท็บทั่วไป noti_adv_1_plus-button

6. โครงการมีการเพิ่มคลาสเทมเพลตชื่อ NotificationService noti_adv_1_plus-button

เพิ่ม HIVEExtensions.framework

สามารถดาวน์โหลดสื่อได้อย่างง่ายดายโดยใช้ HIVEExtensions.framework ที่จัดเตรียมโดย Hive

วิธีการเพิ่ม HIVEExtensions.framework มีดังนี้

  1. Hive SDK รองรับ CocoaPods หากไม่มี Podfile ในเส้นทางโปรเจกต์ให้ทำการ pod init noti_adv_7-2_pod-init-terminal

หากมี Podfile ให้เปิดไฟล์และเขียนคำสั่ง target 'NotificationServiceExtension(ชื่อเป้าหมายตัวอย่าง)' do-end noti_adv_7-2_pod-init-terminal

  1. สร้าง pod syntax ตามที่เห็นในสกรีนช็อต noti_adv_7-2_pod-init-terminal

  2. ปิด Podfile และดำเนินการ pod install ที่เส้นทางของโปรเจกต์ noti_adv_7-2_pod-init-terminal

  3. เมื่อเปิด NotificationSample (ชื่อโปรเจกต์ตัวอย่าง).xcworkspace คุณจะเห็นว่าโปรเจกต์ Pods ถูกเพิ่มเข้ามา ตอนนี้คุณสามารถนำเข้า HIVEExtensions ใน NotificationSample และ NotificationServiceExtension ได้แล้ว noti_adv_7-2_pod-init-terminal

การนำ Framework ไปใช้

นำเข้า Framework ในไฟล์ NotificationService.m ตามตัวอย่าง ให้เรียกใช้เมธอดที่ HIVEExtensions.framework ให้มาในเมธอดที่มีอยู่ในเทมเพลต และ ลบโค้ดเทมเพลตเริ่มต้นที่อยู่ภายในเมธอดออก

import HIVEExtensions

func didReceiveNotificationRequest(request: UNNotificationRequest, with contentHandler: (UNNotificationContent) -> Void) {
    HIVENotificationService.didReceive(request) { content in
        guard let content else { return }
        contentHandler(content)
    }
}

func serviceExtensionTimeWillExpire() {
    HIVENotificationService.serviceExtensionTimeWillExpire()
}
#import <HIVEExtensions/HIVEExtensions.h>

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
[HIVENotificationService didReceiveNotificationRequest:request withContentHandler:contentHandler];
}

- (void)serviceExtensionTimeWillExpire {
[HIVENotificationService serviceExtensionTimeWillExpire];
}

ข้อควรระวังเมื่อใช้งาน

ความแตกต่างระหว่างเวลาส่งและเวลารับ

หลังจากที่การทำงานทั้งหมดใน Extension เสร็จสิ้นแล้ว การแจ้งเตือนจะถูกส่งไปยังผู้ใช้ ซึ่งอาจทำให้เกิดความแตกต่างระหว่างเวลาที่ส่งและเวลาที่รับ โดยในฝั่งของลูกค้าจะแสดงตามเวลาที่ส่งจากเซิร์ฟเวอร์

ตัวอย่างเช่น หากส่ง Notification เวลา 15:00 และการดาวน์โหลดเสร็จสิ้นเวลา 15:05 Notification จะถูกแสดงว่าได้รับในเวลา 15:00

ขนาดของอุปกรณ์

สื่อที่ได้รับผ่านการส่งพุชจะถูกเก็บไว้ในอุปกรณ์ของผู้ใช้ก่อนที่จะถูกแสดงผลผ่านการส่งพุช และสื่อที่ได้รับจะถูกเก็บไว้ในพื้นที่ข้อมูลแคชภายในอุปกรณ์ ทำให้ใช้พื้นที่ภายในอุปกรณ์ของผู้ใช้ พื้นที่ข้อมูลแคชจะถูกลบโดยระบบปฏิบัติการเองหากพื้นที่เก็บข้อมูลภายในของอุปกรณ์ผู้ใช้ไม่เพียงพอ

การใช้ข้อมูลมือถือของผู้ใช้

การดาวน์โหลดสื่อที่ส่งผ่านการแจ้งเตือนจะใช้ข้อมูลมือถือของผู้ใช้ และการดาวน์โหลดจะดำเนินการโดยไม่ต้องได้รับความยินยอมจากผู้ใช้ ซึ่งอาจทำให้เกิดค่าใช้จ่ายในการใช้ข้อมูลในระหว่างการดาวน์โหลด

กรณีที่รับไฟล์เสียง / วิดีโอผ่านการแจ้งเตือน ให้ตรวจสอบสถานะการเชื่อมต่อเครือข่ายของผู้ใช้ก่อนดาวน์โหลด และหากผู้ใช้ไม่ได้เชื่อมต่อกับ Wifi จะไม่ดำเนินการดาวน์โหลดและจะแสดงการแจ้งเตือนที่ไม่มีสื่อ

ในกรณีนี้ ประเภทของสื่อที่ได้รับผ่านการแจ้งเตือนจะถูกตรวจสอบจากนามสกุลที่ระบุไว้ที่ท้าย URL ของสื่อ และนามสกุลที่ระบุในหัวข้อ [ข้อจำกัดของขนาดไฟล์และประเภท] เท่านั้นที่จะถูกแสดงอย่างถูกต้อง

URL ที่ได้รับ wifi LTE / 3G
http://xxx/notimovie.mp4 แสดงสื่อหลังจากดาวน์โหลดเสร็จเสมอ มีนามสกุลที่เกี่ยวข้องกับไฟล์วิดีโอ (mp4) ดังนั้นจึงแสดงการแจ้งเตือนโดยไม่ต้องดาวน์โหลดสื่อ
http://xxx/notimovie แสดงสื่อหลังจากดาวน์โหลดเสร็จเสมอ ไม่ใช่ไฟล์เสียง/ไฟล์สื่อดังนั้นจึงแสดงการแจ้งเตือนหลังจากดาวน์โหลดเสร็จ
http://xxx/notisound.wav แสดงสื่อหลังจากดาวน์โหลดเสร็จเสมอ มีนามสกุลที่เกี่ยวข้องกับไฟล์เสียง (wav) ดังนั้นจึงแสดงการแจ้งเตือนโดยไม่ต้องดาวน์โหลดสื่อ
http://xxx/notiimage.jpg แสดงสื่อหลังจากดาวน์โหลดเสร็จเสมอ ไม่ใช่ไฟล์เสียง/ไฟล์สื่อดังนั้นจึงแสดงการแจ้งเตือนหลังจากดาวน์โหลดเสร็จ

การตั้งค่าความปลอดภัยการขนส่งแอป

นโยบายพื้นฐานของ Apple กำหนดให้การสื่อสารกับเซิร์ฟเวอร์ที่ดำเนินการโดยแอปทั้งหมดต้องอนุญาตให้ใช้ https และ URL ที่ได้รับผ่าน Notification ก็ได้รับผลกระทบจากนโยบายนี้เช่นกัน หากต้องการใช้โดเมน Http ในการสื่อสาร จะต้องตั้งค่าข้อยกเว้น App Transport Security (ATS)
แม้ว่าแอปพลิเคชันจะมีการจัดการข้อยกเว้น ATS แล้ว แต่เพื่อใช้โดเมน http ใน URL ที่ส่งผ่านการแจ้งเตือน จะต้องตั้งค่าข้อยกเว้น ATS ใน Extension ด้วย

กรณีที่สื่อไม่ถูกส่งผ่าน Unity

Hub connection error Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension" UserInfo={NSDebugDescription=connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension}

ในยูนิตี้ อาจมีกรณีที่มีการแสดงบันทึกข้อผิดพลาดเช่นนี้ และสื่อไม่ถูกส่งไป ในกรณีนี้ โปรดตรวจสอบว่า Architectures ของ Extension Target ที่สร้างขึ้นมีค่า armv7 และ arm64 รวมอยู่ด้วยหรือไม่ noti_adv_7-2_pod-init-terminal