Aulas 129: Notificações Push com SwiftUI
Notificações push são uma ferramenta poderosa para engajar usuários e comunicar informações importantes, mesmo quando o aplicativo não está rodando. Nesta aula, vamos cobrir os fundamentos da configuração de notificações push em uma aplicação SwiftUI.
Introdução
Para utilizar notificações push, você precisa configurar seu aplicativo para recebê-las, gerenciar permissões e implementar a lógica necessária para lidar com as notificações recebidas. Este tutorial irá guiá-lo pelos passos para alcançar isso.
Pré-requisitos
- Compreensão básica de SwiftUI
- Xcode instalado
- Uma conta de Desenvolvedor Apple (para configurar o aplicativo para notificações push)
Passo 1: Configurar o Aplicativo para Notificações Push
- Acesse as configurações do seu projeto no Xcode.
- Selecione a aba "Signing & Capabilities".
- Clique no botão "+" para adicionar uma capacidade e escolha "Push Notifications".
- Adicione a capacidade "Background Modes" e habilite "Remote notifications".
Passo 2: Solicitar Permissão para Notificações Push
Primeiro, precisamos solicitar permissão do usuário para enviar notificações. Isso geralmente é feito em uma view SwiftUI.
import SwiftUI
import UserNotifications
struct ContentView: View {
var body: some View {
VStack {
Text("Bem-vindo às Notificações Push!")
.padding()
Button(action: requestNotificationPermission) {
Text("Ativar Notificações")
}
}
.onAppear(perform: registerForPushNotifications)
}
func requestNotificationPermission() {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options: [.alert, .badge, .sound]) { (granted, error) in
if granted {
print("Permissão concedida")
} else {
print("Permissão negada")
}
}
}
func registerForPushNotifications() {
UNUserNotificationCenter.current().delegate = NotificationDelegate()
DispatchQueue.main.async {
UIApplication.shared.registerForRemoteNotifications()
}
}
}
class NotificationDelegate: NSObject, UNUserNotificationCenterDelegate {
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
completionHandler([.alert, .sound])
}
}
Passo 3: Lidar com Notificações Remotas
Você precisa implementar os métodos de AppDelegate
para lidar com o registro de notificações remotas e receber as notificações.
import UIKit
import SwiftUI
@main
struct YourApp: App {
@UIApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
class AppDelegate: NSObject, UIApplicationDelegate {
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
let token = tokenParts.joined()
print("Token do Dispositivo: \(token)")
// Envie este token do dispositivo para seu servidor
}
func application(_ application: UIApplication,
didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("Falha ao registrar: \(error)")
}
}
Passo 4: Enviando Notificações Push
Para testar notificações push, você normalmente precisará de um servidor ou usar serviços de terceiros como Firebase Cloud Messaging (FCM) ou OneSignal. Aqui está um exemplo simplificado de como você poderia enviar uma notificação push usando Firebase:
- Configure o Firebase em seu projeto.
- Use o seguinte trecho de código para enviar uma notificação via Firebase Messaging:
import Firebase
func sendPushNotification(to token: String) {
let notification: [String: Any] = [
"to": token,
"notification": [
"title": "Olá!",
"body": "Esta é uma notificação push de teste."
]
]
let url = "https://fcm.googleapis.com/fcm/send"
var request = URLRequest(url: URL(string: url)!)
request.httpMethod = "POST"
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("SUA_CHAVE_DE_SERVIDOR", forHTTPHeaderField: "Authorization")
do {
request.httpBody = try JSONSerialization.data(withJSONObject: notification, options: [])
} catch let error {
print("Erro: \(error.localizedDescription)")
}
let task = URLSession.shared.dataTask(with: request) { data, response, error in
if let error = error {
print("Erro ao enviar a notificação: \(error)")
return
}
print("Notificação enviada com sucesso!")
}
task.resume()
}
Conclusão
Nesta aula, cobrimos os passos básicos para configurar e implementar notificações push em uma aplicação SwiftUI. Lembre-se de que notificações push não se tratam apenas de enviar mensagens – você precisa pensar sobre seus usuários e o valor que está oferecendo com cada notificação.
Sinta-se à vontade para expandir este exemplo, adicionando conteúdo mais dinâmico, integrando-o com um backend e melhorando a experiência do usuário com base nas interações dos usuários com as notificações. Boas codificações!