解决方案:神策分析 iOS SDK 代码埋点解析

优采云 发布时间: 2022-11-30 18:25

  解决方案:神策分析 iOS SDK 代码埋点解析

  一、简介

  所谓埋点是数据采集领域(尤其是用户行为数据采集领域)的一个术语,是指对特定用户行为或事件进行捕获、处理和发送的相关技术和实现过程。有针对性的运营方案提供数据支持。

  点埋的本质是首先对软件应用运行过程中的关键节点进行监控,在需要关注的事件发生时进行判断和捕捉,获取必要的上下文信息,最后将信息整理后发送给指定的服务器。

  Sensors Analysis iOS SDK 是适用于 iOS 的轻量级数据采集

和跟踪 SDK。神策分析iOS SDK不仅具备埋码功能,还在运行时机制(Runtime)中利用相关技术实现了iOS端的全埋码(无埋码、*敏*感*词*埋码、无痕埋码、自动埋码),点击地图、可视化所有埋点等功能。

  其中代码埋点是最基本也是最重要的埋点方式,适用于需要精确控制埋点位置、灵活自定义事件和属性等精细化需求的场景。下面详细介绍神策分析iOS SDK代码埋点,希望能为大家提供一些参考。

  2、实现原理

  在介绍代码埋点的实现原理之前,我们先来看一下完整的数据采集过程。我希望你能理解代码埋点在数据采集

过程中的作用。

  2.1 数据采集

过程

  数据采集​​过程主要包括事件采集、添加属性、事件入库、读取上报等过程。详细步骤如下:

  在产品和服务转化的一些关键点,调用埋点相关接口采集事件;

  获取有意义的属性,丰富事件,保证数据的广度和深度;

  数据采集​​完成后,转换成标准的JSON数据格式,以队列的形式存储在SDK的数据库中;

  定时读取数据库中的数据,封装请求和上报数据,上报成功后删除数据库中存储的上报数据。

  总体流程如图2-1所示:

  图 2-1 数据采集流程图

  从图中可以看出,代码埋点位于数据采集过程的第一步,是数据采集过程中最关键的一步。数据采集​​是否丰富、准确、及时,将直接影响整个数据分析平台的使用效果。

  2.2 原理介绍

  代码埋点的实现原理比较简单,主要是在初始化SDK后,在事件发生时调用-track:或-track:withProperties:等相关接口,将触发的事件和属性保存到数据模型中(用于SDK 是一个 NSDictionary 类型的数据模型)。并将数据模型转换成JSON字符串存入本地数据库。然后根据发送策略将数据发送到指定的服务器。例如:如果我们想统计App中某个按钮的点击次数,可以在按钮对应的click方法中调用SDK提供的接口来采集事件。

  3.实现

  在神策分析中,我们使用事件模型(Event)来描述用户对产品的各种行为,这也是神策分析中所有界面和功能设计的核心依据。简单来说,Eve​​nt是对用户在某个时间点、某个地点、以某种方式完成某件特定事情的描述。可以看出,一个完整的Event包括以下几个关键因素:

  who:参与活动的用户是谁;

  When:事件发生的实际时间;

  Where:事件发生的地点;

  方式:用户参与事件的方式;

  What:描述用户所做事件的具体内容。

  对于SDK来说,记录用户行为数据的接口主要考虑以上五个因素。不难看出,该接口的主要功能是:在特定时间为业务调用,传入事件名称和需要记录的属性或其他必要的参数,然后记录该事件.

  3.1 界面设计

  一个设计良好的界面应该能够在输入一组合理的数据时,在有限的运行时间内得到正确的结果;应对不合理的数据输入有足够的响应和处理能力。参照这个思路,我们来设计一个记录用户行为数据的接口。

  首先考虑接口的暴露部分。开发者在使用接口时,主要关注以下几点:

  接口名称:接口名称要准确,能够用简洁的语言描述接口的功能。对于要实现的功能,我们将这个接口命名为 - track:withProperties: ;

  参数列表:通过上面的介绍,我们可以知道方法调用的时机可以作为事件(Event)的发生时间(When)。另外,我们还需要提供的是事件的具体内容(What)和实现方式(How),即事件的名称(用参数event表示)和事件属性(用参数event表示)参数属性);

  返回值:通过该接口记录的用户行为数据,最终需要上报给指定的服务器,所以该方法的返回值要符合指定服务器要求的格式。一般来说,数据都是JSON格式,物理上对应一段数据,逻辑上对应一个描述用户行为的事件。

  基于以上三点,我们的接口定义如下:

  通过上面的介绍,我们可以知道事件模型(Event)收录

