iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

作者:京东零售 姜海

灵动岛是苹果在iPhone 14 Pro和iPhone 14 Pro Max上首次提出的全新UI交互形式,创新性的让虚拟软件和硬件的交互变得更为流畅。当有来电、短信等通知时,灵动岛会变化形态,以便让用户能够更直观地接收到这些信息。

而在用户使用一些应用App,比如音乐,并将其切换到后台时,灵动岛也能以另一种形态来显示这些软件,还可以通过轻点,重按等来实现的操作,比如切换歌曲。

苹果在iOS16.1系统对第三方开放了灵动岛的API,并允许开发者基于灵动岛开发相应软件,越来越多的APP开始基于灵动岛的交互进行设计和开发,本文将简单介绍灵动岛开发的流程和将其与业务场景相结合的思考。

接入灵动岛

如果项目之前开发过widget小组件,已经添加过Widget Extension,并有WidgetBundle文件,那么可以直接基于其进行扩展开发。但要注意的是,灵动岛开发用到的是Live Activity,主要包括锁屏通知,顶部通知等样式:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

而并不是widget开发用到的Time Line形式,两者在UI形态上基本毫无关系,只是需要在WidgetBundle中实例化。如果之前没有开发过widget,可以参见另一篇文章:《Widget开发以及动态配置

首先给工程添加Widget Extension:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

勾选Live Activity:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

建立Extension以后,系统会自动生成三个文件,除了widget开发用到的TimeLine相关内容的文件和WidgetBundle文件外,还会生成一个专门用来开发灵动岛Live Activity的文件:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

文件中已经自动生成了部分代码大纲,可以直接查看效果并基于其上进行开发:

struct DJDynamicIslandAdvanceLiveActivity: Widget {
    var body: some WidgetConfiguration {
        ActivityConfiguration(for: DJDynamicIslandAdvanceAttributes.self) { context in
            // Lock screen/banner UI goes here
            VStack {
                Text("Hello")
            }
            .activityBackgroundTint(Color.cyan)
            .activitySystemActionForegroundColor(Color.red)

        } dynamicIsland: { context in
            DynamicIsland {
                // 点击灵动岛后展开的样式
                // various regions, like leading/trailing/center/bottom
                DynamicIslandExpandedRegion(.leading) {
                    Text("Leading")
                }
                DynamicIslandExpandedRegion(.trailing) {
                    Text("Trailing")
                }
                DynamicIslandExpandedRegion(.center) {
                    Text("Center")
                }
                DynamicIslandExpandedRegion(.bottom) {
                    Text("Bottom")
                    // more content
                }
            } compactLeading: {
                // compact模式(长条样式)左侧内容,一般放icon
                Text("compactLeading")
            } compactTrailing: {
                // compact模式(长条样式)右侧内容,一般放描述文案
                Text("compactTrailing")
            } minimal: {
                // minimal模式(其他APP挤占后的圆圈样式)
                Text("minimal")
            }
            .widgetURL(URL(string: "http://www.apple.com"))
            .keylineTint(Color.red)
        }
    }
}

同时需要在info.plist中添加对Live Activity的支持,在TARGETS - Info - Custom iOS Target Properties中添加NSSupportsLiveActivities并设置为YES:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

不同展示样式

灵动岛主要包括三种展示样式:

灵动岛被重按后,展开的完整模式(expanded)

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

此模式分为Leading、Trailing、Center和Bottom四个部分,在系统自动为我们生成的代码中,ActivityConfiguration的dynamicIsland中可以分别找到对应控制的代码段:

