0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MobPush iOS SDK iOS实时活动

MobTech科技派 来源:MobTech科技派 作者:MobTech科技派 2023-08-04 11:33 次阅读

开发工具:Xcode 功能需要: SwiftUI实现UI页面,iOS16.1以上系统使用

功能使用: 需应用为启动状态

功能说明

iOS16.1 系统支持实时活动功能,可以在锁定屏幕上实时获知各种事情的进展,MobPushSDK iOS 4.0.3版本已完成适配,可根据文档对应使用。

集成步骤

添加依赖库

ActivityKit.farework
SwiftUI.farework

afbfdd7bbcea26733d803dff7c21d10d.JPG

配置⼯程⽀持 LiveActivity

在主⼯程的 Info.plist ⽂件中添加⼀个键值对,key 为 NSSupportsLiveActivities,value 为 YES

image.png

添加实时活动扩展

6222eaba0b0a93c4e523fa4a52f9b1b5.JPG

ea12cbf09bb713fb602ef8160fad2f6e.JPG

添加扩展项目依赖库

11e648e0ce5d0755dff35c3d9208a24c.JPG

UI实现

实时活动UI需开发者自行实现,可参考Demo处理,注意需将扩展的UI组件引用到主项目上

ce274c9739c7e000e4abc3a2b99225b2.JPG

296f9712c9ed9fc8b4d34f61a288db27.JPG

实时活动API

上传实时活动token registerLiveActivityWithID()

示例代码:

/*!
 * @abstract 注册LiveActivity并上报PushToken
 * 在PushToken更新时,需同步调用该接口
 * 在LiveActivity结束时,需同步调用该接口,PushToken为nil
 *
 * @param liveActivityId 标识某一个LiveActivity
 * @param pushToken 对应LiveActivity的PushToken
 * @param handler 结果回调
 */
 [MobPush registerLiveActivityWithID:@"mpLiveActivity"
                                          pushToken:token
                                         completion:^(NSError *error) {
                    if (error) {
                        NSLog(@"Register LiveActivity Failed: %@", error.localizedDescription);
                    }
                }];
            }

活动开始startActivity()

示例代码:

static public func startActivity(pushTokenUpdate:@escaping (Bool, Data?)- >Void) {
        guard ActivityAuthorizationInfo().areActivitiesEnabled else {
            //不可用
            pushTokenUpdate(false, nil)
            //监听可用状态
//            for await enablment in ActivityAuthorizationInfo().activityEnablementUpdates {
//                print("Activity AuthorizationInfo change to (enablment)")
//            }
            return
        }

        endPreActivity()

        let state = HeartNoteLiveActivitsLiveAttributes.ContentState(prograssState: .Car)
        let attri = HeartNoteLiveActivitsLiveAttributes(name: "MPLiveActivities")
        do {
            let current = try Activity.request(attributes: attri, contentState: state, pushType: .token)
            Task {
                for await tokenData in current.pushTokenUpdates {
                    //监听token更新 注意线程
                    pushTokenUpdate(true, tokenData)
                }
            }
            Task {
                for await state in current.contentStateUpdates {
                    //监听state状态 开发者可自行编写回调监听
                    print("1content state update: tip=(state.prograssState)")
                }
            }
            Task {
                //监听activity状态 开发者可自行编写回调监听
                for await state in current.activityStateUpdates {
                    print("activity state update: tip=(state) id:(current.id)")
                }
            }
        } catch(let error) {
            print("error=",error)
            pushTokenUpdate(false, nil)
        }
    }

更新Activity状态updateActivityState()

static public func updateActivityState(_ value: Int) {
        Task {
            guard let current = Activity< HeartNoteLiveActivitsLiveAttributes >.activities.first else {
                return
            }

            let state = HeartNoteLiveActivitsLiveAttributes.ContentState(prograssState: PrograssState(rawValue: value) ?? .Arrived)
            let alertConfiguration = AlertConfiguration(title: "Delivery Update ", body: "Delivery Update State to (state.prograssState.rawValue)", sound: .default)
            await current.update(using: state, alertConfiguration: alertConfiguration)
        }
    }

关闭Activity状态endPreActivity()

//建议关闭应用的时候要关闭 不然下次启动就脱离控制了
    static public func endPreActivity() {
        let activities = Activity< HeartNoteLiveActivitsLiveAttributes >.activities.filter { act in
            return act.activityState == .active
        }
        guard activities.count  > 0 else { return }
        for item in activities {
            Task {
//                print("end activity (item.id)")
                await item.end(dismissalPolicy:.immediate)
            }
        }
    }

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • iOS
    iOS
    +关注

    关注

    8

    文章

    3393

    浏览量

    150481
  • SDK
    SDK
    +关注

    关注

    3

    文章

    1030

    浏览量

    45812