五个关键因素。下面将详细介绍如何获取代码埋点中的这五个关键因素。

  3.2.1 用户名

  用户的唯一标识,这里用distinct_id表示。简单来说,当用户未登录时,SDK会选择设备ID作为唯一标识,当用户登录时,会选择登录ID作为唯一标识,即用户拥有既有设备ID(也叫“匿名ID”)又有登录ID,同一用户的设备ID和登录ID可以通过“用户关联”联系在一起。这样无论用户处于匿名状态还是登录状态,我们都可以准确地识别出同一个用户。这是目前比较普遍和准确的用户识别方法。

  1.设备ID

  大多数情况下,用户只有一台设备,因此可以获取设备ID作为用户标识。专门针对 iOS,我们可以使用 IDFA、IDFV 或 UUID。

  IDFA:英文全称Identifier For Advertising,是Advertising Identifier的缩写。主要用于广告推广、音量变化等跨应用设备跟踪。在同一台 iOS 设备上,所有应用程序同时获得相同的 IDFA。iOS 10之后,如果用户限制广告追踪(【设置】→【隐私】→【广告】→【限制广告追踪】),我们得到的IDFA将是一串固定的0:0-000000000;

  IDFV:英文全称Identifier For Vendor,是应用开发者标识符的缩写。应用程序开发人员使用它来识别用户。主要适用于分析同一应用开发者不同应用之间的用户行为。在重启设备后和解锁设备之前,该值可能不可用;

  UUID:英文全称Universally Unique Identifier,是Universal Unique Identifier的缩写,它可以让你在不使用任何服务器的情况下,随时生成一个唯一的标识符。也就是说,UUID在特定的时间和空间内是全局唯一的。如果IDFA和IDFV都获取不到,我们会生成一个UUID作为设备的ID。

  根据实际情况,对于常规数据分析中的设备ID,可以按照IDFA→IDFV→UUID的优先级顺序获取,基本可以满足我们的业务需求。

  另外,为了防止由于广告追踪限制、卸载重装等原因导致设备ID被更改,SDK会将设备ID存储在KeyChain和沙盒中,一定程度上避免了该问题。因此,获取设备ID的流程如图3-1所示:

  图3-1 获取设备ID流程图

  2.登录ID

  一般情况下,登录ID用于在业务后台系统中识别用户。它可以非常准确地识别用户,但无法识别未登录的用户。

  

" />

  在SDK中,通过调用-login:接口,传入登录ID,即可完成“用户关联”,将同一用户的设备ID和登录ID关联在一起。

  3、唯一标识

  在SDK中,我们定义设备ID为anonymousId,登录ID为loginId,唯一用户ID为distinctId。distinctId的获取逻辑如下:

  如果loginId不为空且长度不为0,则返回loginId;

  如果 loginId 为空,则返回 anonymousId。

  3.2.2 触发时间

  在SDK的内嵌接口中,使用time字段记录事件发生的时间(毫秒)。如果传入的属性不收录

时间字段,则会自动获取当前时间作为时间字段的值,如下代码所示:

  NSNumber timeStamp = @([[NSDate date] timeIntervalSince1970] 1000);

  3.2.3 触发位置

  可以从三个方面采集

