Middle
O que é uma extensão do serviço de notificações?
sobes.tech IA
Resposta da IA
A extensão do serviço de notificações (Notification Service Extension) é um pequeno complemento executável integrado na sua aplicação iOS. Permite modificar a aparência do conteúdo de uma notificação push remota antes de a exibir ao utilizador.
Funções principais:
- Modificação de conteúdo: Alterar o título, subtítulo, texto ou adicionar anexos (imagens, vídeos) à notificação.
- Decifrar conteúdo encriptado: Decifrar dados encriptados enviados juntamente com a notificação antes de os mostrar ao utilizador.
- Notificações enriquecidas: Em combinação com a extensão de conteúdo de notificações (Notification Content Extension), permite criar interfaces personalizadas para a exibição de notificações.
Ciclo de vida:
- Ao receber uma notificação remota com a chave
mutable-content: 1, o sistema inicia a execução da extensão do serviço de notificações. - Implementa-se o método
didReceive(_:withContentHandler:), no qual ocorre o processamento e modificação da notificação. - O conteúdo alterado é passado para o manipulador de finalização
contentHandler. - O sistema exibe a notificação modificada.
Restrições:
- Execução de curta duração (geralmente cerca de 30 segundos).
- Acesso limitado a recursos do sistema.
- Não pode realizar tarefas prolongadas em segundo plano.
Exemplo de implementação básica:
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 {
// Modificar o conteúdo da notificação aqui...
bestAttemptContent.title = "\(bestAttemptContent.title ?? "Sem Título") [modificado]"
contentHandler(bestAttemptContent)
}
}
override func serviceExtensionTimeWillExpire() {
// Chamado pouco antes de a extensão ser terminada pelo sistema.
// Use isto como uma oportunidade para entregar a sua "melhor tentativa" de conteúdo modificado,
// caso contrário, será entregue a carga útil original.
if let contentHandler = contentHandler, let bestAttemptContent = bestAttemptContent {
contentHandler(bestAttemptContent)
}
}
}