1. 前言
作为一名技术顾问,在日常工作中会遇到各种各样的问题。有些问题看上去很简略,但背地的起因却是异样的简单。
为了更好的解决问题、服务客户,咱们须要造就本人“透过景象看实质”的能力。
上面咱们就一起来看一个体现简略排查却简单的实在案例。
2. 背景
阳光正好,大风不燥的一天,我正在值班。忽然客户反馈在应用 App 点击剖析时,扫描二维码后报错,如图 2-1 所示:
图 2-1 扫描二维码报错信息
收到这个报错之后,我就第一工夫进行排查。在介绍具体的排查过程之前,咱们先来理解下相干的背景常识。
2.1. 什么是点击剖析
点击图,即利用一种非凡高亮的色彩模式,显示页面或页面组区域中不同元素点击密度的图示。点击剖析是通过可视化的办法,利用点击图清晰展现某个(些)元素被点击的次数和占比,从而帮忙使用者判断用户热衷的区域,评估页面设计的科学性[1]。
2.2. 如何应用点击剖析
点击剖析的应用大抵能够分为上面几个步骤[2]:
2.2.1. 开启点击剖析
点击剖析性能依赖于全埋点中的点击事件,因而须要先开启全埋点点击事件的采集。v2.3.0+ 版本 SDK 反对 App 点击剖析性能,须要在初始化 SAConfigOptions 后调用 enableHeatMap 进行开启。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 初始化配置
SAConfigOptions *options = [[SAConfigOptions alloc] initWithServerURL:<# 数据接管地址 #> launchOptions:launchOptions];
// 开启全埋点
options.autoTrackEventType = SensorsAnalyticsEventTypeAppStart |
SensorsAnalyticsEventTypeAppEnd |
SensorsAnalyticsEventTypeAppClick |
SensorsAnalyticsEventTypeAppViewScreen;
// 开启点击剖析
options.enableHeatMap = YES;
.......
// 初始化 SDK
[SensorsAnalyticsSDK startWithConfigOptions:options];
return YES;
}
2.2.2. 配置 Scheme
在 App 工程中抉择 TARGETS -> Info -> URL Types,点击加号(+),将上一步获取到的 Scheme 配置到 URL Types 中,如图 2-2 所示:
图 2-2 配置 Scheme
2.2.3. 解决传入的 URL
在 AppDelegate 的 – application:openURL:options: 办法中调用 – handleSchemeUrl: 对神策剖析 Scheme 进行解决:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {if ([[SensorsAnalyticsSDK sharedInstance] handleSchemeUrl:url]) {return YES;}
return NO;
}
2.2.4. 扫码连贯
在神策剖析页面抉择点击剖析,用手机扫描页面上的二维码。手机扫码后点击「开启 App 点击剖析」按钮,再点击「关上」按钮后胜利关上所要剖析的 App,如图 2-3 所示:
图 2-3 扫码连贯
最初在 App 中点击「持续」按钮,连贯 App 点击剖析。
在理解了背景常识之后,咱们来回顾下问题的排查过程。
3. 问题过程回顾
3.1. 问题初识
从客户给的 2-1 截图,能够剖析出,客户是扫描二维码没有唤起 App,这是一个常见的问题。客户是在应用点击剖析时,报出的这个问题,尽管这个问题不大,然而它会影响客户应用点击剖析这个性能。有很多因素会影响到点击剖析的应用,在下面的应用介绍中,每一步出错都可能造成点击剖析无奈应用的状况。
3.2. 剖析问题
客户是在扫描点击剖析二维码时没有唤起 App,可能的起因有:
没有装置 App;
没有配置 Scheme 或者配置的不对。
目前看来最有可能的就是没有配置 Scheme 了。通过和客户沟通,证实了这一推断。
3.3. 解决方案
根据上述剖析,能够通过配置 Scheme 解决这个问题。然而仅仅配置 Scheme 能解决客户的问题吗?
对于这个问题,咱们最终的目标是帮助客户可能失常的应用点击剖析,而不是仅限于扫码无奈唤起 App 这个问题上。点击剖析因匹配计划不同,咱们有两种不同的计划。因而咱们须要先和客户沟通以下问题:
神策 iOS SDK 的版本是多少;
神策剖析环境的版本是多少。
经确认,iOS SDK 版本满足新匹配计划,而神策剖析版本还是旧匹配计划的版本。即便配置了 Scheme 后,点击剖析也是不能失常应用的。确认了神策剖析版本较低的状况后,这边就分割客户胜利帮忙客户降级剖析环境。
与此同时,和客户沟通点击剖析的其余配置是否有问题。后果发现客户并没有开启点击剖析,于是告知客户应用点击剖析须要做以下配置:
初始化 SDK 时,须要开启点击剖析配置项;
初始化 SDK 时,须要开启全埋点点击事件的采集;
配置对应环境的 Scheme;
解决传入的 URL。
同时,给客户提供了相应的文档。
这样一来,这个问题就应该完满解决了。
3.4. 为什么没有解决
然而,问题并没有设想的那么简略。客户反馈问题仍然存在,景象和之前一样:扫描点击剖析的二维码,并没有唤起 App。
我收到这个音讯之后,眉头一皱,还有可能是哪里的问题呢?
难道客户没有配置 Scheme?客户曾经截图反馈,iOS 我的项目里的确是配置了。
难道是配置的 Scheme 和应用点击剖析的我的项目不匹配?这个比拟好排查,让客户把神策剖析里配置的 Scheme 复制进去和 iOS 我的项目里配置的 Scheme 比照一下就能够失去答案。
果然,在 iOS 我的项目里配置的是测试项目的 Scheme,而点击剖析是在正式我的项目里测试的。和客户解释分明后,让客户在 iOS 我的项目里配置了正式我的项目的 Scheme。
这下问题应该解决了吧!
3.5. 为什么还没有解决
然而,事实并非如此。客户反馈:“配置了正式我的项目的 Scheme 后,扫码后能够唤起了 App。然而,点击剖析的页面始终在转圈,还是无奈连贯胜利”。
这是什么起因导致的呢?咱们来剖析一下扫码连贯的过程:
扫码唤起 App 后,须要把二维码里的 URL 传给 SDK;
SDK 会解析 URL 里的信息,拿到上报页面构造信息的地址;
把 App 页面构造上传到点击剖析页面进行展现。
目前点击剖析页面始终在转圈,起因就是因为 App 端的页面构造信息没有上传导致的。SDK 解决二维码信息时,如果检测到是点击剖析的链接时,会校验点击剖析的各项配置,如果满足点击剖析会弹窗提醒:“正在连接 App 点击剖析”。如果不满足会弹出对应的错误信息。此时如果能看到弹窗提醒,就能够定位到问题起因。
不过,客户示意并没有看到弹窗弹出。从这个景象能够晓得,SDK 没有解决唤起 App 时传进来的 URL,可能的起因有以下几种:
唤起 App 的回调函数里没有调用神策 SDK 的办法解决 URL;
唤起 App 的回调函数里调用神策 SDK 的办法比拟靠后,URL 被其余流程解决了;
唤起 App 的回调办法有多个,客户应用的办法优先级较低。
剖析到这里,让客户截图看下是如何解决 URL 的,代码如下所示:
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {if ([[SensorsAnalyticsSDK sharedInstance] handleSchemeUrl:url]) {return YES;}
return NO;
}
客户的代码没有问题,因而排除了前两个可能。当初最有可能的起因就是这个回调函数没有执行到,通过断点调试验证了这一猜测。
起因是应用 SceneDelegate 时,唤起 App 会优先执行 SceneDelegate 里的 – scene:openURLContexts: 办法。于是,倡议客户把解决 URL 的逻辑移到 SceneDelegate 外面解决。
这次调整后,从新测试,点击剖析终于连贯胜利了。
这下问题总算解决了吧!
3.6. 居然还有问题
然而,意外还是产生了。尽管连贯胜利了,然而客户那边又呈现了新问题:点击剖析页面没有热力求,就像一个投屏工具一样,看不到任何数据。
为什么会这样呢?后面在介绍点击剖析时,咱们晓得点击剖析会依据点击次数的多少,渲染出不同的色彩,点击次数越多色彩就会越深。不过当初没有渲染出点击图,根本原因就是没有统计到点击次数。可能的起因有:
没有点击操作;
没有开启全埋点点击事件;
iOS SDK 版本和神策剖析版本不匹配。
上述第三点最开始就曾经和客户确认了,因而能够排除;至于第一点,曾经和客户确认,在测试时点击了按钮,因而也能够排除;那最有可能的起因就是没有开启全埋点点击事件,不过这一点也和客户确认过,因而也能够排除。
问题仿佛陷入了僵局。
就在“柳暗花明疑无路”时,发现客户的代码截图里有 RCTRootView 相干代码,有这个代码阐明是应用 React Native 开发的我的项目。在 React Native 的我的项目里,点击事件采集是须要集成 react-native-sensors-analytics 插件 [3] 的。简略来说,只有集成了这个插件,在 React Native 的我的项目里才能够主动采集到点击事件。
通过和客户沟通,他们的确是应用 React Native 开发的我的项目,同时没有集成 react-native-sensors-analytics 插件。终于,找到这个难题的答案了。
3.7. 终于解决了
给客户提供了如何集成 react-native-sensors-analytics 插件的步骤,通过测试,期待已久的点击剖析热力求终于出现在了客户背后。
至此,问题总算彻底解决了。
4. 总结
在最后收到客户反馈的问题时,本认为是一个简略的问题,没想到通过了许多挫折才最终把它解决掉。
回顾这次解决问题的经验,本人的播种次要有以下几点:
问题不分大小,肯定要跟进到底;
遇到意外状况,要认真对待,不能轻易放过任何一个细节;
解决问题时,咱们无妨大胆假如,小心论证。
心愿和大家共勉。
5. 参考文献
[1] https://manual.sensorsdata.cn…
[2] https://manual.sensorsdata.cn…
[3] https://github.com/sensorsdat…
文章来自公众号——神策技术社区