Push To Start 및 기본 Live Activity 유형을 지원하는 React Native, Flutter, Unity, Cordova 등과 같은 OneSignal의 래퍼 SDK에서 Live Activities를 구현하는 방법을 알아보세요.
Live Activities는 비교적 새로운 iOS 기능이며 네이티브 구현이 필요하므로 React Native, Flutter, Unity, Cordova 등과 같은 크로스 플랫폼 프레임워크를 사용할 때 어려움을 겪을 수 있습니다. 프로세스를 단순화하기 위해 OneSignal의 SDK에는 네이티브 코드 요구 사항을 최소화하는 기능이 포함되어 있어 지원되는 플랫폼 전체에서 간소화된 Live Activity 통합이 가능합니다.
OneSignal SDK에 DefaultLiveActivityAttributes 유형에 대한 LiveActivity 수명 주기를 관리하도록 지시하려면 setupDefault 메서드를 호출할 수 있습니다. 이 메서드를 사용하면 Start Live Activity 및 Update Live Activity API를 모두 사용하여 기본 Live Activity를 시작/업데이트/종료할 수 있습니다.
import { OneSignal } from 'react-native-onesignal'//Push To StartOneSignal.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);
using OneSignalSDK;//Push To StartOneSignal.LiveActivities.SetupDefault();//Launching the Live Activity from within the app (not needed for push to start)string activityId = "my_activity_id";OneSignal.LiveActivities.StartDefault( activityId, new Dictionary<string, object>() { { "title", "Welcome!" } }, new Dictionary<string, object>() { { "message", new Dictionary<string, object>() { { "en", "Hello World!"} }}, });
/*Cordova*///Push To Startwindow.plugins.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" } };window.plugins.OneSignal.LiveActivities.startDefault( activityId, attributes, content);/*Ionic/Capacitor*/import OneSignal from "onesignal-cordova-plugin";//Push To StartOneSignal.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);
using OneSignalSDK;//Push To StartOneSignal.LiveActivities.SetupDefault();//Launching the Live Activity from within the app (not needed for push to start)string activityId = "my_activity_id";OneSignal.LiveActivities.StartDefault( activityId, new Dictionary<string, object>() { { "title", "Welcome!" } }, new Dictionary<string, object>() { { "message", new Dictionary<string, object>() { { "en", "Hello World!"} }}, });
import 'package:onesignal_flutter/onesignal_flutter.dart';OneSignal.LiveActivities.setupDefault()//Launching the Live Activity from within the app (not needed for push to start)const String activityId = "my_activity_id";OneSignal.LiveActivities.startDefault(activityId!, { "title": "Welcome!" }, { "message": {"en": "Hello World!"},});
Xcode에서 메인 타겟의 Info.plist를 열고 Supports Live Activities 키를 Boolean으로 추가하고 YES로 설정하세요.
Info에 Supports Live Activities 키를 추가하고 값을 Boolean YES로 설정
Live Activities를 업데이트할 때 Apple이 업데이트의 긴급성을 결정하는 데 사용하는 “priority”를 설정할 수 있는 옵션이 있습니다. Apple에는 높은 우선순위 플래그를 너무 자주 사용하는 요청을 제한하는 내부 임계값이 있습니다.Live Activities에 대한 사용 사례가 더 빈번한 높은 우선순위 업데이트에 의존하는 경우 Apple의 개발자 문서에 지시된 대로 Info.plist에 NSSupportsLiveActivitiesFrequentUpdates 키를 Boolean 유형으로 YES로 설정하여 추가할 수 있습니다. Live Activity가 푸시 예산을 초과하면 사용자에게 대화 상자가 표시되며 Live Activity를 계속 허용하면 원활한 사용자 경험을 위해 예산이 자동으로 증가합니다.
2
Widget Extension 만들기
Xcode에서 File > New > Target… > Widget Extension으로 이동하세요.
Xcode에서 앱용 새 Widget Extension 타겟 추가.
선택하고 Next를 누르세요.이름을 제공하여(예: OneSignalWidget) Widget Extension을 구성하고 Include Live Activity가 선택되어 있는지 확인하세요. 그런 다음 Finish를 클릭하세요.
이 단계는 앱이 CocoaPods로 Live Activity widget 확장을 사용하는 경우에만 필요합니다.프로젝트의 Targets 목록에서 widget extension 타겟의 이름을 찾으세요. 예제의 이름은 OneSignalWidgetExtension입니다.
widget extension 타겟의 이름 찾기
Podfile을 열고 OneSignalXCFramework/OneSignalLiveActivities subspec만 추가하세요. OneSignalWidgetExtension을 widget 확장 타겟 이름으로 교체하세요. OneSignalComplete로 확인되며 위치 모듈을 포함하는 집계 선언 pod 'OneSignalXCFramework'는 사용하지 마세요.
Podfile
target 'OneSignalWidgetExtension' do #use_frameworks! pod 'OneSignalXCFramework/OneSignalLiveActivities', '>= 5.0.0', '< 6.0'end
Xcode를 닫고 pod repo update && pod install을 실행하여 OneSignalLiveActivities pod를 설치하세요.
Xcode에서 WidgetExtensionLiveActivity.swift 파일을 여세요.화면 오른쪽의 Inspector 패널을 여세요. Target Membership 내에서 + 버튼을 클릭하고 Runner 타겟을 선택하세요.
메인 타겟 멤버십 허용
_WidgetExtensionLiveActivity.swift_의 내용을 다음 기본 Live Activity 레이아웃으로 업데이트하세요. 이 Widget의 값은 위젯에 표시하려는 모든 것으로 변경할 수 있으며 setupDefault 메서드가 이러한 속성에 대한 구조체 정의를 처리합니다.
"event_updates": Live Activity가 시작된 후 업데이트할 수 있는 동적 데이터입니다(코드 예제의 context.state 이후의 모든 것). context.state.data가 있으므로 이 필드에 데이터 객체와 코드 예제에 추가한 message 딕셔너리와 같은 추가 필드를 추가합니다. 사용 방법은 아래 예제 요청을 참조하세요.
"event_attributes": push to start 요청에서 설정되는 정적 데이터이며 Live Activity가 제거되거나 덮어쓰기될 때까지 동일한 값을 유지합니다.
push to start를 사용할 때 코드가 아닌 요청에서 "activity_id"를 설정합니다. 다른 Activity ID를 사용하면 새 Live Activities가 시작됩니다. 동일한 Activity ID를 사용하면 현재 해당 ID를 사용하는 위젯을 덮어씁니다.
url 경로에서 OneSignal 앱 ID를, Authorization 헤더에서 Rest API Key를 변경했는지 확인하세요. 기본 설정을 사용하는 경우 DefaultActivityAttributes 유형은 변경할 수 없습니다. 또한 경로에 추가된 activity 유형은 대소문자를 구분하며 아래 예제에서 사용된 기본 activity 또는 정의한 것과 일치해야 합니다.
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}'
SDK의 최신 릴리스에도 추가된 자체 Push To Start 토큰을 생성하려는 경우 사용할 수 있는 선택적 메서드입니다. 이러한 메서드를 사용하려면 Xcode와 더 많이 상호 작용하고 Swift로 Push To Start용 자체 토큰을 생성해야 합니다. 이에 대한 가이드는 여기에서 찾을 수 있습니다.
//Setting the Push To Start TokenOneSignal.LiveActivities.setPushToStartToken(activityType: string, token: string)//Removing the Push To Start TokenOneSignal.LiveActivities.removePushToStartToken(activityType: string)
//Setting the Push To Start TokenOneSignal.LiveActivities.SetPushToStartToken(string activityType, string token)//Removing the Push To Start TokenOneSignal.LiveActivities.RemovePushToStartToken(string activityType)
/* Cordova *///Setting the Push To Start Tokenwindow.plugins.OneSignal.LiveActivities.setPushToStartToken(activityType: string, token: string)//Removing the Push To Start Tokenwindow.plugins.OneSignal.LiveActivities.removePushToStartToken(activityType: string)/* Ionic *///Setting the Push To Start TokenOneSignal.LiveActivities.setPushToStartToken(activityType: string, token: string)//Removing the Push To Start TokenOneSignal.LiveActivities.removePushToStartToken(activityType: string)
//Setting the Push To Start TokenOneSignal.LiveActivities.SetPushToStartToken(string activityType, string token)//Removing the Push To Start TokenOneSignal.LiveActivities.RemovePushToStartToken(string activityType)
//Setting the Push To Start TokenOneSignal.LiveActivities.setPushToStartToken(String activityType, String token)//Removing the Push To Start TokenOneSignal.LiveActivities.removePushToStartToken(String activityType)