iOS印象事件助手

移动分析事件故事

背景故事

最近,我的一名营销部门同事来到我们的团队,他说他想在我们的iOS应用程序中添加另一种激动人心的分析事件,即产品列表印象。 我不得不承认,我们喜欢将整个营销团队作为一个整体来实施,他们不喜欢编写大量垃圾代码,而只是在几乎每个sprint中添加新的分析事件,而不是为用户创建令人兴奋的新功能。

那么,首先,“印象”事件是什么意思? 基本上,这意味着

用户看到内容时发生的事件。

从应用程序发送事件是一件容易的事(至少在大多数情况下是这样),但是从工作描述中获得的一小部分信息提到此类事件可能存在挑战。 当用户完全看到单元格的内容时,它将视为印象,并且可以通过事件包装器发送它。 但是,如果用户看到的内容不到单元格内容的一半,则不应将其视为展示,并且在这种情况下不应发送任何事件。 除此限制外,还有其他规则要注意。 为了清楚起见,让我们定义以下规则,

  1. 用户应看到一个单元格的一半以上,以将该事件计为印象
  2. 即使用户再次看到这些单元格,已经发送的事件也不应再次发送。

不幸的是,UICollectionView没有提供任何方法或回调可在这种情况下直接使用。 因此,让我们编写一个印象事件处理程序,以检测用户看到了哪些单元格,以算作印象。 ✌️


编码部分

首先,让我们创建处理程序类,我将其命名为ListingImpressionStalker (是的,实际上,该命名定义了它的实际作用),并使用基本的初始化程序和公共方法定义了两个变量。

第一步

minimumPercentageOfCell是我们的比率约束,与用户查看以计数作为印象的单元格的可见部分的最小百分比有关, collectionView只是对事件进行跟踪的弱collectionView参考。

让我们开始为stalkCells()方法编写一些代码。 首先,我们需要当前对用户可见的单元格。 对于我们的露西来说,UICollectionView有一个名为visibleCells()的方法,该方法返回当前可见的可见单元实例。 我们应该通过调用此方法来获取这些单元格,然后应通过迭代对每个单元格进行可视区域计算的百分比。 让我们将它们放入代码中

一种计算单元格内容可见部分百分比的方法

这种方法遵循的步骤非常简单,

  1. 使用Guard语句为单元安全地创建局部变量indexPath和layoutAttributes。
  2. 在超级视图中找到单元格的真实位置。
  3. 使用collectionView的框架和superview中的单元格的框架计算交点rect,该框架在上一行计算得出。
  4. 计算交集的百分比并将其返回。

而已。 由于我们知道相关单元格的已查看区域的百分比,因此可以确定此视图是否应计为印象事件,这取决于此方法的返回值。 让我们创建一个协议来发送使用委托模式找到的索引路径。

ListingImpressionStalkerDelegate协议定义

使用此协议的sendEventForCell(atIndexPath indexPath:Indexpath)方法我们可以将索引路径发送到符合ListingImpressionStalkerDelegate的

我们已经迭代了可见的单元格,并且每个单元格的视图百分比计算已经完成。 在需求方面,还有最后一件事,让我们记住我们的第二条规则,

如果用户再次看到这些单元格,则已经发送的事件不应再发送。

为此,我们可以轻松地创建一个数组来存储已经发送的索引路径。 够了吗? 也许是大多数时候,是的。 但是,我们应该使其尽可能灵活,以涵盖许多情况。 为了让用户选择该选项,我们创建一个名为ListingImpressionItem的协议

ListingImpressionItem协议定义

属于我们跟踪的集合视图的单元格应遵循此协议以提供唯一的标识符。 现在,我们可以存储这些唯一的ID而不是索引路径,以防止再次发送新事件。 定义了ListingImpressionStalkerDelegateListingImpressionItem协议之后我们可以按如下所示完成stalkCells()方法,

stalkCells()方法的主要部分

最后的话

在故事的最后,我们完成了简单的印象事件处理程序。 遵循上述协议并实现其方法后,在viewDidAppear()中调用stalkCells () scrollViewDidScroll()方法就足够了。 多亏了ListingImpressionStalkerDelegate,sendEventForCell()方法会自动以单元格的索引路径调用,该单元格的索引路径占其内容的一半以上,例如以下代码段,

ListingImpressionStalkerDelegate的实现

对于那些不想弄脏自己的人,下面的链接中提供了完整的代码,

ergunemr / ListingImpressionStalker

ListingImpressionStalker –用于在UICollectionView上跟踪市场印象事件的Swifty解决方案

github.com

编码愉快!