สรุปฟีเจอร์ใหม่ของ iOS

ฟีเจอร์ใหม่ใน iOS 14

ฟีเจอร์ใหม่ใน iOS 14 มี APP Clip, Clipboard, การป้องกันความเป็นส่วนตัว และฟีเจอร์ใหม่อื่น ๆ แต่ ไม่มีฟีเจอร์ใหม่ที่เกี่ยวข้องกับการแจ้งเตือน (Notification)

ฟีเจอร์ใหม่ใน iOS 13

ฟีเจอร์ใหม่ของ iOS 13 มี Dark Mode, Swift UI และฟีเจอร์ใหม่อื่น ๆ แต่ ไม่มีฟีเจอร์ใหม่ที่เกี่ยวข้องกับการแจ้งเตือน

ฟีเจอร์ใหม่ใน iOS 12

การจัดกลุ่มการแจ้งเตือน (Grouping Push)

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

การจัดกลุ่มการแจ้งเตือนมี 2 วิธี:

  • การจัดกลุ่มอัตโนมัติ (Automatic grouping) → ระบบจะจัดกลุ่มตาม bundleId ของแอป โดยนักพัฒนาไม่ต้องทำอะไรเพิ่มเติม
  • Thread Identifier → ถ้าต้องการจัดกลุ่มละเอียดมากขึ้น ให้ใช้งาน threadIdentifier

ผู้ใช้สามารถตั้งค่าการจัดกลุ่มได้: อัตโนมัติ, ตามแอปพลิเคชัน, หรือ ปิด

threadIdentifier มีมาตั้งแต่ iOS 10 แต่เริ่มถูกใช้งานจริงใน iOS 12

@property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier __TVOS_PROHIBITED;
              
              @property (NS_NONATOMIC_IOSONLY, copy) NSString *threadIdentifier __TVOS_PROHIBITED;

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

การตั้งค่ารูปแบบสรุป (Summary Format Setting)

หลังจากที่การแจ้งเตือนถูกจัดกลุ่มแล้ว ด้านล่างจะมีข้อความสรุป (digest) เริ่มต้นจะแสดงเป็น n more notifications แต่สามารถกำหนดรูปแบบเองได้:

  1. กำหนดผ่าน UNNotificationCategory
+ (instancetype)categoryWithIdentifier:(NSString *)identifier actions:(NSArray<UNNotificationAction *> *)actions intentIdentifiers:(NSArray<NSString *> *)intentIdentifiers hiddenPreviewsBodyPlaceholder:(nullable NSString *)hiddenPreviewsBodyPlaceholder categorySummaryFormat:(nullable NSString *)categorySummaryFormat options:(UNNotificationCategoryOptions)options __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED;
              
              + (instancetype)categoryWithIdentifier:(NSString *)identifier
                               actions:(NSArray<UNNotificationAction *> *)actions
                     intentIdentifiers:(NSArray<NSString *> *)intentIdentifiers
         hiddenPreviewsBodyPlaceholder:(nullable NSString *)hiddenPreviewsBodyPlaceholder
                 categorySummaryFormat:(nullable NSString *)categorySummaryFormat
                               options:(UNNotificationCategoryOptions)options __IOS_AVAILABLE(12.0) __WATCHOS_PROHIBITED;

            
โค้ดนี้โชว์เป็นหน้าต่างลอย
  1. กำหนดผ่าน UNNotificationContent
@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *summaryArgument __IOS_AVAILABLE(12.0); @property (NS_NONATOMIC_IOSONLY, readonly, assign) NSUInteger summaryArgumentCount __IOS_AVAILABLE(12.0);
              
              @property (NS_NONATOMIC_IOSONLY, readonly, copy) NSString *summaryArgument __IOS_AVAILABLE(12.0);

@property (NS_NONATOMIC_IOSONLY, readonly, assign) NSUInteger summaryArgumentCount __IOS_AVAILABLE(12.0);

            
โค้ดนี้โชว์เป็นหน้าต่างลอย

การจัดการการแจ้งเตือน (Inform Management)

Apple เพิ่มปุ่ม Manage เมื่อผู้ใช้ปัดการแจ้งเตือนไปทางซ้าย

