ขั้นสูง
สร้างกลุ่มการแจ้งเตือน¶
คุณสามารถแสดงการแจ้งเตือนเป็นกลุ่มได้ในศูนย์การแจ้งเตือน การแจ้งเตือนที่เกี่ยวข้องกับเหตุการณ์เดียวกันสามารถจัดกลุ่มและย่อแสดงผลได้ ผู้ใช้สามารถขยายกลุ่มการแจ้งเตือนที่ย่อไว้ออกมาดูใหม่ได้ และสามารถเรียกใช้การแจ้งเตือนย่อยแต่ละรายการ (การแจ้งเตือนแต่ละรายการในกลุ่ม) แยกกันได้
คุณสามารถสร้างกลุ่มการแจ้งเตือนได้โดยไปที่ Hive Console > Notification > Push v4 > ลงทะเบียนแคมเปญพุช > ลงทะเบียนแคมเปญ > ตัวเลือก > Group Key แล้วเปลี่ยน Group Key เป็นใช้งานและเพิ่มค่าคีย์ หลังจากสร้างกลุ่มใน Hive Console แล้ว คุณสามารถใช้ groupId เพื่อกำหนดกลุ่มการแจ้งเตือนเมื่อส่งLocal Pushและ Remote Push เมื่อกำหนดกลุ่มแล้ว การแจ้งเตือนจะถูกย่อแสดงตามกลุ่มดังตัวอย่างด้านล่าง
| | |
![]() | ![]() |
การแจ้งเตือนสื่อ iOS¶
การใช้กรอบงาน UserNotifications ของ Apple ช่วยให้คุณเพิ่มไฟล์สื่อ เช่น รูปภาพและวิดีโอ ลงในการแจ้งเตือนได้
![]() | ![]() | ![]() |
ขั้นตอนการทำงาน¶
ฟีเจอร์การแจ้งเตือนสื่อทำงานโดยใช้ Notification Service Extension ของ iOS (ต่อไปนี้เรียกว่า Extension) Notification Service Extension คือ App Extension ประเภทหนึ่งที่สามารถแก้ไข Payload ได้ก่อนที่ Remote Notification จะถูกส่งถึงผู้ใช้ เป็นเทคโนโลยีที่สามารถใช้กระบวนการ (UI หรือฟังก์ชัน) ของแอปอื่นได้โดยไม่ต้องเปลี่ยน Context สำหรับรายละเอียดเพิ่มเติม โปรดดูที่ รายละเอียดเพิ่มเติม
ข้อจำกัดขนาดและประเภทไฟล์¶
มีข้อจำกัดด้านขนาดเมื่อแนบไฟล์สื่อ และสามารถดูรายละเอียดได้ที่ UNNotificationAttachment
Warning
เราพบปัญหาที่หน้าจอหลัก (Springboard) รีบูตเมื่อส่งไฟล์เสียงที่ได้รับผ่านพุช ขณะที่แอปซึ่งใช้ AVAudioSession เช่น YouTube หรือเกมมือถือต่าง ๆ (เช่น Summoners War, Dragon Blaze, Chain Strike) กำลังทำงานอยู่ ปัญหานี้เกิดขึ้นโดยไม่ขึ้นกับเวอร์ชัน iOS หรือรุ่นอุปกรณ์ และยืนยันแล้วว่าเป็นปัญหาที่เกิดขึ้นภายในระบบของ Apple ซึ่งแยกจากแพลตฟอร์ม Hive เราได้สอบถามเรื่องนี้กับ Apple แล้วเมื่อวันที่ 20 ธันวาคม 2018 และจนกว่าจะมีมาตรการรองรับ โปรด หยุดใช้งานฟังก์ชันส่งไฟล์เสียงผ่านมีเดียพุช
| หมวดหมู่ | ประเภท | ขนาดจำกัด |
|---|---|---|
| ภาพ | JPG, JPEG, PNG, GIF | 10MB |
| วิดีโอ | MP4, AVI | 50MB |
- หากเกิดการหมดเวลาเนื่องจากเครือข่ายไม่เสถียร ผู้ใช้จะได้รับ Notification ทั่วไปที่ไม่มีสื่อแนบ
- ในเครือข่ายที่ช้ามาก การดาวน์โหลดอาจใช้เวลานานสูงสุดถึง 10 นาที จึงควรพิจารณาสภาพเครือข่ายในพื้นที่นั้น ๆ และใช้สื่อที่มีขนาดเหมาะสม
การนำไปใช้งาน¶
การดาวน์โหลดสื่อและปรับโครงสร้างอ็อบเจ็กต์ Notification ใหม่เพื่อส่งถึงผู้ใช้ จำเป็นต้องมีการตั้งค่าและเพิ่มซอร์สโค้ดบางส่วน
Note
เนื่องจาก Notification Service Extension ไม่สามารถรวมไว้ในไลบรารีหรือเฟรมเวิร์กเพื่อแจกจ่ายได้ หากต้องการใช้งาน Extension คุณต้องตั้งค่าตามคู่มือที่แพลตฟอร์ม Hive จัดเตรียมไว้ให้
เพิ่ม Extension¶
หากต้องการใช้ฟีเจอร์การแจ้งเตือนสื่อ คุณต้องเพิ่ม Notification Service Extension ลงในโปรเจกต์ โดยใช้วิธีเพิ่ม target ใหม่ลงในโปรเจกต์ แทนที่จะเพิ่มหรือ override คลาสโดยตรง
เมื่อเพิ่ม target ลงในโปรเจกต์แล้ว Template จะถูกสร้างขึ้นโดยอัตโนมัติ
เพิ่ม target ในโปรเจกต์ Unity¶
ใน Unity Editor, Hive SDK จะดำเนินการต่าง ๆ เช่น การเพิ่ม target และการเขียน Info.plist โดยอัตโนมัติด้วยฟังก์ชัน PostProcess เพียงตรวจสอบว่าจะใช้มีเดียพุชหรือไม่ ไม่ต้องดำเนินการอื่นเพิ่มเติม
- จากแถบเมนูด้านบนของ Unity Editor ให้เข้าเมนู Hive > Build project post process settings > iOS
- เปิดใช้งาน Push Media Contents
เพิ่ม target ในสภาพแวดล้อมอื่นที่ไม่ใช่ Unity¶
ก่อนเริ่มต้น โปรดตรวจสอบรายการต่อไปนี้ก่อน
- หากต้องการใช้ push extension target โปรดตรวจสอบว่า provisioning profile มีสิทธิ์ (entitlement)
aps-environmentรวมอยู่หรือไม่ หากจำเป็นให้ออก provisioning profile และใบรับรองใหม่ - หากเพิ่ม target โดยตรงผ่าน Xcode GUI ค่าเริ่มต้นของเวอร์ชัน target ขั้นต่ำที่รองรับของ extension target อาจถูกตั้งเป็น OS ล่าสุด โปรดตรวจสอบว่าค่านี้ไม่เกินเวอร์ชัน target ขั้นต่ำที่รองรับของ main game app target
วิธีเพิ่ม target มีดังนี้
- คลิกปุ่ม เพิ่ม target ในการตั้งค่าโปรเจกต์ Xcode (ปุ่ม + ด้านล่างซ้าย)

