SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
30.11.2024

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:

  1. Abra seu projeto e selecione o alvo do seu aplicativo.
  2. Vá até a aba "Capacidades".
  3. Localize "Modos em Segundo Plano" e habilite-o alternando o botão.
  4. 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:

  1. Compilar e executar seu aplicativo em um dispositivo físico (o fetch em segundo plano não funciona em simuladores).
  2. Colocar o aplicativo em segundo plano.
  3. 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:

  1. Habilite Notificações Push na aba de Capacidades do seu alvo de projeto.
  2. Utilize o Centro de Desenvolvedores da Apple para criar um ID do aplicativo e configurá-lo para Notificações Push.
  3. 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!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!