首页 > 其他分享 >MobPush iOS SDK iOS实时活动

MobPush iOS SDK iOS实时活动

时间:2023-08-04 13:36:50浏览次数:46  
标签:await iOS current state let MobPush error LiveActivity SDK

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

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

功能说明

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

集成步骤

添加依赖库

ActivityKit.farework
SwiftUI.farework

MobPush iOS SDK iOS实时活动_开发者

配置⼯程⽀持 LiveActivity

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

MobPush iOS SDK iOS实时活动_示例代码_02

添加实时活动扩展

MobPush iOS SDK iOS实时活动_UI_03

MobPush iOS SDK iOS实时活动_UI_04

添加扩展项目依赖库

MobPush iOS SDK iOS实时活动_示例代码_05

UI实现

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

MobPush iOS SDK iOS实时活动_示例代码_06

MobPush iOS SDK iOS实时活动_示例代码_07

实时活动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)
            }
        }
    }

标签:await,iOS,current,state,let,MobPush,error,LiveActivity,SDK
From: https://blog.51cto.com/u_14192352/6960318

相关文章

  • ios系统苹果手机如何跟安卓一样开启微信分身
    iOS(iPhone操作系统)是由苹果公司开发的移动操作系统,主要用于iPhone、iPad、iPodTouch等设备。iOS在安全性方面非常重视,采用了多层次的安全措施,包括设备加密、应用沙盒、TouchID(指纹识别)和FaceID(面部识别)等功能,以保护用户的数据和隐私。同时腾讯对苹果手机的微信分身一直也没啥......
  • uniapp 使用camera组件IOS圆角不生效问题
    <viewclass="cameraViewgui-margin-top"><cameraclass="camera-box"device-position="front"flash="off"></camera></view>.cameraView{width:600rpx;height:600rpx;border-radius:50%;bord......
  • 实时美颜在直播应用中的技术突破:探索直播实时美颜SDK的实现
    目前,实时美颜技术在直播应用中变得尤为重要。下文小编将为大家分析下具体原因: 一、实时美颜技术的背后实时美颜技术是一种将美化效果应用于视频流的处理技术,其目的是使主播在直播过程中呈现更加美观的外观,包括皮肤光滑、磨皮、磨角等效果。传统的美颜处理通常依赖于离线处理,但在直......
  • Capturing Video on iOS iOS拍摄视频的方法总结
    https://www.objc.io/issues/23-video/capturing-video/With processing powerandcamerahardwareimprovingwitheverynewrelease,usingiPhonestocapturevideoisgettingmoreandmoreinteresting.They’resmall,light,andinconspicuous,andthequalityg......
  • IOS自动化—将WDA打包ipa批量安装驱动
    文章目录前言必要条件为何做这个一、下载WebDriverAgent二、进行打包WDA.ipa1、指定xcode运行路径报错解决一:pathdoesnotexist报错解决二:notcontainanXcodeproject,workspaceorpackage.2、按步骤执行命令第一步第二步第三步三、安装ipa文件下载tidevice安装四、启动WebD......
  • ios自动化-Xcode、WebDriverAgent环境部署
    环境准备:Mac电脑一台(更新到最新的macOS,此文档使用的为macOS12.3.1,Intel芯片)Xcode最新稳定版(此文档使用的为13.4.1)IOS设备(此文档使用了10.3.3-15.1均有,且都安装WebDriverAgent成功)保证自己电脑有大于25G的可用内存空间,Xcode很大!Xcode下载https://developer.apple.com/xcode/r......
  • iOS企业签名掉签,iOS企业签名掉签了怎么办?
    不能上架到AppStore的iOS应用,几乎每一个开发者的选择都是通过iOS签名这种内测渠道来完成APP的上架任务,最常用的就是企业签名、超级签名以及TF上架,其中最受欢迎的当属于企业签名了。不过企业签名会出现掉签的现象,那么企业签名掉签了该如何处理呢?今天小驰就来分享下关于签名掉签的......
  • minio python sdk使用
    如下fromminioimportMiniofromminio.errorimportS3Errorimportlogginglogging.basicConfig(filename='logs/myProgramLog.log',level=logging.INFO,format='%(asctime)s-%(levelname)s-%(message)s')classBucket......
  • iOS float类型不精确
    如floatx=0.01999999999用nslog输出是0.02例:要求对2个值进行0.02的超差判定  第一次:   if abs(FieldByName(x[0]).AsFloat -FieldByName(x[1]).AsFloat) >0.02 then     showmessage('超差');          问题出现:>号......
  • LinphoneSDK v 5.2.94 使用方法
    前提vs2022 wpfLinphoneSDK的获取途径有两种1 下载 linphonesdk.5.2.94.nupkghttps://gitlab.linphone.org/BC/public/linphone-sdk/-/packages/然后引用 这里是没有dll的,只是引用了LinphoneWrapper.cs2 下载zip包https://download.linphone.org/releases/windows/sd......