- เลือก Notification Service Extension แล้วคลิก Next
(ตั้งแต่ Xcode 8 เป็นต้นไป สามารถเพิ่ม Notification Service Extension เป็น target ในโปรเจกต์ได้)
- กรอก Product Name

- เมื่อป๊อปอัปตามด้านล่างปรากฏขึ้น ให้คลิก Activate
Extension จะถูกฝัง (Embedded) ในโปรเจกต์ปัจจุบันโดยอัตโนมัติ และมีการเพิ่ม Scheme สำหรับการ build
- ในแท็บ General ให้ตรวจสอบว่ามีการเพิ่ม Extension ในโปรเจกต์แล้ว

- ตรวจสอบว่ามีการเพิ่มคลาสเทมเพลต NotificationService ลงในโปรเจกต์แล้ว

เพิ่ม HIVEExtensions.framework¶
คุณสามารถดาวน์โหลดสื่อได้อย่างง่ายดายโดยใช้ HIVEExtensions.framework ที่จัดเตรียมโดยแพลตฟอร์ม Hive
วิธีการเพิ่ม HIVEExtensions.framework มีดังนี้
-
Hive SDK รองรับ CocoaPods หากไม่มี Podfile อยู่ในพาธของโปรเจกต์ ให้รัน
pod init
หากมี Podfile อยู่แล้ว ให้เปิดไฟล์และเขียนคำสั่ง target 'NotificationServiceExtension(ตัวอย่างชื่อ target)' do-end

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

