Pular para o conteúdo principal
Live Activities são um recurso relativamente novo do iOS e requerem implementação nativa, o que pode representar desafios ao usar frameworks multiplataforma como React Native, Flutter, Unity, Cordova, etc. Para simplificar o processo, o SDK do OneSignal inclui funcionalidade que minimiza os requisitos de código nativo, permitindo integração simplificada de Live Activity em plataformas suportadas.

Requisitos

  • A versão mais recente do nosso SDK.
  • iOS 16.1+ e iPadOS 17+
  • Use uma chave APNs .p8. A Apple não suporta certificados p12 com Live Activities.
  • Xcode 14 ou superior

Configuração

1. Configurar nosso SDK

Certifique-se de que você configurou a versão mais recente do nosso SDK móvel no seu aplicativo. Live Activities não estão disponíveis para sites ou com nosso SDK Web.

2. Adicionar o novo método setupDefault

Para informar ao SDK do OneSignal para gerenciar o ciclo de vida do LiveActivity para o tipo DefaultLiveActivityAttributes, você pode chamar o método setupDefault. Este método permite que você use tanto as APIs Start Live Activity quanto Update Live Activity para iniciar/atualizar/encerrar o Default Live Activity.
import { OneSignal } from 'react-native-onesignal'

//Push To Start
OneSignal.LiveActivities.setupDefault()

//Launching the Live Activity from within the app (not needed for push to start)
const activityId = "my_activity_id"
const attributes = { title: "Sample Title" } ;
const content = { message: { en: "message" } };
OneSignal.LiveActivities.startDefault(activityId, attributes, content);

3. Criar Activity Widget

1

Atualizar seu Info.plist

No Xcode, abra o Info.plist do seu target principal, adicione a chave Supports Live Activities como Boolean e defina-a como YES.

Adicionar chave Supports Live Activities ao Info e definir seu valor como Boolean YES

Ao atualizar Live Activities, você tem a opção de definir uma “prioridade” que a Apple usa para determinar o quão urgente é a atualização. A Apple tem limites internos nos quais eles irão limitar solicitações que usam a flag de alta prioridade com muita frequência.Se seus casos de uso para Live Activities dependem de atualizações de alta prioridade mais frequentes, você pode adicionar a chave NSSupportsLiveActivitiesFrequentUpdates ao seu Info.plist como um tipo Boolean definido como YES conforme orientado na Documentação de Desenvolvedor da Apple. Os usuários receberão um diálogo quando a Live Activity exceder seu orçamento de push e, se permitirem que a Live Activity continue, o orçamento será automaticamente aumentado para uma experiência de usuário perfeita.
2

Criar uma Widget Extension

No Xcode, vá para File > New > Target… > Widget Extension.

Adicionar um novo target Widget Extension para seu aplicativo no Xcode.

Selecione e pressione Next.Configure a Widget Extension fornecendo um nome (exemplo: OneSignalWidget) e certifique-se de que Include Live Activity esteja selecionado. Então clique em Finish.

Opções de Widget Extension para uma Live Activity.

Clique em Don’t Activate se solicitado a ativar o scheme.

Opções de Widget Extension para uma Live Activity.

3

Adicionar o OneSignalXCFramework ao seu Podfile

Encontre o nome do seu target de extensão de widget na lista de Targets do seu projeto. O nome do exemplo é OneSignalWidgetExtension.

Encontrar o nome do seu target de extensão de widget

Abra seu Podfile e adicione o seguinte código. Substitua OneSignalWidgetExtension pelo nome do seu target de extensão de widget.
Podfile
target 'OneSignalWidgetExtension' do
  #use_frameworks!
  pod 'OneSignalXCFramework', '>= 5.0.0', '< 6.0'
end
Feche o Xcode e execute pod repo update && pod install para instalar o pod OneSignalLiveActivities.

4. Configurar o arquivo LiveActivity.swift

No Xcode, abra o arquivo WidgetExtensionLiveActivity.swift. Abra o painel Inspector no lado direito da tela. Dentro de Target Membership, clique no botão + e selecione seu target Runner.

Permitir membership do target principal

Atualize o conteúdo de WidgetExtensionLiveActivity.swift com o seguinte layout padrão de Live Activity. Os valores neste Widget podem ser alterados para o que você quiser exibido no widget, o método setupDefault cuidará de definir a struct para esses atributos.
Swift
import ActivityKit
import WidgetKit
import SwiftUI
import OneSignalLiveActivities

