乐趣区

关于后端:问题也许没有看上去那么简单

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…

文章来自公众号——神策技术社区

退出移动版