ใช้งาน Framework¶
นำเข้า Framework ในไฟล์ NotificationService.swift ตามตัวอย่าง ให้เรียกเมธอดที่จัดเตรียมโดย 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];
}
ข้อควรระวังในการใช้งาน¶
ความแตกต่างระหว่างเวลาที่ส่งและเวลาที่ได้รับ¶
เนื่องจาก Notification จะถูกส่งถึงผู้ใช้หลังจากงานทั้งหมดใน Extension เสร็จสิ้นแล้ว จึงอาจเกิดความแตกต่างระหว่างเวลาที่ส่งและเวลาที่ได้รับ โดยฝั่งไคลเอนต์จะแสดงเวลาตามเวลาที่เซิร์ฟเวอร์ส่งออกไป
ตัวอย่างเช่น หากส่ง Notification เวลา 15:00 น. และดาวน์โหลดเสร็จสิ้นเวลา 15:05 น. Notification จะแสดงว่ามาถึงเวลา 15:00 น.
ความจุของอุปกรณ์¶
สื่อที่ได้รับผ่านพุชจะถูกบันทึกไว้ภายในเครื่องของผู้ใช้ก่อน แล้วจึงแสดงผ่านพุช และสื่อที่ได้รับจะถูกเก็บไว้ในพื้นที่ข้อมูล Cache ภายในเครื่อง ซึ่งจะใช้พื้นที่ความจุภายในเครื่องของผู้ใช้ พื้นที่ข้อมูล Cache จะถูกลบโดย OS โดยอัตโนมัติ หากพื้นที่จัดเก็บภายในอุปกรณ์ของผู้ใช้ไม่เพียงพอ
การใช้งานดาต้ามือถือของผู้ใช้¶
การดาวน์โหลดสื่อที่ได้รับผ่านพุชจะใช้ดาต้ามือถือของผู้ใช้ และดำเนินการดาวน์โหลดโดยไม่ต้องขอความยินยอมจากผู้ใช้ก่อน จึงอาจเกิดค่าใช้จ่ายด้านดาต้าเมื่อดาวน์โหลด
ในกรณีที่ได้รับไฟล์เสียง / วิดีโอผ่านพุช ให้ตรวจสอบสถานะการเชื่อมต่อเครือข่ายของผู้ใช้ก่อนดาวน์โหลด และหากผู้ใช้ไม่ได้เชื่อมต่อ Wi-Fi ให้ไม่ดำเนินการดาวน์โหลดและแสดงพุชที่ไม่มีสื่อแนบแทน
ในกรณีนี้ ประเภทของสื่อที่ได้รับผ่านพุชจะถูกตรวจสอบจากนามสกุลไฟล์ที่ระบุไว้ท้าย URL ของสื่อ และจะแสดงผลได้อย่างถูกต้องเฉพาะนามสกุลที่ระบุไว้ในหัวข้อ [ข้อจำกัดขนาดและประเภทไฟล์] เท่านั้น
| URL ที่ได้รับ | wifi | LTE / 3G |
| http://xxx/notimovie.mp4 | ดาวน์โหลดแล้วแสดงสื่อในพุชเสมอ | เนื่องจากมีนามสกุลที่ตรงกับไฟล์วิดีโอ (mp4) จึงแสดงพุชโดยไม่ต้องดาวน์โหลดสื่อ |
| http://xxx/notimovie | ดาวน์โหลดแล้วแสดงสื่อในพุชเสมอ | เนื่องจากไม่ใช่ไฟล์เสียง/สื่อ จึงดาวน์โหลดก่อนแล้วจึงแสดงสื่อในพุช |
| http://xxx/notisound.wav | ดาวน์โหลดแล้วแสดงสื่อในพุชเสมอ | เนื่องจากมีนามสกุลที่ตรงกับไฟล์เสียง (wav) จึงแสดงพุชโดยไม่ต้องดาวน์โหลดสื่อ |
| http://xxx/notiimage.jpg | ดาวน์โหลดแล้วแสดงสื่อในพุชเสมอ | เนื่องจากไม่ใช่ไฟล์เสียง/สื่อ จึงดาวน์โหลดก่อนแล้วจึงแสดงสื่อในพุช |
การตั้งค่า App Transport Security¶
นโยบายเริ่มต้นของ Apple อนุญาตให้การสื่อสารกับเซิร์ฟเวอร์ของทุกแอปใช้ https เท่านั้น และ URL ที่ได้รับผ่าน Notification ก็ได้รับผลจากนโยบายนี้เช่นกัน หากต้องการสื่อสารโดยใช้โดเมน Http คุณต้องตั้งค่ายกเว้น App Transport Security (ต่อไปนี้เรียกว่า ATS)
ในกรณีนี้ แม้ Application จะตั้งค่ายกเว้น 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}
ใน Unity อาจมีกรณีที่สื่อไม่ถูกส่งพร้อมกับข้อความ error log ดังตัวอย่างข้างต้น ในกรณีนี้ ให้ตรวจสอบว่าค่า armv7 และ arm64 รวมอยู่ใน Architectures ของ Extension Target ที่สร้างขึ้นหรือไม่ 
ปุ่มการกระทำแบบพุช¶
ปุ่มการกระทำแบบพุชคือปุ่มระบบที่ปรากฏขึ้นเมื่อกดค้างที่การแจ้งเตือนแบบพุชดังตัวอย่างด้านล่าง การแสดงปุ่มเพิ่มเติมเหล่านี้ในการแจ้งเตือนแบบพุชช่วยกระตุ้นให้ผู้ใช้มีปฏิกิริยาตอบสนองได้
Hive SDK ช่วยให้คุณสามารถเลือกใช้งานปุ่มการกระทำแบบพุชได้ด้วยการตั้งค่าที่ง่ายดาย
| Android | iOS |
|---|---|
![]() | ![]() |
Note
Hive SDK Android ไม่จำเป็นต้องตั้งค่าเพิ่มเติมสำหรับปุ่มการกระทำแบบพุช และสามารถใช้งานฟีเจอร์ปุ่มการกระทำได้โดยดูรายละเอียดที่ คู่มือ Single Push API - ActionPayload Hive SDK iOS สามารถ implement ปุ่มการกระทำแบบพุชได้โดยอ้างอิงจาก 2 วิธี คือ 'วิธีการใช้งานพื้นฐาน' และ 'วิธีการใช้งานขั้นสูง'
Warning
หากใช้ปุ่มการกระทำแบบพุชร่วมกับ iOS Media Notification ด้านบนใน Hive SDK iOS ฟีเจอร์ iOS Media Notification อาจทำงานไม่สมบูรณ์ เมื่อส่งพุช ให้ใช้เพียงหนึ่งฟีเจอร์ในแต่ละครั้ง ไม่ว่าจะเป็น 'media URL' หรือ 'action push' หากใช้ทั้งสองฟีเจอร์พร้อมกัน สื่อจะแสดงเป็นเพียงภาพขนาดย่อตอนได้รับพุชเท่านั้น และจะไม่แสดงตัวแสดงผลแบบขยายเมื่อกดค้าง
Warning
หากต้องการใช้ iOS push action ใน Unreal Engine คุณต้อง build แอป iOS โดยใช้ Modern Build ที่มีให้ตั้งแต่ Unreal Engine 5.3.2 เป็นต้นไป (ทดสอบแล้วในสภาพแวดล้อม Unreal Engine 5.6.0 / Xcode 16.1 / macOS 15.5)
วิธีการใช้งานพื้นฐาน (iOS)¶
Hive SDK มีชุดปุ่มการกระทำแบบพุชที่ตั้งค่าไว้ล่วงหน้าโดยอิงจากรูปแบบคำถาม-คำตอบที่ใช้บ่อย ชุดปุ่มที่ใช้งานบ่อย เช่น 'ตกลง', 'ปฏิเสธ' ถูกฝังไว้ให้แล้วจึงนำไปใช้ได้อย่างรวดเร็ว และยังมีโครงสร้างที่ยืดหยุ่นให้คุณสามารถกำหนดและขยายชุดปุ่มการกระทำแบบกำหนดเองได้ตามต้องการ รายการชุดปุ่มการกระทำแบบพุชที่ให้มาเป็นค่าเริ่มต้นมีดังนี้
- ตกลง
- ปิด
- ตกลง, ปิด
- ดำเนินการ, ยกเลิก
- ยอมรับทั้งหมด, ปิด
- รับเลย, ปิด
- ซื้อ, ปฏิเสธ
- ขาย, ปฏิเสธ
- ยอมรับ, ปฏิเสธ, พักไว้
| หมวดหมู่(รหัสหมวดหมู่) | ชื่อปุ่ม(รหัสการกระทำ) |
|---|---|
| ยืนยัน(INFO_CATEGORY) | ตกลง(CONFIRM_ID) |
| ปิดการใช้งาน(CLOSE_CATEGORY) | ปิด(CLOSE_ID) |
| ยืนยันตัวเลือก(CONFIRM_CATEGORY) | ตกลง(CONFIRM_ID), ปิด(CLOSE_ID) |
| ยืนยันการดำเนินการ(EXECUTE_CATEGORY) | ดำเนินการ(EXECUTE_ID), ยกเลิก(CANCEL_ID) |
| ดำเนินการทั้งหมด(ACCEPT_ALL_CATEGORY) | ยอมรับทั้งหมด(ACCEPT_ALL_ID), ปิด(CLOSE_ID) |
| รับทันที(ACCEPT_NOW_CATEGORY) | รับเลย(ACCEPT_NOW_ID), ปิด(CLOSE_ID) |
| ตัดสินใจซื้อ(PURCHASE_CATEGORY) | ซื้อ(PURCHASE_ID), ปฏิเสธ(DECLINE_ID) |
| คำขอขาย(SALE_CATEGORY) | ขาย(SALE_ID), ปฏิเสธ(DECLINE_ID) |
| การตัดสินใจ(ACCEPT_DECISION_CATEGORY) | ยอมรับ(ACCEPT_ID), ปฏิเสธ(REJECT_ID), พักไว้(HOLDING_ID) |
การใช้งานชุดปุ่มการกระทำแบบพุชข้างต้นไม่จำเป็นต้องเขียนโค้ดเพิ่มเติม แต่ต้องเพิ่ม target Notification Content Extension ลงในโปรเจกต์ โปรดดู 'คู่มือการใช้งานชุดปุ่มการกระทำแบบพุช' ตามสภาพแวดล้อมการพัฒนาด้านล่าง เพื่อเพิ่ม target และเปิดใช้งานปุ่มการกระทำแบบพุช
การใช้ชุดปุ่มการกระทำแบบพุชใน Unity¶
ใน Unity Editor ฟังก์ชัน PostProcess ของ Hive SDK จะดำเนินการต่าง ๆ เช่น การเพิ่ม target และการเขียน Info.plist โดยอัตโนมัติ เพียงตรวจสอบว่าจะใช้ปุ่มการกระทำแบบพุชหรือไม่ ไม่ต้องดำเนินการอื่นเพิ่มเติม
- จากแถบเมนูด้านบนของ Unity Editor ให้เข้าเมนู Hive > Build project post process settings > iOS
- เปิดใช้งาน Push Action Buttons
รายการที่ปรากฏเมื่อเปิดใช้งานปุ่มคือพรีวิวของรายการฟิลด์ categories ในไฟล์ hive_push_actions.json ที่ใช้ใน วิธีการใช้งานขั้นสูง ด้านล่าง หากดำเนินการแบบพื้นฐานโดยไม่มีไฟล์ดังกล่าว จะแสดงเป็น 'none'
การใช้ชุดปุ่มการกระทำแบบพุชในสภาพแวดล้อมอื่นที่ไม่ใช่ Unity¶
ก่อนเริ่มต้น โปรดตรวจสอบรายการต่อไปนี้ก่อน
- หากต้องการใช้ push extension target โปรดตรวจสอบว่า provisioning profile มีสิทธิ์ (entitlement)
aps-environmentรวมอยู่หรือไม่ หากจำเป็นให้ออก provisioning profile และใบรับรองใหม่ - หากเพิ่ม target โดยตรงผ่าน Xcode GUI ค่าเริ่มต้นของเวอร์ชัน target ขั้นต่ำที่รองรับของ extension target อาจถูกตั้งเป็น OS ล่าสุด โปรดตรวจสอบว่าค่านี้ไม่เกินเวอร์ชัน target ขั้นต่ำที่รองรับของ main game app target
ถัดไป หลังจากสร้างโปรเจกต์ Xcode (.xcodeproj) แล้ว ให้ดำเนินการตามลำดับด้านล่าง
ขั้นตอนที่ 1 เพิ่ม push extension target¶
สร้าง extension target ใหม่และเชื่อมต่อกับ app target ตามลำดับต่อไปนี้
- ในการตั้งค่าโปรเจกต์ Xcode ให้กดปุ่ม + ด้านล่างซ้ายเพื่อเพิ่ม target