dynamicIsland: { context in
            DynamicIsland {
                // 点击灵动岛后展开的样式
                // various regions, like leading/trailing/center/bottom
                DynamicIslandExpandedRegion(.leading) {
                    Text("Leading")
                }
                DynamicIslandExpandedRegion(.trailing) {
                    Text("Trailing")
                }
                DynamicIslandExpandedRegion(.center) {
                    Text("Center")
                }
                DynamicIslandExpandedRegion(.bottom) {
                    Text("Bottom")
                    // more content
                }
            }

APP切后台后的长条形展示样式(compact)

此形式分为两个部分:左边的Leading,一般用于放图片icon等;右边的Trailing,一般用与放置文案描述

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

在系统自动为我们生成的代码中,ActivityConfiguration的dynamicIsland部分分别对应compactLeading和compactTrailing,可以在其中编写我们想要的UI展示:

compactLeading: {
                // compact模式(长条样式)左侧内容,一般放icon
                Text("compactLeading")
            } compactTrailing: {
                // compact模式(长条样式)右侧内容,一般放描述文案
                Text("compactTrailing")
            } 

其他APP切后台时,变化为灵动岛将本app挤占后展示的圆点模式(minimal)

此形势一般用于放置图标icon或动态图等

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

在系ActivityConfiguration的dynamicIsland部分对应minimal,可以在其中编写我们想要的UI展示

minimal: {
                // minimal模式(其他APP挤占后的圆圈样式)
                Text("minimal")
            }

动态数据更新

上文说灵动岛视图布局是在ActivityConfiguration中编写的,而其上的数据更新依靠的是ActivityAttributes对象。需要注意的是,ActivityAttributes不需要跟ActivityConfiguration写在一起,就像view不需要跟model写在一起一样。

苹果官方建议ActivityAttributes分为两部分:固定不变的属性(比如总数,订单号等等)和会动态变化的属性(比如配送员名称,配送时间等等)。官方给出的demo是披萨配送的app,我们可以参考它的Attributes声明规则:

struct PizzaDeliveryAttributes: ActivityAttributes {
    public typealias PizzaDeliveryStatus = ContentState

    public struct ContentState: Codable, Hashable {
        var driverName: String
        var deliveryTimer: ClosedRange<Date>
    }

    var numberOfPizzas: Int
    var totalAmount: String
    var orderNumber: String
}

其中ContentState是会动态改变的部分。在完成布局编写后,实际的工程应用当中可以调用Activity对象的各种方法对灵动岛进行操作,包括开启,更新和关闭:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

调用Activity.request成功开启灵动岛后,将APP切到后台,就可以看到效果了,调用request以及Activity里每一个activity的update方法,都可以触发ActivityConfiguration的闭包调用,从它回掉的context可以获取到Attributes的数据内容,比如context.state.deliveryManName和context.attributes.totalAmount:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

与到家业务结合的思考

灵动岛提供了一种全新的“通知交互”形式,不再是单调的一个横幅或者提示框,而是一个实时显示,动态更新的UI,就像他的名字“Live Activity”一样,是一场“直播”。

对灵动岛的适配被形象地称为“登岛”,针对到家的业务场景,我们也做了一系列思考,最适用的业务场景也是下单后订单状态的实时更新“直播”,并且编写了Demo展示:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

灵动岛挂件

灵动岛挂件是我们提出的另一种非常有意思的灵动岛应用。

首先,灵动岛的各项UI数据如下:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

经过精确布局,可以在灵动岛上动态的展示一个会动的挂件,就像在灵动岛上养了一只可爱的宠物:

iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践

我们会持续跟进最新的灵动岛技术动态,并且探索其他实用灵动岛的业务场景,利用这项技术带来更多的流量和利益点

原文链接:https://www.cnblogs.com/jingdongkeji/p/17308851.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iOS16新特性 | 灵动岛适配开发与到家业务场景结合的探索实践 - Python技术站

(0)
上一篇 2023年4月17日
下一篇 2023年4月17日

相关文章

  • 线上FullGC问题排查实践——手把手教你排查线上问题

    作者:京东科技 韩国凯 一、问题发现与排查 1.1 找到问题原因 问题起因是我们收到了jdos的容器CPU告警,CPU使用率已经达到104% 观察该机器日志发现,此时有很多线程在执行跑批任务。正常来说,跑批任务是低CPU高内存型,所以此时考虑是FullGC引起的大量CPU占用(之前有类似情况,告知用户后重启应用后解决问题)。 通过泰山查看该机器内存使用情况:…

    Java 2023年5月5日
    00
  • AI降临,前端启用面壁计划

    作者:京东零售 郑炳懿 开篇: “在我们有生之年,你觉得会看到AI兵临城下的那一天吗?就像电影黑客帝国里面演的一样”,Barry从红色的烟盒里取出一根烟发问道。 “不可能!我觉得AI再强,那也是人类发明的,电影过分魔幻化了,”Woody深吸了一口烟,吐着烟圈道。 “有生之年是够呛了,我们这一代估计是看不到那一天的!”一旁玩手机的Jim如是道。 ————— 在…

    人工智能概论 2023年4月24日
    00
  • csm移动端h5用什么样的视觉方案?

    项目需要求在移动端H5需要展示一些数据统计的图表,虽然第一时间想到的是echarts,常用还有Highcharts,D3等,antv家族的图表UI好看一些,再加上F2是移动端可视化方案于是就选择F2,打开官网果然眼前一亮F2提供的正能满足需求,F2官网地址:https://antv.alipay.com/zh-cn/f2/3.x/demo/index.htm…

    IOS 2023年4月18日
    00
  • 应用部署引起上游服务抖动问题分析及优化实践方案

    作者:京东物流 朱永昌 背景介绍 本文主要围绕应用部署引起上游服务抖动问题展开,结合百川分流系统实例,提供分析、解决思路,并提供一套切实可行的实践方案。 百川分流系统作为交易订单中心的专用网关,为交易订单中心提供统一的对外标准服务(包括接单、修改、取消、回传等),对内则基于配置规则将流量分发到不同业务线的应用上。随着越来越多的流量切入百川系统,因系统部署引起…

    Java 2023年4月17日
    00
  • Xcode 工程分析

    1. 背景 Xcode作为日常开发iOS程序的IDE,支持C、C++、Objective-C、Swift、Ruby等语言进行编写。日常开发入口就是Xcode workspace或者Xcode project。 workspace是一个Xcode文档,它将项目和其他文件、project分组。一个workspace可以包含任意数量的Xcode project,以…

    IOS 2023年4月17日
    00
  • iOS上架app store下载步骤

    1、安装iOS上架辅助软件Appuploader 2、申请iOS发布证书(p12) 3、申请iOS发布描述文件(mobileprovision) 4、打包ipa 5、上传ipa到iTunes Connect 6、TestFlight方式安装到苹果手机测试 7、设置APP各项信息提交审核 一、下载安装iOS上架辅助软件Appuploader Appupload…

    IOS 2023年4月18日
    00
  • Uniapp进行APP打包——iOS 系统

    一、打包过程 1、创建唯一标识符 首先,申请苹果开发者账号。 没有苹果开发者账号是无法进行 ios 打包上线的。 (2) 进入 https://developer.apple.com 这个网址,点击“account” 并输入苹果开发者账号进入用户界面。 ​   (3) 点击证书文件 ​   (4) 进入到这界面以后, 点击“APP IDs”,并新建一个 AP…

    IOS 2023年4月18日
    00
  • ios animation 动画学习总结

    目录 一、前言 二、UIView Animation 2.1 简单动画 2.2 关键帧动画 2.3 View 的转换 三、CALayer Animation 一、前言 动画一直是 iOS 开发中很重要的一部分。设计良好,效果炫酷的动画往往能对用户体验的提升起到很大的作用,在这里将自己学习 iOS 动画的体会记录下来,希望能对别人有所帮助。 iOS 的动画框架…

    IOS 2023年4月18日
    00
合作推广
合作推广
分享本页
返回顶部