Lição: 189: Fetch em Segundo Plano e Notificações Remotas
Nesta aula, abordaremos duas funcionalidades importantes no desenvolvimento para iOS: Fetch em Segundo Plano e Notificações Remotas. Essas funcionalidades permitem que aplicativos realizem atualizações e busquem novos dados mesmo quando não estão ativos na tela. Isso é particularmente útil para aplicativos que requerem informações atualizadas ocasionalmente, sem a interação do usuário.
Fetch em Segundo Plano
O Fetch em Segundo Plano é um mecanismo que permite que aplicativos atualizem seu conteúdo em segundo plano em intervalos determinados pelo sistema. Isso significa que o aplicativo pode baixar novos dados enquanto não está ativo, garantindo que os usuários tenham as informações mais recentes quando retornam ao aplicativo.
Habilitando o Fetch em Segundo Plano
Para habilitar o Fetch em Segundo Plano, siga estas etapas no seu projeto Xcode:
- Abra seu projeto e selecione o alvo do seu aplicativo.
- Vá até a aba "Capacidades".
- Localize "Modos em Segundo Plano" e habilite-o alternando o botão.
- Marque a opção "Fetch em segundo plano".
Implementando o Fetch em Segundo Plano
Você precisará implementar o método performFetchWithCompletionHandler:
no AppDelegate do seu aplicativo. Aqui está um exemplo básico:
import UIKit
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Habilita o fetch em segundo plano com um intervalo mínimo
application.setMinimumBackgroundFetchInterval(UIApplication.backgroundFetchIntervalMinimum)
return true
}
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Realize sua busca de dados aqui
fetchLatestData { newDataAvailable in
if newDataAvailable {
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
}
private func fetchLatestData(completion: @escaping (Bool) -> Void) {
// Simula um processo de busca de dados
let latestDataExists = true // Substitua pela sua lógica real de busca de dados
completion(latestDataExists)
}
}
Testando o Fetch em Segundo Plano
Para testar a funcionalidade de Fetch em Segundo Plano, você pode:
- Compilar e executar seu aplicativo em um dispositivo físico (o fetch em segundo plano não funciona em simuladores).
- Colocar o aplicativo em segundo plano.
- Acionar um fetch manualmente selecionando “Debug” -> “Simular Fetch em Segundo Plano” no Xcode.
Notificações Remotas
As notificações remotas (notificações push) permitem que você envie alertas, mensagens ou atualizações de aplicativo para os usuários, mesmo quando o aplicativo não está em execução. Elas também podem acionar o Fetch em Segundo Plano quando usadas em notificações silenciosas.
Configurando Notificações Push
Para configurar notificações push:
- Habilite Notificações Push na aba de Capacidades do seu alvo de projeto.
- Utilize o Centro de Desenvolvedores da Apple para criar um ID do aplicativo e configurá-lo para Notificações Push.
- Obtenha sua chave de autenticação APNs na conta de Desenvolvedor Apple para comunicações com o servidor.
Registrando-se para Notificações Remotas
Uma vez que seu aplicativo está corretamente configurado, você deve se registrar para notificações remotas dentro do seu aplicativo. Veja como fazer:
import UserNotifications
import UIKit
class AppDelegate: UIResponder, UIApplicationDelegate {
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Solicita permissão para exibir notificações
UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .badge, .sound]) { granted, error in
if granted {
print("Permissão concedida")
DispatchQueue.main.async {
application.registerForRemoteNotifications()
}
} else {
print("Permissão negada")
}
}
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
// Converte o token do dispositivo em string para enviar ao servidor
let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
let token = tokenParts.joined()
print("Token do Dispositivo: \(token)")
// Envie o token para seu servidor
}
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print("Falha ao registrar: \(error)")
}
}
Tratando Notificações
Você pode tratar notificações recebidas implementando o seguinte método:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Trata a notificação e executa as atualizações necessárias
fetchLatestData { newDataAvailable in
if newDataAvailable {
completionHandler(.newData)
} else {
completionHandler(.noData)
}
}
}
Resumo
Nesta aula, implementamos o Fetch em Segundo Plano e as Notificações Remotas em um aplicativo iOS. O Fetch em Segundo Plano permite que nosso aplicativo verifique novas informações em segundo plano, enquanto as Notificações Remotas nos ajudam a comunicar com os usuários e mantê-los atualizados com um envolvimento mínimo. Ambas as funcionalidades são cruciais para criar uma experiência de usuário fluida e envolvente. Experimente esses conceitos em suas próprias aplicações e você estará um passo mais próximo de desenvolver aplicativos robustos para iOS!