收藏 人收藏

    评论

    相关推荐

    跨Android、iOS、鸿蒙多平台框架ArkUI-X

    在Android、iOS、鸿蒙多个平台上提供生动而流畅的用户界面体验。 一、配套关系 表1 版本软件和平台配套关系 目标平台 项目编译使用OS SDK版本 备注 OpenHarmony 4.0 (API
    的头像 发表于 01-31 14:52 1746次阅读
    跨Android、<b class='flag-5'>iOS</b>、鸿蒙多平台框架ArkUI-X

    EspTouch for IOS V3.0为什么配置不了ESP8266?

    ESP8266固件版本: SDK version:1.0.1 IOT VERSION = v1.0.2t45772(a) TYPE: ESPTOUCH V1.4 espTouch for IOS
    发表于 07-15 08:16

    #硬声创作季 09_IOS应用(IOS环境搭建)

    iOS移动开发
    Mr_haohao
    发布于 :2022年09月03日 15:49:42

    iOS版谷歌地图正式上架 定位准可语音导航

    。Thenextweb 表示:“ iOS 版谷歌地图应用能允许用户使用语音同步驾车导航,获得全球范围内的实时交通信息。目前这款应用正在极力上线其它国家的App Store ,因此美国或部分地区以外的用户或许仍需耐心等待(目前中国地区已可下载)。”
    发表于 12-15 10:36

    iOS7变化不大 iOS8将很有趣

    据《商业内幕》网站分析认为。虽然主导苹果iPhone开发的斯科特•福斯代尔(Scott Forstall)去年11月离职。但基于已经规划好的开发计划和时间线,苹果下一代操作系统iOS 7不会有
    发表于 03-18 14:11

    ios人才

    猎头推荐职位:世界某知名企业:IOS应用软件开发工程师,地点:深圳南山,要求:有2年以上的IOS应用软件开发经验及本科以上学历背景,请有兴趣者立即联系本人Eva,QQ:2724316257私聊!
    发表于 11-04 11:52

    iOS系统内核阐述

    深入浅出iOS系统内核(3)— 内存管理
    发表于 05-15 16:55

    BLE_RTC limited to IOS?

    比较了iOS和Android,PoS4xBulyRTC的例子显示了不同的结果。 几乎在iOS中运行。它们的功能运行良好,但在Android中,UART中的字符串导致字符破损。和 在连接过程中。几乎
    发表于 10-10 08:17

    iOS网页设计的关键考虑因素是什么?

    iOS 设计时最重要的细节是确保网站响应迅速并针对移动设备进行优化,注意用户界面和导航,结合 iOS 特定功能,并在不同的 iOS 设备和版本之间进行全面测试。
    发表于 05-25 07:24

    九年时间:苹果iOS SDK双赢历程

    九年前,苹果发布了iOS SDK,也就是我们经常说的开发工具包,iOS SDK的发布让第三方开发者可以构建iPhone与iPod touch的原生应用程序,在iTunes App St
    发表于 03-08 14:26 996次阅读

    苹果发布通知称,任何提交的 app 更新必须兼容 iOS 11 SDK

    苹果今天通知广大 iOS 开发者,将从今年 7 月份开始,任何提交的 app 更新必须兼容 iOS 11 SDK,而且也必须支持 iPhone X 的 Super Retina 屏幕。
    的头像 发表于 06-12 14:46 3488次阅读
    苹果发布通知称,任何提交的 app 更新必须兼容 <b class='flag-5'>iOS</b> 11 <b class='flag-5'>SDK</b>

    Respoke SDK for iOS Respoke的iOS SDKs

    ./oschina_soft/respoke-sdk-ios.zip
    发表于 06-28 11:14 0次下载
    Respoke <b class='flag-5'>SDK</b> for <b class='flag-5'>iOS</b> Respoke的<b class='flag-5'>iOS</b> SDKs

    MobPush iOSSDK API推送配置方法

    MobPush是MobTech推出的一款免费的推送服务工具,集成方便简单快捷,且提供完整的可视化数据和强大的管理后台。本文将详细介绍ios端推送配置方法。
    的头像 发表于 08-16 12:17 1070次阅读
    <b class='flag-5'>MobPush</b> <b class='flag-5'>iOS</b>端<b class='flag-5'>SDK</b> API推送配置方法

    苹果发布iPhone14灵动岛的“实时活动”设计指南

      苹果的iOS 16.1目前正在测试中,其中包括对实时活动API的支持。该API允许开发人员向锁屏或智能岛添加实时通知。随着iOS 16.
    的头像 发表于 09-27 10:55 4202次阅读

    MobPush:Android SDK 集成指南

    MobPush是一款旨在提供一站式解决方案的智能推送开发者工具,可以有效提高用户参与度和粘性,从而带来更多的业务效益,以下是最新版MobPush: Android SDK集成指南。
    的头像 发表于 02-02 15:51 643次阅读
    <b class='flag-5'>MobPush</b>:Android <b class='flag-5'>SDK</b> 集成指南