位置信息:

  传感器系统会根据请求的ip自动解析对应的省($province)和城市($city),所以SDK不需要处理这两个属性;

  SDK可以通过CoreLocation框架自动采集经度($longitude)和纬度($latitude),初始化SDK后调用-enableTrackGPSLocation:方法即可启用;

  开发者还可以设置一些其他区域相关的字段。例如:国家(country)、社区(HousingEstate)等。

  3.2.4 参与方式

  用户参与此事件的方式。这个概念比较宽泛,包括用户使用的设备、浏览器、App版本、操作系统版本、入口通道、重定向时的referer等。目前神策分析预置了一些字段来描述这类信息,称为preset属性。同时开发者也可以根据自己的需要添加相应的自定义字段。

  3.2.5 活动内容

  描述用户发起的事件的具体内容。主要是利用事件名称(event)对用户制作的内容进行初步分类。除了事件的关键字段,我们没有设置过多的预设字段,开发者需要根据每个产品和每个事件的实际情况和分析需求进行具体设置。

  3.3 事件属性

  除了事件触发时传入的自定义属性*敏*感*词*和便利性。采集到的预置属性是数据分析中涉及的重要分析维度,大大降低了开发采集成本,是即用型部件。

  此外,如果您需要在所有事件中使用某些相同的属性,您可以将这些属性注册为公共属性。

  以上两个特殊事件属性可以在一定程度上节省埋点成本。接下来我们将介绍这两个属性的实现。

  3.3.1 预设属性

  考虑到SDK的活跃期基本可以确定为“初始化”和“事件触发”两个时机,所以预设属性按照采集时机大致可以分为两类:

  SDK初始化时采集

:该属性的值可以在初始化时确定,在当前App生命周期内不会改变;

  事件触发时的集合:调用时才能确定的属性-track:withProperties:。

  1.初始化时采集

的属性

  最简单最优的方案是在SDK初始化的时候创建一个存储属性的模型(可以使用NSDictionary类型),命名为automaticProperties,将相应的属性采集

进去,由SDK持有模型。然后,每次事件触发时,只需将该模型的值添加到属性即可。采集到的预置属性如表3-1所示:

  表3-1 初始化时采集

的预置属性列表

  2.事件触发时采集

的属性

  由于一些预设的属性,在app的整个生命周期中都可能发生变化,更强调实时性,所以需要在事件触发时采集

。典型代表就是前面介绍的事件触发时间(When)和地点(Where)。触发事件时采集

的预置属性如表3-2所示:

  表3-2 事件触发时采集

的预置属性列表

  3.3.2 公共属性

  有一些属性是我们想在每个事件中都带上的,但不是预设属性,相当于公共自定义属性。对于这些属性,SDK 提供了两种不同的设置方式,即“静态”和“动态”公共属性。

  静态公共属性一般固定在一个App的生命周期中;动态公共属性则相反,只有在事件触发的那一刻采集

的值才有意义。这其实对应了预设属性的两次采集时机。例如:

  应用名称在一个App的生命周期中一般是固定的,所以可以设置为静态公共属性;

  当前游戏等级,最新金币余额。很明显这些值每个集合都会改变,但仍然属于公共属性的范畴。这时候就可以使用动态公共属性。

  1.静态公共属性

  根据上面的分析,静态公共属性可以这样实现: 提供一个接口,用于对外注册静态公共属性。开发者在SDK初始化时通过该接口注册静态公共属性,然后在事件触发时为其添加静态公共属性。

  根据“一般固定在一个App生命周期中”的特性,静态公共属性可以存储在内存中。但是在实践中,有些静态的公共属性在SDK初始化的时候是无法确定的,只能在网络请求或者其他操作之后注册。这也导致在注册静态公共属性之前的部分事件,没有静态公共属性。如果每次启动app都重复上面的操作,大量的事件就无法携带静态的公共属性,这显然是有问题的。因此SDK也将注册的静态公共属性持久化,在SDK初始化时将持久化的静态公共属性取出,提前了静态公共属性的注册时间,解决了大部分问题。

  注册静态公共属性的代码如下:

  [[SensorsAnalyticsSDK sharedInstance] registerSuperProperties:@{@"superKey":@"superValue"}];

  2.动态公共属性

  动态公共属性在每次触发事件时采集

