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) } } }
解决建议
校验推送Payload结构
NSCocoaErrorDomain 4865本质是JSON解析失败,检查OneSignal推送的Payload是否完全符合Live Activity要求:- 必须包含
aps字段,且aps下要有activity节点(用于启动/更新Live Activity) activity中的data字段结构要与DefaultLiveActivityAttributes的状态类完全匹配,确保intValue、doubleValue、boolValue这些字段存在且类型正确
- 必须包含
确认属性类一致性
检查DefaultLiveActivityAttributes的定义是否正确,确保OneSignal的setupDefault()方法对应的默认属性类,与Widget Extension中ActivityConfiguration绑定的类是同一个,字段命名和类型完全一致。检查Widget Extension配置
- 确认Widget Extension的
Info.plist中已添加NSExtensionActivationRule,并设置为适合Live Activity的规则 - 确保Extension已开启ActivityKit权限,且主App和Extension的推送证书配置一致
- 确认Widget Extension的
手动测试Payload
构造标准的Live Activity测试Payload,通过Xcode的推送模拟器发送到设备,验证是否能触发Live Activity,以此排除OneSignal后台的配置问题。
内容的提问来源于stack exchange,提问作者Melih Karadil
相关产品推荐
相关产品推荐

