Live Activities do iOS
As Live Activities exibem os dados mais atuais do seu aplicativo na Tela de Bloqueio do iPhone ou iPad e na Dynamic Island. Este recurso permite que os usuários vejam informações ao vivo rapidamente e realizem ações rápidas relacionadas às informações exibidas.
Aqui estão alguns exemplos de uso das Live Activities:
- Mostrar o status do pedido em um aplicativo de entrega;
- Fornecer uma contagem regressiva em tempo real em um aplicativo de treinamento;
- Mostrar informações de rastreamento em um aplicativo de táxi;
- Exibir estatísticas de jogos e placares atuais em um aplicativo de esportes;
- Fornecer previsões horárias em um aplicativo de clima.
Você pode habilitar as Live Activities usando o SDK da Pushwoosh para iOS, conforme descrito abaixo. Para gerenciar as Live Activities e atualizar seu conteúdo, use o método /updateLiveActivity.
Configuração
Anchor link toAdicionar uma Extensão de Widget
Anchor link to- Crie um novo alvo (target)
Vá para File > New > Target e selecione Widget Extension.

- Configuração da Extensão de Widget Por favor, insira um nome e certifique-se de selecionar Include Live Activity e clique em Finish.

Configuração do Info.plist
Anchor link toEncontre o arquivo Info.plist no alvo principal, insira a chave “Supports Live Activities” e defina seu valor como YES.
<key>NSSupportsLiveActivities</key> <true/>Habilitando as Live Activities a partir do aplicativo
Anchor link toPara habilitar as Live Activities, adicione o código delas à sua extensão de widget existente ou crie uma nova se o seu aplicativo ainda não tiver. As Live Activities usam a funcionalidade do SwiftUI e WidgetKit para sua interface de usuário. O ActivityKit lida com o ciclo de vida de cada Live Activity: sua API é usada para solicitar, atualizar e encerrar uma Live Activity e para receber notificações push do ActivityKit. Você pode aprender mais sobre as Live Activities na documentação da Apple.
- Navegue até o arquivo ContentView do seu projeto no Xcode e crie um Button
import SwiftUI
struct ContentView: View { var body: some View { VStack(spacing: 20) {
Button(action: { LiveActivityManager.shared.startActivity() }, label: { Text("Start Live Activity") .foregroundColor(.white) .padding() .background(Color.blue) .cornerRadius(10) }) } .padding() }}
#Preview { ContentView()}
- Crie um arquivo LiveActivityManager.swift para gerenciar as Live Activities
import Foundationimport ActivityKitimport UIKitimport PushwooshFrameworkimport PushwooshLiveActivities
class LiveActivityManager: NSObject, ObservableObject { public static let shared: LiveActivityManager = LiveActivityManager()
private var currentActivity: Activity<FoodDeliveryAttributes>? = nil
override init() { super.init() }
func startActivity() { guard ActivityAuthorizationInfo().areActivitiesEnabled else { print("You can't start live activity.") return } do { let pushwooshData = PushwooshLiveActivityAttributeData(activityId: "activity_id") let atttribute = FoodDeliveryAttributes(orderNumber: "1234567", pushwoosh: pushwooshData) let initialState = FoodDeliveryAttributes.ContentState( status: "Preparing your meal", estimatedTime: "25 min", emoji: "👨🍳", pushwoosh: nil ) let activity = try Activity<FoodDeliveryAttributes>.request( attributes: atttribute, content: .init(state:initialState , staleDate: nil), pushType: .token ) self.currentActivity = activity
Task { for await pushToken in activity.pushTokenUpdates { let pushTokenString = pushToken.reduce("") { $0 + String(format: "%02x", $1) } print("Activity:\(activity.id) push token: \(pushTokenString)")
// MARK: - Enviar Token de Push para a Pushwoosh Pushwoosh.LiveActivities.startLiveActivity( token: pushTokenString, activityId: "activity_id" ) } } } catch { print("Start Activity Error: \(error.localizedDescription)") } }}- É isso, agora executamos o projeto e pressionamos o botão ‘Start Live Activity’. Em seguida, navegamos para a tela de bloqueio e vemos a Live Activity criada.

Iniciar uma Live Activity com uma notificação push remota
Anchor link to- Para iniciar uma Live Activity via Notificação Push Remota, você precisa enviar o token pushToStartTokenUpdates para a Pushwoosh.
func getPushToStartToken() { if #available(iOS 17.2, *) { Task { for await data in Activity<LiveActivityAttributes>.pushToStartTokenUpdates { let token = data.map {String(format: "%02x", $0)}.joined() print("Activity PushToStart Token: \(token)")
// Enviar o token `pushToStartTokenUpdates` para a Pushwoosh try await Pushwoosh.LiveActivities.sendPushToStartLiveActivity(token: token) } } }}- Inicie uma Live Activity com uma Notificação Push Remota
Gerenciando as Live Activities
Anchor link toO SDK da Pushwoosh para iOS fornece os seguintes métodos para trabalhar com as Live Activities:
// Enviar Token de Início de Push da Live Activity para a Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Métodos para Iniciar Live Activity com ID de Atividadestatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Métodos para Parar Live Activitystatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)Você também pode atualizar as live activities por segmentos usando o parâmetro Activity ID. Ao criar uma atividade, você precisa passar um parâmetro Activity ID exclusivo no método, que será relevante para um segmento de usuário específico.
Por exemplo, N usuários se inscreveram no mesmo evento em uma Live Activity. É necessário que o parâmetro Activity ID seja único para todos esses N usuários.
Quando você terminar de trabalhar com uma Live Activity, use estes métodos:
static func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)Método Setup()
Anchor link toA Pushwoosh simplifica a transferência de IDs de atividade introduzindo a função PushwooshLiveActivities.setup, que lida com todo o ciclo de vida de uma Live Activity dentro do aplicativo. Esta função escuta automaticamente as atualizações de token pushToStart e pushToUpdate. Ao usar este método, o aplicativo não precisa mais rastrear manualmente o início das Live Activities ou gerenciar as atualizações de token para as atualizações de atividade.
Recomendamos usar este método porque ele lida com todo o gerenciamento de tokens do nosso lado, reduzindo a quantidade de código que você precisa manter do seu lado. Isso simplifica a integração e garante uma experiência mais suave e eficiente para o seu aplicativo.
No AppDelegate, certifique-se de importar PushwooshFramework e PushwooshLiveActivities e chamar o método setup do módulo Pushwoosh.LiveActivities.
AppDelegate.swift
if #available(iOS 16.1, *) { Pushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)}FoodDeliveryAttributes
import WidgetKitimport SwiftUIimport ActivityKitimport PushwooshFrameworkimport PushwooshLiveActivities
struct FoodDeliveryAttributes: PushwooshLiveActivityAttributes { public struct ContentState: PushwooshLiveActivityContentState { var status: String var estimatedTime: String var emoji: String var pushwoosh: PushwooshLiveActivityContentStateData? }
var orderNumber: String var pushwoosh: PushwooshLiveActivityAttributeData}FoodDeliveryAttributes: Esta estrutura está em conformidade com o protocolo PushwooshLiveActivityAttributes. É usada para definir os atributos de uma live activity dentro do aplicativo.
Guia de migração
Anchor link toA partir da versão 6.8.0 do SDK da Pushwoosh para iOS, atualizamos a estrutura do SDK. Os métodos das Live Activities agora são acessados através do módulo PushwooshLiveActivities.
Se você estava usando uma versão do SDK da Pushwoosh para iOS anterior à 6.8.0 e estava chamando os métodos listados abaixo, e desde então atualizou para a versão 6.8.0 ou posterior, por favor, observe as seguintes alterações:
static func setup<Attributes: PushwooshLiveActivityAttributes>(_ activityType: Attributes.Type)static func defaultSetup()static func defaultStart(_ activityId: String, attributes: [String: Any], content: [String: Any])Agora, para acessar esses métodos, você deve usar o módulo LiveActivity.
import PushwooshFrameworkimport PushwooshLiveActivitiesPushwoosh.LiveActivities.setup(FoodDeliveryAttributes.self)Pushwoosh.LiveActivities.defaultSetup()Pushwoosh.LiveActivities.defaultStart("activity_id", attributes: ["key_attribute": "value_attribute"], content: ["key_content": "value_content"])Também mantivemos o suporte para os métodos através de Pushwoosh.sharedInstance() como listado abaixo, mas observe que esses métodos serão descontinuados em versões futuras.
// Enviar Token de Início de Push da Live Activity para a Pushwooshstatic func sendPushToStartLiveActivity(token: String)static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Métodos para Iniciar Live Activity com ID de Atividadestatic func startLiveActivity(token: String, activityId: String)static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Métodos para Parar Live Activitystatic func stopLiveActivity()static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)