,适用于经常变化的属性。因此,动态公共属性是通过 SDK 中的回调(块)实现的。完整流程如下:

  当SDK初始化,或者其他业务机会时,注册回调;

  在回调中实现属性的采集

逻辑,并返回采集

到的属性;

  当事件被触发时,回调方法被调用并将返回的属性添加到事件属性中。

  由于每次触发事件都会调用动态公共属性的回调方法,因此不建议在回调方法中加入过多的业务逻辑。注册动态公共属性的代码如下:

  

" />

  [[SensorsAnalyticsSDK sharedInstance] registerDynamicSuperProperties:^NSDictionary * _Nonnull{

  返回@{@"dynamicKey":@"dynamicValue"};

  }];

  3.3.3 属性的优先级

  目前各种属性按照优先级从高到低排序:

  事件触发时传入的自定义属性;

  动态公共属性;

  静态公共财产;

  预设属性。

  不难看出,排序的核心思想是按照“自定义”的优先级进行排序:

  properties只代表本次触发的事件,自定义程度最高;

  动态公共属性是实时的,比静态公共属性具有更高的优先级;

  预置属性是纯粹的SDK行为,所以优先级最低。

  3.4 数据验证

  数据校验的内容分为:

  参数是否为空,类型是否正确等;

  参数是否满足传感器的数据格式要求。传感器使用统一的数据格式,因此任何自定义内容都应该进行验证,以确保输出的 JSON 符合要求。具体来说就是验证事件名称、自定义属性、静态公共属性、动态公共属性等。

  数据校验的时序分为:

  静态公共属性在注册时应进行检查;

  事件触发时应检查动态公共属性和自定义属性。

  3.4.1 基本限制

  事件名(event的值)和属性名(properties中key的值)都必须是合法的变量名,即不能以数字开头,只能收录

