Sobes.tech
Middle

Ի՞նչ է ծանուցումների ծառայության ընդլայնումը։

sobes.tech AI

Պատասխան AI-ից

Notification Service Extension-ը փոքր գործարկելի լրացում է, որը ներդրված է ձեր iOS հավելվածում: Այն թույլ է տալիս փոփոխել հեռակա push ծանուցման բովանդակության տեսքը՝ նախքան այն ցուցադրվել օգտվողին:

Հիմնական գործառույթներ՝

  • Բովանդակության փոփոխում: Հաղորդագրության վերնագիրը, ենթավերնագիրը, տեքստը կամ հավելվածները (նկարներ, տեսանյութեր) ավելացնելը:
  • Կոդավորած բովանդակության դեկոդավորում: Կոդավորված տվյալների դեկոդավորում, որոնք ուղարկվում են ծանուցման հետ՝ նախքան դրանք ցուցադրելը:
  • Բազմազան ծանուցումներ: Notification Content Extension-ի հետ համատեղ, թույլ է տալիս ստեղծել անհատական ինտերֆեյսներ ծանուցումների ցուցադրման համար:

Կյանքի ցիկլ՝

  1. Երբ ստացվում է հեռակա ծանուցում mutable-content: 1 բանալիով, համակարգը սկսում է Notification Service Extension-ի գործարկումը:
  2. Կատարվում է didReceive(_:withContentHandler:) մեթոդի գործարկում, որը մշակվում և փոփոխվում է ծանուցումը:
  3. Փոփոխված բովանդակությունը փոխանցվում է contentHandler-ին:
  4. Համակարգը ցուցադրում է փոփոխված ծանուցումը:

Հատկություններ՝

  • Կարճաժամկետ կատարման ժամանակ (համար 30 վայրկյան):
  • Սահմանափակ մուտք դեպի համակարգի ռեսուրսներ:
  • Չի կարող իրականացնել երկարաժամկետ ֆոնային աշխատանքներ:

Հիմնական իրականացման օրինակ՝

import UserNotifications

class NotificationService: UNNotificationServiceExtension {

    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?

    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)

        if let bestAttemptContent = bestAttemptContent {
            // Փոխեք ծանուցման բովանդակությունը այստեղ...
            bestAttemptContent.title = "\(bestAttemptContent.title ?? "Ոչ մի վերնագիր") [փոփոխված]"

            contentHandler(bestAttemptContent)
        }
    }

    override func serviceExtensionTimeWillExpire() {
        // Կոչվում է հենց այն ժամանակ, երբ համակարգը ավարտում է ընդարձակումն:
        // Օգտագործեք սա՝ ձեր "ամենալավ փորձը" տրամադրելու համար:
        if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
            contentHandler(bestAttemptContent)
        }
    }

}