HarmonyOS 鸿蒙Next怎么利用RouterPageInfo.pageId实现页面曝光和事件打点?

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next怎么利用RouterPageInfo.pageId实现页面曝光和事件打点? 之前在iOS中使用UIViewController+Log分类与objc_setAssociatedObject的形式。

将pageId和VC绑定,然后方法交换了viewDidAppear、viewDidDisappear。

实现每个VC实例持有一份pageId,然后曝光打点提取pageId。

extension UIViewController {
    
    @objc
    private func dxyer_logger_viewDidAppear(_ animated: Bool) {
        dxyer_logger_viewDidAppear(animated)
        dxy_logEnterPage()
    }
    
    @objc
    private func dxyer_logger_viewDidDisappear(_ animated: Bool) {
        dxyer_logger_viewDidDisappear(animated)
        dxy_logExitPage()
    }
    
    fileprivate struct AssociatedKeys {
        static var pageId = "dxy_pageId"
        
        static let lazySwizzling: Void = {
            Runtime.exchange(selector: #selector(UIViewController.viewDidAppear(_:)),
                             by: #selector(UIViewController.dxyer_logger_viewDidAppear(_:)),
                             class: UIViewController.self)
            
            Runtime.exchange(selector: #selector(UIViewController.viewDidDisappear(_:)),
                             by: #selector(UIViewController.dxyer_logger_viewDidDisappear(_:)),
                             class: UIViewController.self)
        }()
    }
    
}

extension UIViewController {
    
    // swiftlint:disable identifier_name
    @objc open var dxy_pageId: String? {
        get {
            return objc_getAssociatedObject(self, &AssociatedKeys.pageId) as? String
        }
        set {
            AssociatedKeys.lazySwizzling
            dxy_logExitPage()
            objc_setAssociatedObject(self, &AssociatedKeys.pageId, newValue, .OBJC_ASSOCIATION_COPY_NONATOMIC)
        }
    }
}

现在希望在鸿蒙上也实现一套打点方案。

鸿蒙OS Next API 12提供了RouterPageInfo.pageId,然鹅没有找到相关的使用案例。希望能提供一份,谢谢!!

但是呢~~

还是有一些问题:

这个pageId是否公开?

打点函数中提取pageId是否便捷?

使用this.constructor.name获取类名,进行map<类名,pageId>绑定,这套方案是否可行?

要考虑事件发生在其他页面,使用其他页面的pageId!!

跪求大佬提供思路或对应方案,膜拜感谢!!


更多关于HarmonyOS 鸿蒙Next怎么利用RouterPageInfo.pageId实现页面曝光和事件打点?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

没有提供pageId的案例,这个pageId是否公开?具体指的是什么,打点函数中提取pageId是否便捷?我觉得你可以先尝试之后提供Demo讨论讨论。

更多关于HarmonyOS 鸿蒙Next怎么利用RouterPageInfo.pageId实现页面曝光和事件打点?的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙系统中,利用RouterPageInfo.pageId实现页面曝光和事件打点,可以通过以下步骤进行:

  1. 获取Page ID: 在页面的生命周期方法(如onPageStartonPageVisible)中,通过系统提供的API获取当前页面的RouterPageInfo对象,并从中提取pageId。这个pageId是系统为每个页面生成的唯一标识。

  2. 页面曝光: 当页面变为可见状态时(如在onPageVisible回调中),使用获取到的pageId作为标识,将页面曝光事件上报到后端系统或数据分析平台。这通常涉及到发送一个包含pageId和时间戳等信息的网络请求。

  3. 事件打点: 对于页面内的用户交互事件(如点击、滑动等),在事件触发时同样使用pageId作为上下文信息,将事件详情上报。这有助于后端系统准确追踪用户在特定页面上的行为路径。

  4. 数据处理: 后端系统接收到上报的页面曝光和事件数据后,可以进行相应的处理和分析,如计算页面停留时间、用户行为路径分析等。

请注意,具体的实现细节可能因项目需求和后端系统架构而异。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html

回到顶部