ขั้นสูง
สร้างกลุ่มการแจ้งเตือน¶
ในศูนย์การแจ้งเตือน คุณสามารถแสดงการแจ้งเตือนเป็นกลุ่มได้ การแจ้งเตือนที่เกี่ยวข้องกับเหตุการณ์เดียวกันสามารถจัดกลุ่มและแสดงแบบย่อได้ กลุ่มการแจ้งเตือนที่ย่อแล้วสามารถขยายได้อีกครั้งโดยผู้ใช้ และการแจ้งเตือนย่อย (การแจ้งเตือนแต่ละรายการในกลุ่ม) สามารถดำเนินการได้โดยแยกกัน
กลุ่มการแจ้งเตือนสามารถสร้างได้โดยการเปลี่ยนการใช้งานกลุ่มคีย์และเพิ่มค่าในกลุ่มคีย์ที่คอนโซล > การแจ้งเตือน > การส่งข้อความ v4 > ลงทะเบียนแคมเปญการส่งข้อความ > ลงทะเบียนแคมเปญ > ตัวเลือก > กลุ่มคีย์ หลังจากสร้างกลุ่มในคอนโซลแล้ว คุณสามารถใช้ การส่งข้อความท้องถิ่น และการส่งข้อความระยะไกลเมื่อส่ง โดยใช้ groupId
เพื่อใช้กลุ่มการแจ้งเตือน เมื่อใช้กลุ่ม การแจ้งเตือนจะถูกย่อให้เห็นตามกลุ่มดังภาพด้านล่าง
| |
การแจ้งเตือนสื่อ iOS¶
ด้วยการใช้เฟรมเวิร์ก UserNotifications ของ Apple คุณสามารถเพิ่มไฟล์สื่อ เช่น รูปภาพและวิดีโอลงในการแจ้งเตือน
ขั้นตอนการทำงาน¶
ฟังก์ชันนี้ทำงานโดยใช้ Notification Service Extension (เรียกสั้นๆ ว่า Extension) ของ iOS Notification Service Extension คือ App Extension ประเภทหนึ่งที่ช่วยให้สามารถแก้ไข Payload ได้ก่อนที่ Remote Notification จะถูกส่งถึงผู้ใช้ ซึ่งเป็นเทคโนโลยีที่สามารถใช้กระบวนการ (UI หรือฟังก์ชัน) ของแอปอื่นได้โดยไม่ต้องเปลี่ยนบริบท สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ เพิ่มเติม
ข้อจำกัดของขนาดไฟล์และประเภท¶
มีการจำกัดขนาดเมื่อแนบไฟล์มีเดีย และสามารถตรวจสอบรายละเอียดเพิ่มเติมได้ที่ UNNotificationAttachment
Warning
เมื่อแอปที่ใช้ AVAudioSession กำลังทำงานอยู่ เช่น Youtube หรือเกมมือถือต่างๆ (เช่น Summoners War, Starry Night, Chain Strike) หากมีการส่งเสียงที่ได้รับจากการแจ้งเตือน จะพบปัญหาหน้าจอหลัก (Springboard) รีบูต นี่เกิดขึ้นไม่ว่าจะเป็นเวอร์ชัน iOS หรือประเภทอุปกรณ์ใด ๆ และได้รับการยืนยันว่ามีการชนกันเกิดขึ้นในระบบของ Apple แยกจาก Hive
ในวันที่ 20 ธันวาคม 2018 ได้สอบถามเกี่ยวกับปัญหานี้กับ Apple และจนกว่าจะมีการจัดการให้เรียบร้อย กรุณาหยุดใช้ ฟังก์ชันการส่งเสียงผ่านการแจ้งเตือนสื่อ.
ประเภท | ชนิด | ขนาดที่จำกัด |
---|---|---|
ภาพ | JPG, JPEG, PNG, GIF | 10MB |
วิดีโอ | MP4, AVI | 50MB |
- หากเกิดการหมดเวลาเนื่องจากเครือข่ายไม่ราบรื่น ผู้ใช้จะได้รับการแจ้งเตือนทั่วไปที่ไม่มีสื่อรวมอยู่ด้วย
- ในเครือข่ายที่มีความเร็วช้ามาก อาจใช้เวลาถึง 10 นาทีในการดาวน์โหลด ดังนั้นควรพิจารณาสถานะเครือข่ายในพื้นที่นั้นและใช้สื่อที่มีขนาดเหมาะสม
การนำไปใช้และการใช้งาน¶
ต้องมีการตั้งค่าและการเพิ่มโค้ดบางอย่างเพื่อดาวน์โหลดสื่อและสร้างวัตถุ Notification ใหม่เพื่อส่งมอบให้กับผู้ใช้
???+ หมายเหตุ Notification Service Extension ไม่สามารถรวมอยู่ในไลบรารีหรือเฟรมเวิร์กเพื่อจัดจำหน่ายได้ ดังนั้นในการใช้ Extension จะต้องตั้งค่าตามคำแนะนำที่ Hive จัดเตรียมไว้
เพิ่ม Extension¶
หากต้องการใช้ฟังก์ชันนี้ คุณต้องเพิ่ม Notification Service Extension ลงในโปรเจกต์ และใช้วิธีการเพิ่มเป้าหมายใหม่ในโปรเจกต์โดยไม่ต้องเพิ่มหรือเขียนทับคลาสโดยตรง
เมื่อเพิ่มเป้าหมายในโครงการ เทมเพลตจะถูกสร้างขึ้นโดยอัตโนมัติ
1. ในการตั้งค่าโปรเจกต์ ให้คลิกที่ปุ่มเพิ่มเป้าหมาย (สี่เหลี่ยมสีแดงด้านล่าง)
2. เลือก Notification Service Extension และคลิก Next
(Xcode 8 เป็นต้นไปสามารถเพิ่ม Notification Service Extension เป็นเป้าหมายในโปรเจกต์ได้)
4. หากมีป๊อปอัปดังต่อไปนี้แสดงขึ้นมา ให้คลิกที่ Activate
Extension จะถูกเพิ่มเข้าไปในโปรเจกต์โดยอัตโนมัติ (Embedded) และจะมี Scheme สำหรับการสร้างเพิ่มขึ้น
5. ตรวจสอบว่า Extension ได้ถูกเพิ่มลงในโครงการในแท็บทั่วไป
6. โครงการมีการเพิ่มคลาสเทมเพลตชื่อ NotificationService
เพิ่ม HIVEExtensions.framework¶
สามารถดาวน์โหลดสื่อได้อย่างง่ายดายโดยใช้ HIVEExtensions.framework ที่จัดเตรียมโดย Hive
วิธีการเพิ่ม HIVEExtensions.framework มีดังนี้
หากมี Podfile ให้เปิดไฟล์และเขียนคำสั่ง target 'NotificationServiceExtension(ชื่อเป้าหมายตัวอย่าง)' do-end
-
เมื่อเปิด NotificationSample (ชื่อโปรเจกต์ตัวอย่าง).xcworkspace คุณจะเห็นว่าโปรเจกต์ Pods ถูกเพิ่มเข้ามา ตอนนี้คุณสามารถนำเข้า HIVEExtensions ใน NotificationSample และ NotificationServiceExtension ได้แล้ว
การนำ 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 รวมอยู่ด้วยหรือไม่