logoDokumen
Cari

Praktik Terbaik untuk iOS Live Activities

Pengaturan Live Activity

LiveActivity adalah fitur yang diperkenalkan di iOS 16.1. Dengan framework ActivityKit, Anda dapat meluncurkan live activity untuk menampilkan pembaruan real-time dari aplikasi di Dynamic Island dan layar kunci. Contohnya, aplikasi olahraga memungkinkan pengguna memulai live activity dan melihat update pertandingan secara langsung (lihat panduan fitur versi iOS untuk detail).

  • Gunakan framework ActivityKit di proyek utama untuk memulai, memperbarui, dan mengakhiri live activity. Untuk tampilan antarmuka Live Activity, gunakan SwiftUI dan WidgetKit pada ekstensi widget.
  • Live activity dapat dimulai, diperbarui, dan diakhiri tidak hanya dengan ActivityKit, tetapi juga melalui push notification jarak jauh.
  • Fitur push notification jarak jauh untuk LiveActivity tidak mendukung sertifikat p12; Anda perlu mengonfigurasi sertifikat p8.

Perlu diketahui, Apple membatasi jumlah push notification LiveActivity yang dapat dikirim per jam. Jika Anda perlu memperbarui push notification LiveActivity secara sering, tambahkan entri NSSupportsLiveActivitiesFrequentUpdates di file info.plist dan set nilainya ke YES (lihat iOS LiveActivity untuk info lebih lanjut).

Menambahkan Fitur Live Activity ke Proyek

Pengaturan

1. Konfigurasi Info.plist

Tambahkan key-value pair ke Info.plist di proyek utama, dengan key NSSupportsLiveActivities dan nilai YES.

konfigurasi Info.plist untuk Live Activity

2. Tambahkan Widget Extension

2.1 Buat Target Baru

Buka File > New > Target.

2.2 Pilih Widget Extension

pilih ekstensi widget untuk Live Activity

2.3 Konfigurasi Widget Extension

Centang kotak "Include Live Activity". konfigurasi ekstensi widget dengan Live Activity

Klik Finish.

Xcode akan membuat LiveActivity untuk Anda.

LiveActivityWidgetAttributes mendefinisikan atribut live activity, termasuk properti yang bisa diubah dan tidak bisa diubah.

Struct LiveActivityWidgetLiveActivity digunakan untuk menyesuaikan tampilan live activity.

struktur LiveActivityWidgetLiveActivity

Selanjutnya, di LiveActivityWidgetBundle, aktifkan live activity agar bisa ditampilkan. mengaktifkan Live Activity di LiveActivityWidgetBundle

3. Pengujian

Mulai live activity di proyek utama, dengarkan perubahan push token-nya, dan laporkan push token tersebut ke EngageLab. Setelah berhasil dilaporkan, Anda dapat menggunakan layanan EngageLab untuk mengirim pesan ke LiveActivity di perangkat.

func startLiveActivity1() { let initialContentState = MTLAAttributes.ContentState(eventStr: "begin", eventTime: 1) let activityAttributes = MTLAAttributes(name: "LiveActivity", number: 33, tag: "") do { // Membuat Activity let activity = try Activity.request(attributes: activityAttributes, contentState: initialContentState, pushType: PushType.token) // Dengarkan perubahan pushToken Task { for await pushtoken in activity.pushTokenUpdates { let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined() // Daftarkan liveactivity ke EngageLab untuk update notifikasi via liveactivityId di platform push MTPushService.registerLiveActivity("my_define_liveactivity_id", pushToken: pushtoken, completion: { code, liveactivityId, token, seq in print("result:\(code)") }, seq: 1) } } } catch { print("Error requesting Live Activity \(error.localizedDescription).") } }
              
              func startLiveActivity1() {
    
    let initialContentState = MTLAAttributes.ContentState(eventStr: "begin", eventTime: 1)
    let activityAttributes = MTLAAttributes(name: "LiveActivity", number: 33, tag: "")
    
    do {
      // Membuat Activity
      let activity = try Activity.request(attributes: activityAttributes, contentState: initialContentState, pushType: PushType.token)
      
      // Dengarkan perubahan pushToken
      Task {
        for await pushtoken in activity.pushTokenUpdates {
          let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
          // Daftarkan liveactivity ke EngageLab untuk update notifikasi via liveactivityId di platform push
          MTPushService.registerLiveActivity("my_define_liveactivity_id", pushToken: pushtoken, completion: { code, liveactivityId, token, seq in
            print("result:\(code)")
          }, seq: 1)
        }
      }
      
    } catch {
      print("Error requesting Live Activity \(error.localizedDescription).")
    }
  }

            
Tampilkan blok kode ini di jendela mengambang
  • Mulai iOS 17.2, Apple memungkinkan penggunaan push notification untuk memulai live activity, menggunakan pushToStartToken. Gunakan fungsi pushToStartTokenUpdates untuk mendengarkan perubahan pada pushToStartToken live activity dan laporkan ke EngageLab.
func pushToStart() { Task { if #available(iOS 17.2, *) { var beforeToken = "" for await pushtoken in Activity<MTLAAttributes>.pushToStartTokenUpdates { let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined() print("pushToStartToken: MTLAAttributes -> \(pushtokenstr)") if beforeToken == pushtokenstr { return } beforeToken = pushtokenstr MTPushService.registerLiveActivity("MTLAAttributes", pushToStartToken: pushtoken, completion: { code, alias, token, seq in print("register MTLAAttributes pushToStartToken result: \(pushtokenstr) result:\(code) seq:\(seq)") }, seq: seq()) } } else { // Fallback untuk versi sebelumnya } } }
              
              func pushToStart() {
    Task {
      if #available(iOS 17.2, *) {
        var beforeToken = ""
        for await pushtoken in Activity<MTLAAttributes>.pushToStartTokenUpdates {
          
          let pushtokenstr = pushtoken.map { String(format: "%02.2hhx", arguments: [$0]) }.joined()
          print("pushToStartToken: MTLAAttributes -> \(pushtokenstr)")
          if beforeToken == pushtokenstr {
            return
          }
          beforeToken = pushtokenstr
          
          MTPushService.registerLiveActivity("MTLAAttributes", pushToStartToken: pushtoken, completion: { code, alias, token, seq in
            print("register MTLAAttributes pushToStartToken result: \(pushtokenstr) result:\(code) seq:\(seq)")
          }, seq: seq())
        }
      } else {
        // Fallback untuk versi sebelumnya
      }
    }
}

            
Tampilkan blok kode ini di jendela mengambang
icon
Hubungi Sales