Ana içeriğe atla
Live Activity’ler nispeten yeni bir iOS özelliğidir ve yerel uygulama gerektirir, bu da React Native, Flutter, Unity, Cordova gibi platformlar arası framework’ler kullanılırken zorluklar yaratabilir. Süreci basitleştirmek için OneSignal’in SDK’sı, yerel kod gereksinimlerini en aza indiren ve desteklenen platformlar arasında kolaylaştırılmış Live Activity entegrasyonunu sağlayan işlevsellik içerir.

Gereksinimler

  • SDK’mızın en son sürümü.
  • iOS 16.1+ ve iPadOS 17+
  • Bir .p8 APNs anahtarı kullanın. Apple, Live Activity’lerle p12 sertifikalarını desteklemiyor.
  • Xcode 14 veya üzeri

Kurulum

1. SDK’mızı kurun

Uygulamanızda Mobile SDK’mızın en son sürümünü kurduğunuzdan emin olun. Live Activity’ler web siteleri için veya Web SDK’mızla kullanılamaz.

2. Yeni setupDefault metodunu ekleyin

OneSignal SDK’sına DefaultLiveActivityAttributes türü için LiveActivity yaşam döngüsünü yönetmesini söylemek için setupDefault metodunu çağırabilirsiniz. Bu metod, Varsayılan Live Activity’yi başlatmak/güncellemek/sonlandırmak için hem Start Live Activity hem de Update Live Activity API’lerini kullanmanıza olanak tanır.
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. Activity Widget oluşturun

1

Info.plist dosyanızı güncelleyin

Xcode’da ana hedefinizin Info.plist dosyasını açın, Supports Live Activities anahtarını Boolean olarak ekleyin ve değerini YES olarak ayarlayın.

Info'ya Supports Live Activities anahtarını ekleyin ve değerini Boolean YES olarak ayarlayın

Live Activity’leri güncellerken, Apple’ın güncellemenin ne kadar acil olduğunu belirlemek için kullandığı bir “öncelik” ayarlama seçeneğiniz vardır. Apple, yüksek öncelik bayrağını çok sık kullanan istekleri kısıtlayacağı dahili eşiklere sahiptir.Live Activity’ler için kullanım durumlarınız daha sık yüksek öncelikli güncellemelere dayanıyorsa, Apple’ın Geliştirici Dokümanlarında belirtildiği gibi Info.plist dosyanıza NSSupportsLiveActivitiesFrequentUpdates anahtarını Boolean türünde YES olarak ayarlayarak ekleyebilirsiniz. Live Activity push bütçesini aştığında kullanıcılara bir diyalog sunulacak ve Live Activity’nin devam etmesine izin verirlerse, bütçe sorunsuz bir kullanıcı deneyimi için otomatik olarak artırılacaktır.
2

Bir Widget Extension oluşturun

Xcode’da File > New > Target… > Widget Extension yolunu izleyin.

Xcode'da uygulamanız için yeni bir Widget Extension hedefi ekleyin.

Seçin ve Next düğmesine basın.Bir isim vererek Widget Extension’ı yapılandırın (örnek: OneSignalWidget) ve Include Live Activity seçeneğinin seçildiğinden emin olun. Ardından Finish düğmesine tıklayın.

Bir Live Activity için Widget Extension seçenekleri.

Şemayı etkinleştirmeniz istenirse Don’t Activate düğmesine tıklayın.

Bir Live Activity için Widget Extension seçenekleri.

3

Podfile dosyanıza OneSignalXCFramework ekleyin

Projenizin Targets listesinde widget extension hedefinizin adını bulun. Örnekteki ad OneSignalWidgetExtension.

Widget extension hedefinizin adını bulun

Podfile dosyanızı açın ve aşağıdaki kodu ekleyin. OneSignalWidgetExtension yerine widget extension hedefinizin adını yazın.
Podfile
target 'OneSignalWidgetExtension' do
  #use_frameworks!
  pod 'OneSignalXCFramework', '>= 5.0.0', '< 6.0'
end
Xcode’u kapatın ve OneSignalLiveActivities pod’unu yüklemek için pod repo update && pod install komutunu çalıştırın.

4. LiveActivity.swift dosyasını kurun

Xcode’da WidgetExtensionLiveActivity.swift dosyasını açın. Ekranın sağ tarafındaki Inspector panelini açın. Target Membership içinde + düğmesine tıklayın ve Runner hedefinizi seçin.

Ana hedef üyeliğine izin verin

WidgetExtensionLiveActivity.swift dosyasının içeriğini aşağıdaki varsayılan Live Activity düzeniyle güncelleyin. Bu Widget’taki değerler, widget’ta görüntülenmesini istediğiniz herhangi bir şeye değiştirilebilir, setupDefault metodu bu öznitelikler için struct tanımlamayı halledecektir.
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)
        }
    }
}


Live Activity’yi test edin

  1. Uygulamayı başlatın
  2. Start Live Activity API referansımızda olası tüm alanları görün. Bu alanların yapısı, UI’nizi nasıl kurduğunuza bağlı olarak farklılık gösterebilir. Örneğin:
  • "event_updates": Bu, Live Activity başlatıldıktan sonra güncellenebilecek dinamik veridir (kod örneğindeki context.state sonrasındaki her şey). context.state.data olduğundan, bu alana bir data nesnesi ve kod örneğinde eklediğimiz mesaj sözlüğü gibi içindeki ek alanları ekleriz. Kullanım için aşağıdaki örnek isteğe bakın.
  • "event_attributes": Bu, push to start isteğinde ayarlanan ve Live Activity kaldırılana veya üzerine yazılana kadar aynı değeri koruyan statik veridir.
  1. Push to start kullanırken, "activity_id" kodda değil istekte ayarlanır. Farklı Activity ID’leri kullanmak yeni Live Activity’ler başlatacaktır. Aynı Activity ID’yi kullanmak, o ID’yi şu anda kullanan widget’ın üzerine yazacaktır.
  2. URL yolunuzda OneSignal App ID’yi ve Authorization başlığında Rest API Key’i değiştirdiğinizden emin olun. Varsayılan kurulumu kullanıyorsanız DefaultActivityAttributes türü değiştirilemez. Ayrıca lütfen yolunuza eklenen activity türünün büyük/küçük harfe duyarlı olduğunu ve sizin tanımladığınız veya aşağıdaki örnekte kullanılan Varsayılan activity ile eşleşmesi gerektiğini unutmayın.
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": {
    "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
}'

Düşük seviye metodlar

Bunlar, SDK’nın en son sürümünde de eklenmiş olan kendi Push To Start token’ınızı oluşturmak istiyorsanız kullanabileceğiniz isteğe bağlı metodlardır. Bu metodları kullanmak, Xcode ile daha fazla etkileşim kurmanızı ve Swift ile Push To Start için kendi token’ınızı oluşturmanızı gerektirir. Bu konuda bir rehberi burada bulabilirsiniz.
//Setting the Push To Start Token
OneSignal.LiveActivities.setPushToStartToken(activityType: string, token: string)

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