PushizoDocs
Kanallar

iOS Live Activities

Live Activities, kilit ekranında ve Dynamic Island'da canlı içerik gösterir: sipariş takibi, teslimat süresi, maç skoru, yolculuk durumu. Pushizo ile etkinliği sunucudan başlatır, günceller ve bitirirsiniz…

Live Activities, kilit ekranında ve Dynamic Island'da canlı içerik gösterir: sipariş takibi, teslimat süresi, maç skoru, yolculuk durumu. Pushizo ile etkinliği sunucudan başlatır, günceller ve bitirirsiniz (docs/adr/0024-ios-live-activities.md).

Gereksinimler: iOS 16.1+ (uzaktan başlatma, yani push-to-start, iOS 17.2+), app'te iOS push kanalı (APNs .p8 anahtarı) ve Widget Extension içinde tanımlı bir ActivityAttributes tipi.

1. Türü tanımlayın

Mesajlar → Live Activities → Yeni tür veya API ile. Tür adı Swift tip adıyla birebir aynı olmalıdır.

struct DeliveryAttributes: ActivityAttributes, PushizoLiveActivityAttributes {
    struct ContentState: Codable, Hashable {
        var eta: Int
        var status: String
    }
    var orderId: String
    var pushizo: PushizoActivityData?
}
```text

```bash
curl -X POST https://api.pushizo.com/v1/apps/$APP_ID/live-activities/types \
  -H "Authorization: Bearer $HS_API_KEY" -H "Content-Type: application/json" \
  -d '{"name":"DeliveryAttributes","content_state_schema":{"type":"object","properties":{"eta":{"type":"integer","minimum":0},"status":{"type":"string","enum":["hazirlaniyor","yolda","teslim"]}},"required":["eta","status"]},"attributes_schema":{"type":"object","properties":{"orderId":{"type":"string"}},"required":["orderId"]}}'
```text

Şema dili düz nesne ve ilkel alanlardır (`string`, `integer`, `number`, `boolean`; isteğe bağlı `enum`, `maxLength`,
`minimum`, `maximum`, `required`). Şemada olmayan alan, eksik zorunlu alan veya yanlış tür 422 `HS_CONTENT_INVALID`
döner; cihaz bu içeriği çözemeyeceği için gönderilmez.

## 2. SDK'da kaydedin

```swift
if #available(iOS 16.1, *) {
    Pushizo.LiveActivities.register(DeliveryAttributes.self)
}
```text

SDK, tür için push-to-start belirtecini ve başlayan her etkinliğin güncelleme belirtecini Pushizo'ya bildirir;
etkinlik bitince belirteci siler. Info.plist'e `NSSupportsLiveActivities = YES` ekleyin. Ayrıntılar:
[iOS SDK](/docs/sdk/ios#live-activities). Flutter, React Native, Capacitor, Cordova, MAUI ve Unity köprüleri genel
amaçlı `PushizoDefaultLiveActivityAttributes` türünü kullanır; bu durumda dashboard'da bu adla bir tür tanımlayın.

## 3. Başlatın, güncelleyin, bitirin

```bash
curl -X POST https://api.pushizo.com/v1/apps/$APP_ID/live-activities/DeliveryAttributes/start \
  -H "Authorization: Bearer $HS_API_KEY" -H "Content-Type: application/json" \
  -d '{"activity_id":"order-42","target":{"include_external_ids":["user-1"]},"attributes":{"orderId":"42"},"content_state":{"eta":25,"status":"hazirlaniyor"},"alert":{"title":{"tr":"Siparişin hazırlanıyor"}},"stale_date":1792090000}'
```text

```bash
curl -X POST https://api.pushizo.com/v1/apps/$APP_ID/live-activities/DeliveryAttributes/update \
  -H "Authorization: Bearer $HS_API_KEY" -H "Content-Type: application/json" \
  -d '{"activity_id":"order-42","content_state":{"eta":10,"status":"yolda"}}'
```text

```bash
curl -X POST https://api.pushizo.com/v1/apps/$APP_ID/live-activities/DeliveryAttributes/end \
  -H "Authorization: Bearer $HS_API_KEY" -H "Content-Type: application/json" \
  -d '{"activity_id":"order-42","content_state":{"eta":0,"status":"teslim"},"dismissal_date":1792093600}'
```text

- `target` yalnızca start'ta: `include_external_ids`, `include_subscription_ids`, `included_segments` veya `all`.
  Yalnızca bu tür için push-to-start belirteci olan iOS cihazları hedeflenir.
- `activity_id` verilmezse `lac_…` üretilir ve yanıtta döner; update/end bu kimlikle yapılır.
- Update/end, cihazların bu etkinlik için bildirdiği belirteçlere gider; hiç yoksa 422 `HS_NO_RECIPIENTS`
  (etkinlik bitmiş veya cihaz henüz bildirmemiş olabilir).
- `priority`: 10 (varsayılan, hemen) veya 5 (enerji dostu; Apple bütçesine tabi).
- Sessiz saat ve frekans sınırı uygulanmaz. Kota ve `message.queued` webhook'u normal mesajlar gibi çalışır;
  gönderim Mesajlar listesinde ve mesaj izlemede görünür.

Yanıt (202): `{ "message_id": "msg_…", "activity_id": "order-42", "event": "start", "recipients_estimate": 1 }`.

## 4. Journey ile otomatik akış

Journey builder'da **Live Activity** adımı ekleyin: tür, olay (başlat/güncelle/bitir) ve etkinlik anahtarı. Aynı
anahtarlı adımlar aynı run içinde aynı etkinliği hedefler (kimlik `<run>-<anahtar>`). Değerler Liquid içerebilir:

| Alan | Değer |
|------|-------|
| `orderId` (öznitelik) | `{{ context.order_id }}` |
| `eta` (içerik) | `{{ user.tags.eta }}` |

Liquid çıktısı şemadaki türe çevrilir (`"15"` → 15). Kullanıcının belirteci yoksa adım atlanır ve run devam eder;
değer şemaya uymazsa adım başarısız sayılır (run yine devam eder) ve journey analitiğinde görünür.

## Sorun giderme

| Belirti | Neden |
|---------|-------|
| Start 422 `HS_NO_RECIPIENTS` | Hedefte bu tür için push-to-start belirteci olan iOS 17.2+ cihaz yok; `register` çağrılmamış veya bildirim izni yok. |
| Update 422 `HS_NO_RECIPIENTS` | Etkinlik cihazda bitmiş ya da SDK güncelleme belirtecini henüz bildirmemiş. |
| Cihazda hiçbir şey olmuyor | Tür adı Swift tip adıyla aynı değil veya `ContentState` alanları şemayla uyuşmuyor. |
| Teslimat `failed` (`Unregistered`) | Belirteç geçersizleşti; Pushizo yalnızca bu belirteci siler, cihaz aboneliği etkilenmez. |

Bu sayfada