:大小写字母、数字、下划线和 $. 另外,事件名称和属性名称的最大长度为100。上述限制在SDK中是通过正则表达式实现的。

  SDK 保留了一些字段作为预设的事件和属性名称。自定义事件和属性需要避免相同。判断事件名和属性名是否合法的代码如下:

  3.4.2 类型限制

  SDK目前支持五种数据类型:Numeric、Boolean、String、String Array、Date Time,分别对应代码中的NSNumber、NSString、NSSet、NSArray、NSDate。其他类型的数据将被拒绝。这里需要注意的是:

  在SDK中,Boolean类型和numeric类型一样使用NSNumber类型。转换为JSON后,boolean NSNumber会被转换为true或false,numeric NSNumber会被转换为实际值;

  NSSet 和 NSArray 都代表数据集合,只是无序和有序的区别。因此,这两种类型都可以表示字符串数组;

  NSNull类型会单独处理,不会导致整个数据被丢弃,只会丢弃键值对。

  对于不同类型的属性值,也有单独的检查,如下:

  NSString:对于一个字符串,检查它的长度是否大于最大长度8191,如果大于最大长度,超过长度的部分将被删除,并拼接$表示后面的内容已被截断。其中,App崩溃事件(AppCrashed)的崩溃原因属性(app_crashed_reason)有一个崩溃栈的值,通常比较长,所以它的长度限制设置为正常值的两倍;

  NSSet和NSArray:表示字符串数组,会遍历每个对象,检查是否是NSString类型,如果不是,则删除该对象;

  NSDate:由于SDK数据格式支持的日期时间实际上是JSON中固定格式的字符串,对于NSDate,会使用NSDateFormatter将其按照格式序列化为字符串。

  4.使用场景

  要了解代码埋点的使用场景,首先要看代码埋点的优缺点,尽量扬长避短。

  优势:

  原理简单,学习成本低;

  使用更加灵活,可以根据业务特点自定义时序、属性、事件,以自定义的方式获取数据。

  缺点:

  埋点成本高,需要为每个控件的埋点添加相应的代码,不仅工作量大,还需要技术人员来完成;

  版本更新前后,容易出现数据乱码;

  企业需要长期稳定地完善埋点,并根据业务不断更新。

  根据以上优缺点,我们可以知道代码嵌入的使用更加灵活,但是成本也更高。因此,当全埋点、可视化全埋点等埋点解决方案无法解决问题,或者更强调自定义场景时,最好使用它。例如:

  app整体日活跃度,app元素每日点击次数,可使用所有埋点;

  App中指定按钮的点击事件,特定页面的页面浏览事件,可以完全埋点可视化;

  如果您需要非常准确的业务统​​计和用户数据,对安全性要求比较高,比如成功注册和支付,可以使用服务器埋点;

  以上方案无法解决,或者自定义内容较多,如加入购物车、提交订单等,可以使用代码嵌入。

  五、总结

  代码埋点是整个神策分析iOS SDK的基础和核心。它的丰富和稳定足以让我们无后顾之忧地使用全埋点、入库报告等功能。希望通过本文,让大家对神策分析iOS SDK的代码埋点有一个全面的了解。

  解决方案:代码统计工具有哪几种_SEO工具篇:如何安装百度统计代码

  本文来自恩斯传媒-小鱼。

  百度统计是百度推出的一款稳定、专业、安全的统计分析工具。可以提供权威、准确、实时的流量质量和访客行为分析,方便日常监控,为系统优化和ROI提升提供指导。同时,百度统计专门推出了先进的分析平台,可进行实时多维分析、人群分析、行为洞察,实时数据驱动业务增长。

  如何获取代码?首先需要添加网站,添加网站后即可获取代码。然后手动安装代码。只有正确添加百度统计代码后,才有可能获得更准确的流量数据。代码安装过程需要注意以下几点:

  1、代码安装位置要正确,代码一般安装在标签标记之前;

  2、不要在一个页面中重复安装相同的代码。统计工具具有去重原理。一段代码生效后,另一段代码将被丢弃。因此,只需安装一段代码;

  

" />

  3.不要以任何方式编辑代码。随意编辑代码可能导致代码无法执行,并可能影响网站页面的显示;

  4、在网站所有页面安装代码,重点推广URL页面、转化目标及相关路径页面

  检查代码是否安装成功 使用百度统计助手,百度统计助手是一款基于Chrome浏览器的插件,帮助用户检查百度统计代码是否安装正确。首先安装百度统计助手。但是对于一些特殊情况,系统无法查看代码安装状态,需要我们自己手动查看,打开控制台,点击网络按钮,然后F5刷新,如果能看到hm.js,就证明百度了已安装统计代码。如果没有,则证明没有安装。

  站点代码是否安装正确?数据统计是否正常?相信这是很多统计用户都非常关心的问题。百度统计提供自动校验功能,通过抓取页面,分析页面是否安装了正确的统计代码。

  

" />

  关于代码检查的注意事项!

  1、为全面统计网站流量,请在网站所有页面正确安装统计代码;

  2、该功能通过抓取网站页面来分析是否安装了正确的统计代码,但有些网站打开速度慢或限制程序抓取网页,会导致系统无法判断。

  3、正确安装统计代码后,等待一段时间,就可以看到统计数据了。

  总结:本文主要讲解百度工具的代码安装部分。主要是为初学者准备的。主要介绍如何获取代码,如何安装代码,代码应该放在页面的哪一部分,以及检查代码是否安装成功。. 下回告诉大家百度统计工具统计了哪些数据报表。下次见。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线