// Your struct name might be different here
@available(iOS 16.2, *)
struct OneSignalWidgetLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: DefaultLiveActivityAttributes.self) { context in
            // Lock screen / banner UI
            VStack {
                Spacer()

                Text("Title: " + (context.attributes.data["title"]?.asString() ?? ""))
                    .font(.headline)

                Spacer()

                HStack {
                    Spacer()
                    Text(context.state.data["message"]?.asDict()?["en"]?.asString() ?? "Default Message")
                    Spacer()
                }

                Text("INT: " + String(context.state.data["intValue"]?.asInt() ?? 0))
                Text("DBL: " + String(context.state.data["doubleValue"]?.asDouble() ?? 0.0))
                Text("BOL: " + String(context.state.data["boolValue"]?.asBool() ?? false))

                Spacer()
            }
            .activitySystemActionForegroundColor(.black)
            .activityBackgroundTint(.white)

        } dynamicIsland: { _ in
            DynamicIsland {
                // Expanded UI
                DynamicIslandExpandedRegion(.leading) {
                    Text("Leading")
                }
                DynamicIslandExpandedRegion(.trailing) {
                    Text("Trailing")
                }
                DynamicIslandExpandedRegion(.bottom) {
                    Text("Bottom")
                    // More content
                }
            } compactLeading: {
                Text("L")
            } compactTrailing: {
                Text("T")
            } minimal: {
                Text("Min")
            }
            .widgetURL(URL(string: "http://www.apple.com"))
            .keylineTint(Color.red)
        }
    }
}


Testar a Live Activity

  1. Iniciar o aplicativo
  2. Veja todos os campos possíveis na nossa referência da API Start Live Activity. A estrutura desses campos pode diferir dependendo de como você configurou sua UI. Por exemplo:
  • "event_updates": Estes são os dados dinâmicos que podem ser atualizados após a Live Activity ter sido iniciada (qualquer coisa após context.state no exemplo de código). Como temos context.state.data, adicionaríamos um objeto data a este campo e quaisquer campos adicionais dentro como o dicionário de mensagem que adicionamos no exemplo de código. Para uso, veja exemplo de solicitação abaixo.
  • "event_attributes": Estes são os dados estáticos que são definidos na solicitação push to start e permanecem com o mesmo valor até que a Live Activity seja removida ou sobrescrita.
  1. Ao usar push to start, você define o "activity_id" na solicitação, em vez de no código. Usar IDs de Activity diferentes iniciará novas Live Activities. Usar o mesmo Activity ID sobrescreverá o widget que está usando esse ID atualmente.
  2. Certifique-se de que você alterou o OneSignal App ID no caminho da sua url e a Rest API Key no cabeçalho de Authorization. O tipo DefaultActivityAttributes não pode ser alterado se você estiver usando a configuração padrão. Observe também que o tipo de atividade adicionado ao seu caminho diferencia maiúsculas de minúsculas e deve corresponder ao que está definido por você ou à atividade Default usada no exemplo abaixo.
curl
curl --request POST \
     --url https://api.onesignal.com/apps/YOUR_APP_ID/activities/activity/DefaultLiveActivityAttributes \
     --header 'Authorization: key YOUR_REST_API_KEY' \
     --header 'Content-Type: application/json' \
     --header 'accept: application/json' \
     --data '
{
  "event": "start",
  "event_updates": {
    "data": {
      "message": {
        "en": "The message is nested in context.state.data[\"message\"] as a dictionary"
      },
      "intValue": 10,
      "doubleValue": 3.14,
      "boolValue": true
    }
  },
  "event_attributes": {
    "data": {
      "title": "this is set when the LA starts and does not get updated after"
    }
  },
  "activity_id": "my-activity-id",
  "name": "OneSignal Notification Name",
  "contents": {
    "en": "English Message"
  },
  "headings": {
    "en": "English Message"
  },
  "sound": "beep.wav",
  "priority": 10
}'

Métodos de baixo nível

Estes são métodos opcionais para usar se você quiser gerar seu próprio token Push To Start, que também foi adicionado na versão mais recente do SDK. Usar esses métodos requer que você interaja mais com o Xcode e gere seu próprio token para Push To Start com Swift. Você pode encontrar um guia sobre isso aqui.
//Setting the Push To Start Token
OneSignal.LiveActivities.setPushToStartToken(activityType: string, token: string)

//Removing the Push To Start Token
OneSignal.LiveActivities.removePushToStartToken(activityType: string)