# AndroidTracker
`AndroidTracker`是一个Android端的无埋点统计的实现方法。其对`Activity`、`Fragment`的生命周期进行监听,实现了页面浏览以及点击事件的采集。
针对点击事件的处理,目前兼容`ActionBar`、`ToolBar`的点击,以及[ButterKnife](https://github.com/JakeWharton/butterknife)的点击注解。
支持版本为API 14及以上(Android 4.0及以上)。
## 初始化
在工程根目录的`build.gradle`文件的最后添加:
```groovy
allprojects {
repositories {
// ...
maven { url 'https://jitpack.io' }
}
}
```
并在项目中增加如下依赖:
```groovy
dependencies {
implementation 'com.github.foolchen:AndroidTracker:0.3.3'
}
```
该库中引用了[okhttp3](https://github.com/square/okhttp)以及[retrofit2](https://github.com/square/retrofit),如果需要独立引用其他版本的`okhttp`和`retrofit`,则可以引用如下:
```groovy
dependencies {
implementation ("com.github.foolchen:AndroidTracker:0.3.3"){
exclude module: 'okhttp'
exclude module: 'retrofit'
}
}
```
并在项目的`Application`中初始化如下:
```kotlin
class App : Application(), ITrackerContext {
override fun onCreate() {
super.onCreate()
// 设定一些通用的属性,这些属性在每次统计事件中都会附带
// 注意:如果此处的属性名与内置属性的名称相同,则内置属性会被覆盖
Tracker.addProperty("附加的属性1", "附加的属性1")
Tracker.addProperty("附加的属性2", "附加的属性2")
// 设定上报数据的主机和接口
// 注意:该方法一定要在Tracker.initialize()方法前调用
// 否则会由于上报地址未初始化,在触发启动事件时导致崩溃
Tracker.setService("https://www.demo.com", "report.php")
// 设定上报数据的项目名称
Tracker.setProjectName("android_tracker")
// 设定上报数据的模式
Tracker.setMode(TrackerMode.RELEASE)
// 初始化AndroidTracker
Tracker.initialize(this)
}
}
```
## Activity中的集成方式
在`Activity`中集成时,如果项目仅存在`Activity`,不需要对`Fragment`进行特殊处理,则仅需要实现`ITrackerHelper`接口,用于获取页面的名称和页面附加属性。
如果项目中有`Fragment`,需要在特定情况下忽略`Activity`的统计,则还应该实现`ITrackerIgnore`接口,手动处理`isIgnore`方法的返回值。示例如下:
```kotlin
open class BaseActivity : AppCompatActivity(), ITrackerHelper, ITrackerIgnore {
///////////////////////////////////////////////////////////////////////////
// 该类实现ITrackerHelper接口,此处两个方法全部返回null
// 则页面名称(别名)会直接取使用canonicalName来当做标题
// 并且不会有附加的属性
///////////////////////////////////////////////////////////////////////////
override fun getTrackName(): String? = null
override fun getTrackProperties(): Map<String, Any?>? = null
///////////////////////////////////////////////////////////////////////////
// ITrackerIgnore接口用于确定当前Activity中是否包含Fragment
// 如果返回值为true,则表明当前Activity中有包含Fragment,则此时不会对Activity进行统计
// 如果返回值为false,则表明当前Activity中不包含Fragment,则此时会对Activity进行统计
// 此处默认不包含Fragment,如有需要应该在子类中覆写该方法并修改返回值
///////////////////////////////////////////////////////////////////////////
override fun isIgnored(): Boolean = false
}
```
## Fragment中的集成方式
与`Activity`相同,如果`Fragment`中不再有子`Fragment`,则仅需要实现`ITrackerHelper`。
如果有子`Fragment`,或者需要手动忽略部分`Fragment`的统计,则需要实现`ITrackerIgnore`接口。示例如下:
```kotlin
open class BaseFragment : Fragment(), ITrackerHelper, ITrackerIgnore {
///////////////////////////////////////////////////////////////////////////
// Tracker.setUserVisibleHint()和Tracker.onHiddenChanged()方法用于同步Fragment
// 的可见性,解决在Fragment显隐/与ViewPager结合使用时无法触发生命周期的问题
///////////////////////////////////////////////////////////////////////////
override fun setUserVisibleHint(isVisibleToUser: Boolean) {
super.setUserVisibleHint(isVisibleToUser)
Tracker.setUserVisibleHint(this, isVisibleToUser)
}
override fun onHiddenChanged(hidden: Boolean) {
super.onHiddenChanged(hidden)
Tracker.onHiddenChanged(this, hidden)
}
///////////////////////////////////////////////////////////////////////////
// 该类实现ITrackerHelper接口,此处两个方法全部返回null
// 则页面名称(别名)会直接取使用canonicalName来当做标题
// 并且不会有附加的属性
///////////////////////////////////////////////////////////////////////////
override fun getTrackName(): String? = null
override fun getTrackProperties(): Map<String, Any?>? = null
///////////////////////////////////////////////////////////////////////////
// ITrackerIgnore接口用于确定当前Fragment中是否包含子Fragment
// 如果返回值为true,则表明当前Fragment中有包含子Fragment,则此时不会对当前Fragment进行统计
// 如果返回值为false,则表明当前Fragment中不包含子Fragment,则此时会对当前Fragment进行统计
// 此处默认不包含子Fragment,如有需要应该在子类中覆写该方法并修改返回值
///////////////////////////////////////////////////////////////////////////
override fun isIgnored(): Boolean = false
}
```
## 对点击事件增加属性
在某些场景下,仅对`View`进行默认属性的统计可能无法满足需求,故可以针对点击事件增加自定义属性。示例如下(ButterKnife):
```java
@OnClick(R.id.tv_clickable) public void click(View view) {
Toast.makeText(view.getContext(), ((TextView) view).getText().toString(), Toast.LENGTH_SHORT)
.show();
// 此处针对点击事件增加属性
Map<String, Object> map = new HashMap<>();
map.put("附加的View属性", view.toString());
Tracker.INSTANCE.trackView(view, map);
}
```
## 登入/登出处理
每个用户会使用`distinct_id`来标识,用户未登录时,该值由设备`Android Id`、设备制造商、设备型号等字段计算得到唯一值。
而在用户登录后,则需要使用确切的用户id来替代该值。示例如下:
kotlin:
```kotlin
Tracker.login("此处设置用户id")
```
java:
```java
Tracker.INSTANCE.login("此处设置用户id");
```
在用户退出登录时,需要主动调用登出方法。此时,`distinct_id`的值会替换为SDK生成的值。示例如下:
kotlin:
```kotlin
Tracker.logout()
```
java:
```java
Tracker.INSTANCE.logout();
```
## 设置渠道号
渠道号在统计事件中的属性为`channel`。设置如下:
kotlin:
```kotlin
Tracker.setChannelId("此处设置渠道号")
```
java:
```java
Tracker.INSTANCE.setChannelId("此处设置渠道号");
```
## 针对所有统计附加属性
如果想要针对所有的统计事件增加一些固定的属性,则应该在初始化时设置如下:
```kotlin
Tracker.addProperty("附加的属性1", "附加的属性1")
Tracker.addProperty("附加的属性2", "附加的属性2")
```
## 自定义事件
该库提供了追踪自定义事件的方法,并且可以自定义属性。调用示例如下:
kotlin:
```kotlin
Tracker.trackEvent("MainActivity的自定义追踪事件", null)
```
java:
```java
Tracker.INSTANCE.trackEvent("MainActivity的自定义追踪事件", null)
```
## 上报模式
**DEBUG_ONLY**:仅在`Logcat`中打印日志,不上传数据。建议仅在调试阶段使用该模式。
**DEBUG_TRACK**:在`Logcat`中打印日志,并且**即时**上传�
没有合适的资源?快使用搜索试试~ 我知道了~
Android端无埋点统计方案.zip
共94个文件
kt:39个
xml:27个
png:10个
需积分: 5 0 下载量 163 浏览量
2024-01-15
08:56:33
上传
评论
收藏 187KB ZIP 举报
温馨提示
方案是为解决特定问题或达成特定目标而制定的一系列计划或步骤。它的作用是提供一种系统性的方法,以有效地应对挑战、优化流程或实现目标。以下是方案的主要作用: 问题解决: 方案的核心目标是解决问题。通过系统性的规划和执行,方案能够分析问题的根本原因,提供可行的解决方案,并引导实施过程,确保问题得到合理解决。 目标达成: 方案通常与明确的目标相关联,它提供了一种达成这些目标的计划。无论是企业战略、项目管理还是个人发展,方案的制定都有助于明确目标并提供达成目标的路径。 资源优化: 方案在设计时考虑了可用资源,以最大化其效用。通过明智的资源分配,方案可以在有限的资源条件下实现最大的效益,提高效率并减少浪费。 风险管理: 方案通常会对潜在的风险进行评估,并制定相应的风险管理策略。这有助于减轻潜在问题的影响,提高方案的可行性和可持续性。 决策支持: 方案提供了决策者所需的信息和数据,以便做出明智的决策。这种数据驱动的方法有助于减少不确定性,提高决策的准确性。 团队协作: 复杂的问题通常需要多个人的协同努力。方案提供了一个共同的框架,帮助团队成员理解各自的职责和任务,促进协作并确保整个团队朝着共同的目标努力。 监控与评估: 方案通常包括监控和评估的机制,以确保实施的有效性。通过定期的评估,可以及时调整方案,以适应变化的环境或新的挑战。 总体而言,方案的作用在于提供一种有序、有计划的方法,以解决问题、实现目标,并在实施过程中最大化资源利用和风险管理。
资源推荐
资源详情
资源评论
收起资源包目录
Android端无埋点统计方案.zip (94个子文件)
SJT-code
gradle.properties 1KB
gradle
wrapper
gradle-wrapper.jar 52KB
gradle-wrapper.properties 230B
tracker
src
main
java
com
foolchen
lib
tracker
lifecycle
ITrackerFragmentVisible.kt 454B
TrackerFragmentLifeCycle.kt 6KB
ITrackerIgnore.kt 576B
ITrackerHelper.kt 989B
ITrackerContext.kt 417B
TrackerActivityLifeCycle.kt 3KB
Tracker.kt 9KB
data
TrackerEventType.kt 550B
TrackerResult.kt 396B
TrackerNetworkType.kt 802B
TrackerEvent.kt 2KB
TrackerNameDefs.kt 1KB
TrackerMode.kt 806B
TrackerMNC.kt 513B
utils
TrackerGenerator.kt 203B
TrackerUtils.kt 4KB
EncodeUtils.kt 278B
TrackerBuildInUtils.kt 8KB
service
ToStringConverterFactory.kt 995B
TrackerService.kt 9KB
TrackerAPIDef.kt 754B
layout
TrackLayout.kt 9KB
LayoutManager.kt 972B
db
TrackerDbOpenHelper.kt 1KB
Contract.kt 192B
res
values
ids.xml 121B
AndroidManifest.xml 110B
proguard-rules.pro 798B
build.gradle 2KB
.gitignore 7B
maven_push.gradle 3KB
LICENSE.txt 11KB
app
src
main
java
com
foolchen
lib
tracker
demo
MainActivity.kt 4KB
Utils.kt 791B
data
Demo.kt 139B
BaseActivity.kt 1KB
FragmentContainerActivity.kt 845B
fragments
NestedFragment.kt 1KB
SimpleFragment.kt 2KB
ViewPagerFragment.kt 2KB
RxBindingFragment.kt 4KB
BaseFragment.kt 2KB
AdapterViewFragment.kt 2KB
ButterKnifeFragment.java 3KB
PageFragment.kt 2KB
MockLoginFragment.kt 1KB
App.kt 1KB
res
mipmap-xxhdpi
ic_launcher_round.png 10KB
ic_launcher.png 6KB
mipmap-hdpi
ic_launcher_round.png 5KB
ic_launcher.png 3KB
drawable-v24
ic_launcher_foreground.xml 2KB
mipmap-anydpi-v26
ic_launcher.xml 270B
ic_launcher_round.xml 270B
menu
menu_fragments.xml 405B
menu_rx_binding.xml 370B
mipmap-mdpi
ic_launcher_round.png 3KB
ic_launcher.png 2KB
mipmap-xxxhdpi
ic_launcher_round.png 15KB
ic_launcher.png 9KB
mipmap-xhdpi
ic_launcher_round.png 7KB
ic_launcher.png 4KB
xml
network_security_config.xml 264B
values
colors.xml 208B
ids.xml 101B
strings.xml 1005B
styles.xml 843B
layout
item_common.xml 291B
fragment_mock_login.xml 2KB
fragment_butter_knife.xml 889B
fragment_rx_binding.xml 2KB
item_butter_knife.xml 1KB
activity_fragment_container.xml 243B
fragment_nested.xml 561B
activity_main.xml 594B
fragment_adapter_view.xml 915B
item_adapter_view.xml 1KB
fragment_view_pager.xml 804B
fragment_simple.xml 732B
drawable
ic_launcher_background.xml 5KB
ic_back_material.xml 1KB
AndroidManifest.xml 1KB
proguard-rules.pro 751B
build.gradle 3KB
.gitignore 60B
gradlew.bat 2KB
build.gradle 1KB
settings.gradle 27B
gradlew 5KB
.gitignore 126B
README.md 10KB
共 94 条
- 1
资源评论
JJJ69
- 粉丝: 6350
- 资源: 5918
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- C#ASP.NET大型制造业进销存管理系统源码数据库 SQL2008源码类型 WebForm
- liunx project 2
- (源码)基于ROS框架的智能无人机作业系统.zip
- 网页打包封装器V1.0支持苹果IOS/安卓/分发打包
- (源码)基于BERT的KBQA问答系统.zip
- (源码)基于Java和Python的笔声语音识别系统.zip
- 网络安全基础实验1-使用python中cryptography库进行对称加密和解密实验
- Python数电的课程设计网络同步时钟.zip
- (源码)基于Arduino的天文数据库管理系统.zip
- C#餐饮管理系统源码 触摸屏餐饮管理系统源码数据库 SQL2008源码类型 WinForm
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功