"authorization: bearer ${apnsJwt}" \ -H "apns-topic: ${bundleId}.push-type.liveactivity" \ -H "apns-push-type: liveactivity" \ -H "apns-priority: 10" \ -H "apns-expiration: 0" \ -H "content-type: application/json" \ --data-binary @- <<JSON { "aps": { "timestamp": $(date +%s), "event": “start", # start / update / end "attributes-type": "EewLiveActivityAttributes", "attributes": { # 静的データ部分 4. iOSアプリ側の実装 iOS 利用者端末 Widget Service Extension • 実装の前に... • 全体構造について App Swiftの世界 Dartの世界 "id": "${activityId}", "eventId": "${eventId}" やらないといけないことは }, "input-push-channel": “${channelId}", # Broadcast Push Notification Channel "alert": { "title": "【テスト】緊急地震速報", 1. Push-to-start tokenの取得と保存 APNs Cloudflare 2. 緊急地震速報発表時のペイロード送信 "body": "千葉県東方沖で地震 千葉県で強い揺れ", "sound": "default" }, "content-state": { # 動的データ部分 EQMonitor Backend "eventId": "${eventId}", "type": "eew", "headline": "千葉県東方沖で地震 千葉県で強い揺れ", notification-sender notification-sender notification-sender 通知配信 通知配信 通知配信 "hypocenterName": "千葉県東方沖", "magnitude": 5.8, "depth": 30, "time": "${originTime}", "isOriginTime": true, "maxIntensity": "5-", "serialNo": 1, "isFinal": false, "isWarning": true, "isCanceled": false, "isPlum": false, "isLevel": false, "isOnePoint": false, "location": { "regionName": "千葉県北東部", "forecastIntensity": "5-", "isWarning": true valkey インメモリDB 53 notification-resolver 通知配信ペイロード 作成 eqmonitor-api API PostgreSQL RDB