การอนุญาตชั่วคราว (Temporary Authorization)

การแจ้งเตือนบางประเภทจะมีปุ่มให้ผู้ใช้เลือกอนุญาตทันที

การแจ้งเตือนเร่งด่วน (Critical Alerts)

เช่น การแจ้งเตือนความปลอดภัยในบ้าน สุขภาพ หรือเหตุฉุกเฉินสาธารณะ การแจ้งเตือนประเภทนี้ต้องใช้ ใบรับรองพิเศษ และผู้ใช้ต้องตอบสนอง

ฟีเจอร์ใหม่ใน iOS 10

คำแนะนำ

iOS 10 เพิ่มฟีเจอร์หลายอย่างที่เกี่ยวข้องกับการแจ้งเตือน (ดูรายละเอียดเพิ่มเติมที่บล็อก EngageLab)

iOS 10 Service Extension

คำแนะนำ

Service Extension ถูกเพิ่มเข้ามาใน iOS 10

ฟีเจอร์นี้ทำให้สามารถปรับแต่งการแจ้งเตือนก่อนที่จะถูกส่งถึงอุปกรณ์

วิธีใช้งาน

  1. สร้าง Service Extension ใหม่

  2. ข้อควรระวัง:

    • Bundle Identifier ของ Service Extension ต้องไม่ซ้ำกับ Main Target

    • Bundle Identifier ของ Service Extension ต้องอยู่ใน namespace ของ Main Target เช่น:

      • Main Target: io.mtpush.xxx
      • Service Extension: io.mtpush.xxx.yyy
  3. หลังจากสร้างแล้ว จะมี class พร้อม method หลัก 2 ตัว:

- didReceiveNotificationRequest:withContentHandler: - serviceExtensionTimeWillExpire
              
              - didReceiveNotificationRequest:withContentHandler:
- serviceExtensionTimeWillExpire

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

iOS 9 Integration

การเปลี่ยนแปลงที่มีผลกับ SDK:

  • เพิ่มการรองรับ bitCode
  • ค่าเริ่มต้นเปลี่ยนเป็น HTTPS (ต้องตั้งค่า Info.plist หากใช้ HTTP)

วิธีแก้ปัญหา bitCode

  • ใช้ MTPush iOS SDK v1.8.7 หรือใหม่กว่า

วิธีแก้ปัญหา HTTPS

  • ตั้งค่า NSAppTransportSecurity ใน Info.plist
  • เพิ่ม NSAllowsArbitraryLoads = YES

iOS 9 UIUserNotificationActionBehaviorTextInput

เพิ่มการ ตอบกลับด้วยข้อความ (Text Input) ผ่านการแจ้งเตือน

  • ใช้ UIUserNotificationActionBehaviorTextInput
  • รองรับการรับ input ของผู้ใช้และส่งกลับไปที่แอป

ตัวอย่างโค้ด client และ server → [ตามต้นฉบับ]

iOS 8 UILocalNotification

เพิ่ม parameter ใหม่ 3 ตัว: region, regionTriggersOnce, และ category

  • ใช้ geofence trigger
  • ตั้งค่าการแจ้งเตือนครั้งเดียวหรือหลายครั้ง
  • รองรับ categories

iOS 8 UIUserNotificationSettings

เปลี่ยนการลงทะเบียน push โดยเพิ่ม category เพื่อให้ผู้ใช้ตอบสนองการแจ้งเตือนผ่านปุ่ม (Action Button)

iOS 7 Background Remote Notification

iOS 7 เพิ่มความสามารถ Background Remote Notification → แอปรันโค้ดเบื้องหลังได้เมื่อได้รับการแจ้งเตือน

  • ใช้ content-available:1 เพื่อทำ Silent Push (อัปเดต content โดยไม่รบกวนผู้ใช้)
  • มีข้อจำกัดเรื่องความถี่และเวลา runtime

👉 เอกสารนี้เป็นการสรุปฟีเจอร์การแจ้งเตือน (Push Notification) ของ iOS ตั้งแต่ iOS 7 - iOS 14 สำหรับนักพัฒนา

icon
ติดต่อฝ่ายขาย