You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native集成OneSignal Live Activity:推送启动无响应问题排查

Live Activity推送启动无响应问题排查

问题详情

使用React Native + OneSignal开发Live Activity功能,代码启动Live Activity可正常工作,但通过推送启动时无任何反馈,OneSignal面板显示通知已成功送达,日志报错:

[DefaultLiveActivityAttributes] 创建Activity失败:NSCocoaErrorDomain (4865) 无法读取数据,因为数据缺失。

相关代码

React Native 初始化代码

OneSignal.initialize("*********");
OneSignal.LiveActivities.setupDefault();

Xcode Widget Extension 代码

import ActivityKit
import WidgetKit
import SwiftUI
import OneSignalLiveActivities

//Your struct name might be different here
struct WidgetExtensionLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: DefaultLiveActivityAttributes.self) { context in
            // Lock screen/banner UI goes here
            VStack {
                Spacer()
                Text("Title: ")
                Spacer()
                HStack {
                    Spacer()
                    Text( "Default Mesasdasdsage")
                    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 goes here.  Compose the expanded UI through
                // various regions, like leading/trailing/center/bottom
                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)
        }
    }
}

解决建议

  1. 校验推送Payload结构
    NSCocoaErrorDomain 4865本质是JSON解析失败,检查OneSignal推送的Payload是否完全符合Live Activity要求:

    • 必须包含aps字段,且aps下要有activity节点(用于启动/更新Live Activity)
    • activity中的data字段结构要与DefaultLiveActivityAttributes的状态类完全匹配,确保intValue、doubleValue、boolValue这些字段存在且类型正确
  2. 确认属性类一致性
    检查DefaultLiveActivityAttributes的定义是否正确,确保OneSignal的setupDefault()方法对应的默认属性类,与Widget Extension中ActivityConfiguration绑定的类是同一个,字段命名和类型完全一致。

  3. 检查Widget Extension配置

    • 确认Widget Extension的Info.plist中已添加NSExtensionActivationRule,并设置为适合Live Activity的规则
    • 确保Extension已开启ActivityKit权限,且主App和Extension的推送证书配置一致
  4. 手动测试Payload
    构造标准的Live Activity测试Payload,通过Xcode的推送模拟器发送到设备,验证是否能触发Live Activity,以此排除OneSignal后台的配置问题。

内容的提问来源于stack exchange,提问作者Melih Karadil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 07:16:11