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

ขั้นสูง

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

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

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

แอนดรอยด์
iOS
</tbody>

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

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

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

กระบวนการดำเนินงาน

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

  • กระบวนการส่งการแจ้งเตือนระยะไกลหลังจากการใช้ส่วนขยาย

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

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

Warning

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

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

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

การดำเนินการและการใช้งาน

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

Note

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

การเพิ่มส่วนขยาย

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

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

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

เลือกส่วนขยายบริการการแจ้งเตือนและคลิกถัดไป
(สามารถเพิ่มส่วนขยายบริการการแจ้งเตือนเป็นเป้าหมายในโปรเจกต์ตั้งแต่ Xcode 8) noti_adv_1_plus-button

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

4. เมื่อป๊อปอัพด้านล่างปรากฏขึ้น ให้คลิกที่เปิดใช้งาน
ส่วนขยายจะถูกเพิ่มโดยอัตโนมัติ (ฝัง) ในโปรเจกต์ปัจจุบัน และจะมีแผนสำหรับการสร้างเพิ่มเข้ามา 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

  2. อ้างอิงจากภาพหน้าจอเพื่อเขียนไวยากรณ์ pod. noti_adv_7-2_pod-init-terminal

  3. ปิดไฟล์ Podfile และรัน pod install ในไดเรกทอรีของโปรเจกต์. noti_adv_7-2_pod-init-terminal

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

การใช้กรอบงาน

นำเข้ากรอบงานในไฟล์ 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 การแจ้งเตือนจะถูกส่งไปยังผู้ใช้ ซึ่งอาจทำให้เกิดความแตกต่างระหว่างเวลาที่ส่งและเวลาที่รับ และไคลเอนต์จะแสดงเวลาอิงตามเวลาที่เซิร์ฟเวอร์ส่งไป

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

ความจุของอุปกรณ์

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

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

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

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

ในขณะนี้ ประเภทของสื่อที่ได้รับผ่านการดันจะได้รับการยืนยันโดยนามสกุลที่ระบุไว้ที่ส่วนท้ายของ 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 ที่ได้รับผ่านการแจ้งเตือนก็ได้รับผลกระทบจากนโยบายนี้เช่นกัน หากคุณต้องการสื่อสารโดยใช้โดเมน Http คุณต้องตั้งค่าการยกเว้น App Transport Security (ATS)
แม้ว่าแอปพลิเคชันจะมีการจัดการการยกเว้น ATS แต่คุณต้องตั้งค่าการยกเว้น ATS ในส่วนขยายเพื่อใช้โดเมน http สำหรับ URL ที่ส่งผ่านการแจ้งเตือนแบบพุช

เมื่อสื่อไม่ได้ถูกส่งใน 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}

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