- เลือก Notification Content Extension แล้วคลิก Next

- ป้อน Product Name และกำหนด main game app target ให้กับ Embed in Application

- เมื่อป๊อปอัปด้านล่างปรากฏขึ้น ให้คลิก Activate Extension จะถูกฝัง (Embedded) ในโปรเจกต์ปัจจุบันโดยอัตโนมัติ และมีการเพิ่ม Scheme สำหรับการ build

- ใน General > Frameworks, Libraries, and Embedded Content ของ main game app target ให้ตรวจสอบว่า Product Name ที่ป้อนไว้ด้านบนถูกเพิ่มแล้ว

ขั้นตอนที่ 2 ปรับแต่งไฟล์ที่สร้างอัตโนมัติ¶
สำหรับไฟล์ 3 ไฟล์ต่อไปนี้ที่ถูกสร้างอัตโนมัติในกลุ่ม Product Name ให้ดำเนินการตามด้านล่างกับแต่ละไฟล์
ลบ MainInterface.storyboard¶
ลบ Product Name/MainInterface.storyboard
แก้ไข NotificationViewController.swift¶
แก้ไข Product Name/NotificationViewController.swift
ให้แก้ไขเนื้อหาของไฟล์คลาสเทมเพลตที่สร้างอัตโนมัติดังภาพด้านบนตามด้านล่าง คุณสามารถคัดลอกโค้ดบล็อกด้านล่างไปใช้ หรือเพิ่มบรรทัดที่เน้นสีส้มในภาพ
import UIKit
import HIVEExtensions
import UserNotifications
import UserNotificationsUI
class NotificationViewController: UIViewController, UNNotificationContentExtension {
func didReceive(_ notification: UNNotification) {
HiveNotificationContent.didReceive(notification)
}
func didReceive(_ response: UNNotificationResponse) async -> UNNotificationContentExtensionResponseOption {
await HiveNotificationContent.didReceive(response)
}
}
แก้ไข Info.plist¶
แก้ไข Product Name/Info.plist
ตามลำดับต่อไปนี้ ให้วางโค้ดด้านล่างไว้ใต้แถว Information Property List ระดับบนสุด (root dictionary, แถวที่เน้นสีส้มในภาพ)
- ขยายแถว
Information Property Listระดับบนสุด แล้วลบรายการย่อยNSExtension - พับแถวเดิมแล้วคลิกขวา จากนั้นเลือก Paste (วาง)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSExtension</key>
<dict>
<key>NSExtensionAttributes</key>
<dict>
<key>UNNotificationExtensionInitialContentSizeRatio</key>
<integer>0</integer>
<key>UNNotificationExtensionCategory</key>
<array>
<string>INFO_CATEGORY</string>
<string>CLOSE_CATEGORY</string>
<string>CONFIRM_CATEGORY</string>
<string>EXECUTE_CATEGORY</string>
<string>ACCEPT_ALL_CATEGORY</string>
<string>ACCEPT_NOW_CATEGORY</string>
<string>PURCHASE_CATEGORY</string>
<string>SALE_CATEGORY</string>
<string>ACCEPT_DECISION_CATEGORY</string>
</array>
</dict>
<key>NSExtensionPrincipalClass</key>
<string>$(PRODUCT_NAME).NotificationViewController</string>
<key>NSExtensionPointIdentifier</key>
<string>com.apple.usernotifications.content-extension</string>
</dict>
</dict>
</plist>
ขั้นตอนที่ 3 ระบุ custom category¶
ค่า UNNotificationExtensionCategory ใน Info.plist ที่แก้ไขในขั้นตอนด้านบนคือหมวดหมู่ที่ Hive SDK เตรียมไว้ให้เป็นค่าเริ่มต้นตามที่แนะนำไปก่อนหน้านี้ หากมี custom category ที่เขียนไว้ใน hive_push_actions.json ตาม วิธีการใช้งานขั้นสูง ด้านล่าง โปรดเพิ่มเข้าไปเป็นองค์ประกอบของอาร์เรย์ด้วย
ขั้นตอนที่ 4 เพิ่ม dependency¶
เชื่อมต่อ dependency ที่จำเป็นกับ push extension target หากได้เพิ่มไว้แล้วทันทีหลังสร้างโปรเจกต์ผ่าน CocoaPods เป็นต้น สามารถข้ามขั้นตอนนี้ได้
- เพิ่มโดยใช้เครื่องมือจัดการ dependency
- เพิ่มด้วยตนเอง
- เพิ่มด้วยตนเองบน Xcode GUI หรือเชื่อมต่อโดยเขียนสคริปต์ build pipeline
- สำหรับ Unreal Engine ไม่รองรับเครื่องมือจัดการ dependency แยกต่างหาก จึงให้ดำเนินการด้วยวิธีนี้
- เพิ่ม
HIVEExtensions.frameworkใน General > Frameworks and Libraries ของการตั้งค่า extension target
เมื่อคุณใช้ชุดปุ่มการกระทำแบบพุชในสภาพแวดล้อมการพัฒนาของคุณแล้ว ให้ระบุ action พร้อมกันเมื่อส่งพุชจาก Hive Console ด้วย
เมื่อระบุ action ให้ใช้หมวดหมู่และรหัสประจำตัว (identifier) ของแต่ละ action จากรายการชุดปุ่มการกระทำแบบพุชด้านบน (แบบละเอียด)
สำหรับรายละเอียดเกี่ยวกับการตั้งค่าคอนโซล โปรดดูคู่มือคอนโซล
วิธีการใช้งานขั้นสูง (iOS)¶
กำหนดค่าที่สอดคล้องกับ actions และ categories ในไฟล์ hive_push_actions.json หลังจากกำหนดแล้ว ให้รวมไฟล์ hive_push_actions.json ไว้ใน target ของคุณแล้ว build แอป เมื่อแอปทำงาน Hive SDK จะวิเคราะห์เนื้อหาไฟล์โดยอัตโนมัติและลงทะเบียน action และ category ไว้ในศูนย์การแจ้งเตือน
ตัวอย่างเนื้อหาของไฟล์ hive_push_actions.json แสดงดังด้านล่างนี้
hive_push_actions.json ตัวอย่าง
{
"actions": {
"ACCEPT_ALL_ID": {
"ar": "قبول الكل",
"de": "Alle akzeptieren",
"en": "Accept All",
"es": "Aceptar todo",
"fr": "Tout accepter",
"id": "Terima Semua",
"it": "Accetta tutto",
"ja": "一括承諾",
"ko": "일괄 수락",
"pt": "Aceitar tudo",
"ru": "Принять все",
"th": "ยอมรับทั้งหมด",
"tr": "Hepsini Kabul Et",
"vi": "Chấp Nhận Tất Cả",
"zh-Hans": "批量接受",
"zh-Hant": "一鍵接受",
"tl": "Tanggapin ang Lahat"
},
"ACCEPT_ID": {
"ar": "قبول",
"de": "Akzeptieren",
"en": "Accept",
"es": "Aceptar",
"fr": "Accepter",
"id": "Terima",
"it": "Accetta",
"ja": "承諾",
"ko": "수락",
"pt": "Aceitar",
"ru": "Принять",
"th": "ยอมรับ",
"tr": "İzin Ver",
"vi": "Chấp Nhận",
"zh-Hans": "接受",
"zh-Hant": "接受",
"tl": "Tanggapin"
},
"ACCEPT_NOW_ID": {
"ar": "استلام الآن",
"de": "Jetzt erhalten",
"en": "Claim Now",
"es": "Recibir ahora",
"fr": "Recevoir maintenant",
"id": "Klaim Sekarang",
"it": "Prendi ora",
"ja": "今すぐ受け取る",
"ko": "지금 받기",
"pt": "Obter agora",
"ru": "Получить сейчас",
"th": "รับเลย",
"tr": "Şimdi Al",
"vi": "Nhận Ngay",
"zh-Hans": "立即领取",
"zh-Hant": "立即領取",
"tl": "Mag-claim Ngayon"
},
"CANCEL_ID": {
"ar": "تنفيذ",
"de": "Abbrechen",
"en": "Cancel",
"es": "Cancelar",
"fr": "Annuler",
"id": "Batal",
"it": "Annulla",
"ja": "キャンセル",
"ko": "취소",
"pt": "Cancelar",
"ru": "Отменить",
"th": "ยกเลิก",
"tr": "İptal",
"vi": "Hủy",
"zh-Hans": "取消",
"zh-Hant": "取消",
"tl": "Kanselahin"
},
"CLOSE_ID": {
"ar": "إغلاق",
"de": "Schließen",
"en": "Close",
"es": "Cerrar",
"fr": "Fermer",
"id": "Tutup",
"it": "Chiudi",
"ja": "閉じる",
"ko": "닫기",
"pt": "Fechar",
"ru": "Закрыть",
"th": "ปิด",
"tr": "Kapat",
"vi": "Đóng",
"zh-Hans": "关闭",
"zh-Hant": "關閉",
"tl": "Isara"
},
"CONFIRM_ID": {
"ar": "موافق",
"de": "OK",
"en": "OK",
"es": "Confirmar",
"fr": "Voir",
"id": "OK",
"it": "Ok",
"ja": "OK",
"ko": "확인",
"pt": "Confirmar",
"ru": "OK",
"th": "ตกลง",
"tr": "TAMAM",
"vi": "OK",
"zh-Hans": "确认",
"zh-Hant": "確認",
"tl": "Sige"
},
"DECLINE_ID": {
"ar": "رفض",
"de": "Ablehnen",
"en": "Decline",
"es": "Rechazar",
"fr": "Refuser",
"id": "Tolak",
"it": "Rifiuta",
"ja": "拒否する",
"ko": "거절하기",
"pt": "Recusar",
"ru": "Отклонить",
"th": "ปฏิเสธ",
"tr": "Reddet",
"vi": "Từ Chối",
"zh-Hans": "拒绝",
"zh-Hant": "拒絕",
"tl": "Tanggihan"
},
"EXECUTE_ID": {
"ar": "إلغاء",
"de": "Ausführen",
"en": "Run",
"es": "Ejecutar",
"fr": "Exécuter",
"id": "Jalankan",
"it": "Avvia",
"ja": "実行",
"ko": "실행",
"pt": "Executar",
"ru": "Запустить",
"th": "ดำเนินการ",
"tr": "Devam Et",
"vi": "Kích Hoạt",
"zh-Hans": "执行",
"zh-Hant": "執行",
"tl": "Tumakbo"
},
"HOLDING_ID": {
"ar": "الاختيار لاحقًا",
"de": "Halten",
"en": "Hold",
"es": "Pendiente",
"fr": "En attente",
"id": "Tahan",
"it": "Rimanda",
"ja": "保留",
"ko": "보류",
"pt": "Manter",
"ru": "Отложить",
"th": "พักไว้",
"tr": "Tut",
"vi": "Tạm Hoãn",
"zh-Hans": "暂缓",
"zh-Hant": "保留",
"tl": "Hawakan"
},
"PURCHASE_ID": {
"ar": "شراء",
"de": "Kaufen",
"en": "Purchase",
"es": "Comprar",
"fr": "Acheter",
"id": "Beli",
"it": "Compra",
"ja": "購入する",
"ko": "구매하기",
"pt": "Comprar",
"ru": "Купить",
"th": "ซื้อ",
"tr": "Satın Al",
"vi": "Mua",
"zh-Hans": "购买",
"zh-Hant": "購買",
"tl": "Pagbili"
},
"REJECT_ID": {
"ar": " رفض",
"de": "Ablehnen",
"en": "Decline",
"es": "Rechazar",
"fr": "Refuser",
"id": "Tolak",
"it": "Rifiuta",
"ja": "拒否",
"ko": "거절",
"pt": "Recusar",
"ru": "Отклонить",
"th": "ปฏิเสธ",
"tr": "Reddet",
"vi": "Từ Chối",
"zh-Hans": "拒绝",
"zh-Hant": "拒絕",
"tl": "Tanggihan"
},
"SALE_ID": {
"ar": "بيع",
"de": "Verkaufen",
"en": "Sell",
"es": "Vender",
"fr": "Vendre",
"id": "Jual",
"it": "Vendi",
"ja": "販売する",
"ko": "판매하기",
"pt": "Vender",
"ru": "Продать",
"th": "ขาย",
"tr": "Sat",
"vi": "Bán",
"zh-Hans": "出售",
"zh-Hant": "販售",
"tl": "Ibenta"
}
},
"categories": {
"INFO_CATEGORY": [
"CONFIRM_ID"
],
"CLOSE_CATEGORY": [
"CLOSE_ID"
],
"CONFIRM_CATEGORY": [
"CONFIRM_ID",
"CLOSE_ID"
],
"EXECUTE_CATEGORY": [
"EXECUTE_ID",
"CANCEL_ID"
],
"ACCEPT_ALL_CATEGORY": [
"ACCEPT_ALL_ID",
"CLOSE_ID"
],
"ACCEPT_NOW_CATEGORY": [
"ACCEPT_NOW_ID",
"CLOSE_ID"
],
"PURCHASE_CATEGORY": [
"PURCHASE_ID",
"DECLINE_ID"
],
"SALE_CATEGORY": [
"SALE_ID",
"DECLINE_ID"
]
}
}
ข้อควรระวังในการเขียนเนื้อหามีดังนี้
- จำนวนปุ่มสูงสุดต่อหนึ่งหมวดหมู่ (ชุด) คือ 3 ปุ่ม
- ตัวอย่างข้างต้นเป็นการกำหนดชุดปุ่มที่ให้มาเป็นค่าเริ่มต้น สำหรับปุ่มการกระทำแบบกำหนดเอง หากใช้ identifier ซ้ำกันจะไม่สามารถระบุได้ จึงควรใช้สตริงที่ไม่ซ้ำกันและสามารถระบุได้อย่างชัดเจน
- ภาษาที่แสดงจะเป็นไปตาม 'ภาษาของเกม' และคุณสามารถป้อนได้สูงสุด 17 ภาษาที่ Hive SDK รองรับ ภาษาอังกฤษ (
"en") ใช้เป็นค่าเริ่มต้นสำหรับสตริงหลายภาษา จึงต้องเพิ่มไว้เสมอ
Note
รองรับ Unity PostProcess หากคุณเพิ่มไฟล์ hive_push_actions.json ไว้ในพาธเดียวกับที่มีไฟล์ hive_config.xml อยู่ในโปรเจกต์ Unity ของคุณ ไฟล์ hive_push_actions.json จะถูกเพิ่มลงใน app target โดยอัตโนมัติเมื่อ build โปรเจกต์ Xcode
Warning
หลังจากเขียนเนื้อหาแล้ว ให้เพิ่ม key ของฟิลด์ "categories" ในเนื้อหาไปยัง UNNotificationExtensionCategory ใน Info.plist ของ Notification Content Extension
ในสภาพแวดล้อม Unity จะวิเคราะห์เนื้อหาไฟล์และเพิ่มให้โดยอัตโนมัติ















