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

使用live_activities Flutter插件启动iOS Live Activity时遭遇PlatformException错误求助

live_activities Flutter插件启动iOS Live Activity时遭遇PlatformException错误求助

我之前用live_activities插件时也碰到过一模一样的错误,折腾了好一阵才解决,结合自己的踩坑经验给你几个精准的排查方向:


1. 先盯紧Widget Extension的配置细节

很多时候问题出在Widget Extension的关联和配置上,这是最容易踩漏的点:

  • 确保Widget Extension的Bundle ID是主App Bundle ID的后缀形式,比如主App是com.yourteam.yourapp,Widget就得是com.yourteam.yourapp.LiveActivityWidget,而且两者的Deployment Target必须统一为iOS 16.2或更高。
  • 检查Widget Extension的Info.plist,除了NSSupportsLiveActivities设为YES,还要确认NSExtension字典的配置:
    <key>NSExtension</key>
    <dict>
        <key>NSExtensionPointIdentifier</key>
        <string>com.apple.widgetkit-extension</string>
        <key>NSExtensionPrincipalClass</key>
        <string>$(PRODUCT_MODULE_NAME).LiveActivityWidget</string>
    </dict>
    
    这里的NSExtensionPrincipalClass必须指向你Swift文件里的Widget类,用$(PRODUCT_MODULE_NAME)可以避免硬编码模块名出错。
  • 还要去主App target的「General」标签下,在「Embedded Binaries」里把你的Widget Extension加进去——这步很容易忘,系统找不到Widget的话直接就会报输入错误0。

2. 验证Activity Attributes与Flutter数据的匹配度

com.apple.ActivityKit.ActivityInput error 0很大概率是数据不匹配导致的:

  • 在Swift的Widget Extension里,你的ActivityAttributes子类必须严格实现Codable协议,而且ContentState的字段要和Flutter端传递的data完全对应。举个正确的示例:
    import ActivityKit
    import WidgetKit
    import SwiftUI
    
    struct LiveActivityAttributes: ActivityAttributes, Codable {
        public struct ContentState: Codable, Hashable {
            // 这些字段要和Flutter端传的key完全一致
            var eventName: String
            var progress: Double
        }
    }
    
  • Flutter端启动时,传递的data不能有类型错误,比如把数字传成字符串、漏传必填字段。你可以先简化数据,只传一个字符串测试:
    final activityId = await _liveActivitiesPlugin.createActivity(
      data: {"eventName": "测试活动"},
      type: "LiveActivityAttributes", // 必须和Swift里的Attributes类名一致
    );
    

3. 权限配置的两个容易忽略的点

虽然你已经加了推送权限,但还有两个细节:

  • Widget Extension也需要开启Push Notifications能力!别只给主App加,去Xcode的Widget Extension target的「Signing & Capabilities」里把这个加上。
  • 主App的Info.plist里必须添加NSUserNotificationsUsageDescription,描述你的App使用通知的用途,不然系统可能会默默拒绝权限请求,导致Live Activity启动失败。

4. 启动时机的坑

别在App刚启动就立刻调用启动Live Activity的方法:

  • 必须等用户授予了时间敏感通知权限之后再执行。请求权限时要明确加上timeSensitive: true:
    final NotificationSettings settings = await FirebaseMessaging.instance.requestPermission(
      alert: true,
      badge: true,
      sound: true,
      timeSensitive: true, // 这个是Live Activity必需的
    );
    
  • 最好把启动逻辑放在用户主动触发的操作里(比如点击一个“启动活动”按钮),或者在权限请求成功的回调里执行,避免系统还没完成初始化就调用方法报错。

如果以上排查都没问题,你可以尝试清理Xcode的DerivedData,重新编译主App和Widget Extension,有时候缓存也会导致奇怪的错误。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 10:53:01