Pular para o conteúdo

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 to

Adicionar uma Extensão de Widget

Anchor link to
  1. Crie um novo alvo (target)

Vá para File > New > Target e selecione Widget Extension.

  1. 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 to

Encontre 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 to

Para 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.

  1. 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()
}
  1. Crie um arquivo LiveActivityManager.swift para gerenciar as Live Activities
import Foundation
import ActivityKit
import UIKit
import PushwooshFramework
import 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)")
}
}
}
  1. É 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
  1. 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)
}
}
}
}
  1. Inicie uma Live Activity com uma Notificação Push Remota

Gerenciando as Live Activities

Anchor link to

O 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 Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Métodos para Iniciar Live Activity com ID de Atividade
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Métodos para Parar Live Activity
static 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 to

A 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 WidgetKit
import SwiftUI
import ActivityKit
import PushwooshFramework
import 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 to

A 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 PushwooshFramework
import PushwooshLiveActivities
Pushwoosh.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 Pushwoosh
static func sendPushToStartLiveActivity(token: String)
static func sendPushToStartLiveActivity(token: String, completion: @escaping (Error?) -> Void)
// Métodos para Iniciar Live Activity com ID de Atividade
static func startLiveActivity(token: String, activityId: String)
static func startLiveActivity(token: String, activityId: String, completion: @escaping (Error?) -> Void)
// Métodos para Parar Live Activity
static func stopLiveActivity()
static func stopLiveActivity(completion: @escaping (Error?) -> Void)
static func stopLiveActivity(activityId: String)
static func stopLiveActivity(activityId: String, completion: @escaping (Error?) -> Void)