iOS 小组件研究

1、设备只支持iPhone,并且是有“药丸屏”的iPhone14Pro和14Pro Max上; 2、Max系统版本、编译器及iOS系统版本:>=MacOS12.4、>=Xcode14.0+beta4、>=iOS16.1+beta; 3、使用 ActivityKit 用于配置、开始、更新、结束实现 Live Activity 能力。使用 WidgetKit 、SwiftUI 在widget 小组件中创建 Live Activity 的用户界面,这样小组件和 Live Activity 的代码是可以共享; 4、Live Activity 目前只能通过 ActivityKit 从主工程获取数据,或者从 远程通知 获取最新数据;无法访问网络或者接受位置更新信息 5、 ActivityKit 和 远程通知推送 更新的数据不能超过4KB; 6、Live Activity 可以给不同的控制绑定不同的 deeplink,使其跳转到不同的页面; 7、Live Activity 在用户主动结束前最多存活8小时; 8、已经结束的 Live Activity 在锁屏也最多保留4小时,所以一个 Live Activity 最长可以停留12小时; 9、最多同时存在两组 Live Activity ,排列顺序待发现

作者:HarryDeng 链接:https://juejin.cn/post/7153236337074634788 来源:稀土掘金 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

https://zhuanlan.zhihu.com/p/661980240

通过 File——new——WidgetExtension创建小组件子工程。 创建完小组件 Target 后会有三个文件: MyWidgetBundle 是小组件的代码入口文件 MyWidget 是主要的小组件代码文件 Assets 存放小组件需要用的资源

然后打开 MyWidget.swift 文件,这个文件中总共分为 5 个部分:

struct Provider 负责为小组件提供数据 struct SimpleEntry 小组件的数据模型 struct MyWidgetEntryView 小组件的视图 struct MyWidget 小组件的配置部分 struct MyWidget_Previews 提供小组件在 Xcode 中的预览

小组件类型

默认为 小 中 大 三种类型。 在 iOS 16 中,WidgetFamily 新增了 3 种新的类型来支持锁屏小组件:

accessoryCircular:圆形小组件,可以在 watchOS 中的复杂功能出现,也可以用在 iPhone 和 iPad 的锁定屏幕上,手机上 iOS 16 以上支持,但在 iPad 上需要 iPad OS 17 以上才支持。 accessoryRectangular:矩形小组件,可以显示进度视图、仪表之类的 accessoryInline:內联小组件,只能显示文本,对于较长的内容很有用

https://zhuanlan.zhihu.com/p/661980685

小组件的刷新频率 前面介绍了时间线的更新策略,但 iOS 系统真的会按照我们设定的时间线来更新吗?答案是不一定!

因为假设你设置时间线每秒钟刷新一次数据,会加重系统的负担,所以苹果对于小组件的刷新频率增加了一些限制,以 24 小时为一个周期,每天能刷新多少次取决于三个条件:

小组件向用户进行显示的频率和次数。 小组件的上次重新载入时间。 小组件的包含 App 是否处于活跃状态。 对于用户经常查看的小组件,每日最大的刷新次数为 40 到 70 次,大致换算为每 15 到 60 分钟重载一次小组件。

文章目录 iOS 小组件开发第十二篇:iOS 17 适配

信息通讯 IOS手把手轻松实现灵动岛(Live activity) - 简书 (jianshu.com) Live activity也支持远程推送更新,根据文档以下9点要求实现(Activity远程通知每小时有通知预算<数量未明确>,超出后系统将关闭通知)

  1. 确保主程序已经开通了远程推送功能

  2. _确保启动activity时request(attributes:contentState:pushType:)传入pushType参数(.token)

  3. 获取启动后的activity的推送令牌pushToken,传给服务端用来推送更新activity

  4. 服务端推送的更新内容字段需要和ActivityAttributes的ContentState 中定义的动态数据字段对应

  5. 设置推送的报头apns-push-type的值为liveactivity

  6. 设置推送的报头apns-topic的值为.push-type.liveactivity

    • 正确的推送对应的内容和状态

    • 使用pushTokenUpdates监听pushToken变化,如有变化,就令牌失效,需要将新的令牌传给服务器

    • 当Activity结束时,服务器端的pushToken将失效

  7. 作者:OC蜗牛链接:https://www.jianshu.com/p/10541a43010c来源:简书著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。