Files
zhini_im/(红头)友盟文档.txt

513 lines
18 KiB
Plaintext
Raw Normal View History

================================================================================
友盟统计SDK集成配置文档
================================================================================
文档版本: 1.0
创建日期: 2024
用途: 用于排查友盟统计SDK集成问题适用于项目分支切换时的配置检查
================================================================================
一、基本信息
================================================================================
1.1 SDK版本
-----------
- 友盟统计SDK版本: 9.8.8
- 必选依赖库版本:
* com.umeng.umsdk:common:9.8.8
* com.umeng.umsdk:asms:1.8.7
- 可选依赖库版本:
* com.umeng.umsdk:uyumao:1.1.4 (高级运营分析功能)
* com.umeng.umsdk:abtest:1.0.1 (ABTest能力)
1.2 AppKey配置
--------------
- AppKey: 69009244644c9e2c2067d39b
- 渠道标识: default (或 "Channel")
- 配置位置: app/src/main/java/com/xunpaisoft/social/MyApp.java
* 常量定义: UMENG_APP_KEY = "69009244644c9e2c2067d39b"
* 常量定义: UMENG_CHANNEL = "default"
================================================================================
二、依赖配置 (app/build.gradle)
================================================================================
2.1 必需依赖
-----------
在 app/build.gradle 的 dependencies 块中添加:
// 友盟统计SDK - 使用具体版本确保兼容性
implementation 'com.umeng.umsdk:common:9.8.8' // 必选版本9.4.0以上
implementation 'com.umeng.umsdk:asms:1.8.7' // 必选
implementation 'com.umeng.umsdk:uyumao:1.1.4' // 高级运营分析功能依赖库(可选)
implementation 'com.umeng.umsdk:abtest:1.0.1' // U-App中ABTest能力可选
2.2 注意事项
-----------
- 确保依赖版本与SDK版本匹配
- 如果使用Gradle 7.0+,可能需要添加仓库配置
- 检查是否有依赖冲突特别是与高德地图、腾讯地图SDK的冲突
================================================================================
三、初始化流程
================================================================================
3.1 Application中的初始化 (MyApp.java) - 当前工作版本
---------------------------------------------------
位置: app/src/main/java/com/xunpaisoft/social/MyApp.java
方法: onCreate()
行号: 第109-117行
关键代码:
// 预初始化(不会采集设备信息,不会上报数据)
UMConfigure.preInit(this, "69009244644c9e2c2067d39b", "Channel");
// 正式初始化(会采集设备信息并上报数据)
UMConfigure.init(this, "69009244644c9e2c2067d39b", "Channel",
UMConfigure.DEVICE_TYPE_PHONE, "PushSecret");
// 开启Log仅调试模式正式发布请关闭
UMConfigure.setLogEnabled(true);
重要说明(当前工作版本):
- ✅ 预初始化和正式初始化都在 Application.onCreate() 中直接调用
- ✅ 这是老版本的实现方式,简单直接
- ✅ 初始化时机:应用启动时立即初始化,不等待用户同意隐私政策
- ⚠️ 注意:这种方式不符合隐私合规要求,但当前版本可以正常工作
- ⚠️ 如果切换到新版本,需要改为在用户同意隐私政策后初始化
3.2 正式初始化方法 (MyApp.java)
-------------------------------
位置: app/src/main/java/com/xunpaisoft/social/MyApp.java
方法: initUmengSDKFormally()
关键代码:
public static void initUmengSDKFormally() {
if (isUmengInitialized) {
Log.d("MyApp", "友盟统计SDK已经初始化跳过重复初始化");
return;
}
try {
// 正式初始化(会采集设备信息并上报数据)
UMConfigure.init(getApplication(), UMENG_APP_KEY, UMENG_CHANNEL,
UMConfigure.DEVICE_TYPE_PHONE, null);
// 设置日志开关
UMConfigure.setLogEnabled(true);
// 设置页面采集模式(重要:影响启动和活跃数据)
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
// 统计SDK是否支持采集在子进程中打点的自定义事件
UMConfigure.setProcessEvent(true); // 支持多进程打点
// 获取OAIDAndroid Q设备标识
UMConfigure.getOaid(getApplication(), new OnGetOaidListener() {
@Override
public void onGetOaid(String oaid) {
Log.d("MyApp", "获取到OAID: " + oaid);
}
});
isUmengInitialized = true;
// 立即发送一个测试事件
sendTestEvent();
} catch (Exception e) {
Log.e("MyApp", "❌ 友盟统计SDK正式初始化失败", e);
}
}
3.3 初始化状态检查
-----------------
位置: app/src/main/java/com/xunpaisoft/social/MyApp.java
方法: isUmengSDKInitialized()
public static boolean isUmengSDKInitialized() {
return isUmengInitialized;
}
3.4 初始化调用位置(当前工作版本)
---------------------------------
1. Application.onCreate() - 主要初始化位置 ✅
- 第109行: UMConfigure.preInit()
- 第113行: UMConfigure.init()
- 第117行: UMConfigure.setLogEnabled(true)
- 这是当前工作版本的主要初始化方式
2. MainActivity.afterViews() - 备用初始化(如果未初始化)
- 代码位置: MainActivity.java 第332-341行
- 代码:
if (!MyApp.isUmengSDKInitialized()) {
MyApp.initUmengSDKFormally();
}
MyApp.setUserPrivacyAgreement(true);
MyApp.checkUmengDataReportStatus(this);
- 作用: 如果Application中初始化失败在这里进行备用初始化
- 注意: 当前工作版本中Application.onCreate()已经初始化,这里通常不会执行
3. 测试和调试调用
- MainActivity.afterViews() 第343行: testUmengAnalytics()
- MainActivity.afterViews() 第347行: UmengDebugHelper.checkUmengEnvironment(this)
================================================================================
四、工具类配置 (UmengAnalytics.java)
================================================================================
4.1 工具类位置
-------------
app/src/main/java/com/xunpaisoft/social/utils/UmengAnalytics.java
4.2 主要方法
-----------
1. 页面统计:
- onPageStart(Context context, String pageName)
- onPageEnd(Context context, String pageName)
2. 事件统计:
- onEvent(Context context, String eventId)
- onEvent(Context context, String eventId, String eventLabel)
- onEvent(Context context, String eventId, Map<String, String> eventMap)
3. 用户相关:
- setUserId(Context context, String userId)
- onProfileSignOff(Context context)
4. 其他配置:
- setSessionContinueMillis(Context context, long timeout)
- setLogEnabled(boolean enabled)
- getSDKVersion()
4.3 使用示例
-----------
// 页面统计
UmengAnalytics.onPageStart(this, "MainActivity");
UmengAnalytics.onPageEnd(this, "MainActivity");
// 事件统计
UmengAnalytics.onEvent(this, "button_click", "login");
// 自定义事件
Map<String, String> eventMap = new HashMap<>();
eventMap.put("user_type", "vip");
eventMap.put("action", "purchase");
UmengAnalytics.onEvent(this, "user_action", eventMap);
// 设置用户ID
UmengAnalytics.setUserId(this, userId);
================================================================================
五、AndroidManifest.xml配置
================================================================================
5.1 权限配置
-----------
友盟统计SDK需要以下权限通常已在AndroidManifest.xml中配置:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
5.2 埋点验证配置(可选)
-----------------------
在 <application> 标签内添加:
<!-- 友盟统计埋点验证配置 -->
<meta-data
android:name="UMENG_ANALYTICS_DEBUG_MODE"
android:value="false" />
注意: 生产环境应设置为 false
================================================================================
六、关键配置检查清单
================================================================================
6.1 依赖检查
-----------
□ app/build.gradle 中是否添加了友盟统计SDK依赖
□ 依赖版本是否为 9.8.8
□ 是否添加了 asms:1.8.7 依赖?
6.2 初始化检查
-----------
□ Application.onCreate() 中是否调用了 UMConfigure.preInit()
□ Application.onCreate() 中是否调用了 UMConfigure.init()?(老版本)
□ 或者是否在用户同意隐私政策后调用了 initUmengSDKFormally()?(新版本)
□ 是否设置了 UMConfigure.setLogEnabled(true)?(调试模式)
□ 是否设置了 MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO)
6.3 AppKey检查
-----------
□ MyApp.java 中的 UMENG_APP_KEY 是否正确?
□ MyApp.java 中的 UMENG_CHANNEL 是否正确?
□ 是否与友盟后台配置的AppKey一致
6.4 工具类检查
-----------
□ UmengAnalytics.java 是否存在?
□ 是否在页面生命周期中调用了 onPageStart() 和 onPageEnd()
□ 是否在关键事件中调用了 onEvent()
6.5 网络权限检查
-----------
□ AndroidManifest.xml 中是否配置了 INTERNET 权限?
□ AndroidManifest.xml 中是否配置了 ACCESS_NETWORK_STATE 权限?
================================================================================
七、常见问题排查
================================================================================
7.1 SDK未初始化
--------------
症状: 日志显示 "友盟统计SDK未初始化跳过页面统计"
排查:
1. 检查 Application.onCreate() 中是否调用了初始化方法
2. 检查 isUmengSDKInitialized() 返回值
3. 查看 Logcat 中是否有初始化相关的日志
4. 确认是否在用户同意隐私政策后调用初始化(新版本)
7.2 数据未上报
--------------
症状: 友盟后台看不到数据
排查:
1. 检查网络连接是否正常
2. 检查 AppKey 是否正确
3. 检查是否开启了日志: UMConfigure.setLogEnabled(true)
4. 查看 Logcat 中是否有上报相关的日志
5. 确认是否设置了页面采集模式: MobclickAgent.setPageCollectionMode()
6. 等待几分钟,数据上报有延迟
7.3 依赖冲突
-----------
症状: 编译错误或运行时崩溃
排查:
1. 检查是否有重复的依赖
2. 检查是否与其他SDK如高德地图、腾讯地图冲突
3. 查看 build.gradle 中的依赖树: ./gradlew :app:dependencies
4. 检查 packagingOptions 配置
7.4 页面统计不准确
-----------------
症状: 页面停留时间或访问次数不准确
排查:
1. 检查是否在 onResume() 中调用了 onPageStart()
2. 检查是否在 onPause() 中调用了 onPageEnd()
3. 检查页面名称是否唯一且有意义
4. 确认页面采集模式设置正确
================================================================================
八、日志关键字
================================================================================
8.1 初始化相关日志
-----------------
搜索关键字: "MyApp", "友盟", "UMConfigure", "MobclickAgent"
正常日志示例:
D/MyApp: 开始正式初始化友盟统计SDK
D/MyApp: AppKey: 69009244644c9e2c2067d39b
D/MyApp: Channel: default
D/MyApp: ✅ 友盟统计SDK正式初始化完成
D/MyApp: ✅ 开始采集和上报数据
8.2 页面统计日志
---------------
搜索关键字: "UmengAnalytics", "页面开始统计", "页面结束统计"
正常日志示例:
D/UmengAnalytics: 页面开始统计: MainActivity
D/UmengAnalytics: 页面结束统计: MainActivity
8.3 事件统计日志
---------------
搜索关键字: "事件统计", "onEvent"
正常日志示例:
D/UmengAnalytics: 事件统计: button_click, 标签: login
8.4 错误日志
-----------
搜索关键字: "❌", "失败", "错误"
常见错误:
E/MyApp: ❌ 友盟统计SDK正式初始化失败
W/UmengAnalytics: 友盟统计SDK未初始化跳过页面统计
================================================================================
九、调试工具
================================================================================
9.1 UmengDebugHelper
-------------------
位置: app/src/main/java/com/xunpaisoft/social/utils/UmengDebugHelper.java
功能: 检查友盟统计环境
调用: UmengDebugHelper.checkUmengEnvironment(context);
9.2 MyApp.checkUmengDataReportStatus()
------------------------------------
位置: app/src/main/java/com/xunpaisoft/social/MyApp.java
功能: 检查友盟数据上报状态
调用: MyApp.checkUmengDataReportStatus(context);
9.3 测试方法
-----------
在 MainActivity.afterViews() 中:
// 测试友盟统计功能
testUmengAnalytics();
// 友盟统计环境检查
UmengDebugHelper.checkUmengEnvironment(this);
================================================================================
十、关键文件清单
================================================================================
10.1 核心文件
------------
1. app/src/main/java/com/xunpaisoft/social/MyApp.java
- 友盟SDK初始化
- AppKey配置
- 初始化状态管理
2. app/src/main/java/com/xunpaisoft/social/utils/UmengAnalytics.java
- 友盟统计工具类
- 封装统计方法
3. app/src/main/java/com/xunpaisoft/social/utils/UmengDebugHelper.java
- 调试工具类
- 环境检查
4. app/build.gradle
- 依赖配置
5. app/src/main/AndroidManifest.xml
- 权限配置
- 埋点验证配置
10.2 使用位置
------------
1. app/src/main/java/com/xunpaisoft/social/im/main/MainActivity.java
- 页面统计
- 初始化检查
2. 其他Activity和Fragment
- 页面统计调用
- 事件统计调用
================================================================================
十一、版本差异说明
================================================================================
11.1 老版本(当前工作版本)✅ 正在使用
------------------------------------
- 在 Application.onCreate() 中直接调用预初始化和正式初始化
- 代码位置: MyApp.onCreate() 第109-117行
- 关键代码:
UMConfigure.preInit(this, "69009244644c9e2c2067d39b", "Channel");
UMConfigure.init(this, "69009244644c9e2c2067d39b", "Channel",
UMConfigure.DEVICE_TYPE_PHONE, "PushSecret");
UMConfigure.setLogEnabled(true);
- 特点:
✅ 简单直接,初始化成功率高
✅ 不需要用户交互,应用启动即初始化
⚠️ 不符合隐私合规要求(在用户同意前就初始化)
⚠️ 可能在某些应用市场审核时被拒绝
11.2 新版本(隐私合规版本)
--------------------------
- 在 Application.onCreate() 中只调用预初始化
- 在用户同意隐私政策后调用正式初始化
- 代码位置: SplashActivity 或 MainActivity
- 特点: 符合隐私合规要求,但需要用户交互
11.3 切换版本时的注意事项
------------------------
1. 检查初始化调用位置
2. 确认是否需要在用户同意隐私政策后初始化
3. 检查 isUmengSDKInitialized() 的使用
4. 确认日志输出是否正常
================================================================================
十二、快速检查命令
================================================================================
12.1 检查依赖
-----------
在项目根目录执行:
./gradlew :app:dependencies | grep umeng
12.2 检查初始化
-----------
在 Logcat 中搜索:
"MyApp" AND ("友盟" OR "UMConfigure" OR "MobclickAgent")
12.3 检查统计调用
---------------
在 Logcat 中搜索:
"UmengAnalytics" AND ("页面" OR "事件")
================================================================================
十三、联系信息
================================================================================
友盟官方文档: https://developer.umeng.com/docs/119267/detail/118585
友盟技术支持: https://developer.umeng.com/support
================================================================================
十四、当前工作版本关键配置总结
================================================================================
14.1 核心配置(必须检查)
------------------------
1. app/build.gradle 依赖配置第123-127行:
✅ implementation 'com.umeng.umsdk:common:9.8.8'
✅ implementation 'com.umeng.umsdk:asms:1.8.7'
✅ implementation 'com.umeng.umsdk:uyumao:1.1.4'
✅ implementation 'com.umeng.umsdk:abtest:1.0.1'
2. MyApp.java 初始化配置第109-117行:
✅ UMConfigure.preInit(this, "69009244644c9e2c2067d39b", "Channel");
✅ UMConfigure.init(this, "69009244644c9e2c2067d39b", "Channel",
UMConfigure.DEVICE_TYPE_PHONE, "PushSecret");
✅ UMConfigure.setLogEnabled(true);
3. MyApp.java AppKey配置第70-72行:
✅ UMENG_APP_KEY = "69009244644c9e2c2067d39b"
✅ UMENG_CHANNEL = "default"
4. UmengAnalytics.java 工具类:
✅ 文件位置: app/src/main/java/com/xunpaisoft/social/utils/UmengAnalytics.java
✅ 所有统计方法都通过此工具类调用
14.2 验证步骤(快速检查)
----------------------
1. 检查依赖:
- 打开 app/build.gradle
- 确认第123-127行有友盟依赖
2. 检查初始化:
- 打开 MyApp.java
- 确认第109-117行有初始化代码
- 确认第70-72行有AppKey配置
3. 检查工具类:
- 确认 UmengAnalytics.java 文件存在
- 确认 MainActivity 中调用了 UmengAnalytics.onPageStart()
4. 运行验证:
- 运行应用
- 在 Logcat 中搜索 "MyApp" 和 "友盟"
- 应该看到初始化成功的日志
14.3 如果数据未上报,按以下顺序检查
----------------------------------
1. ✅ 检查依赖是否正确添加
2. ✅ 检查 AppKey 是否正确
3. ✅ 检查初始化是否成功(查看日志)
4. ✅ 检查网络连接
5. ✅ 检查是否调用了统计方法
6. ✅ 等待几分钟,数据上报有延迟
7. ✅ 在友盟后台查看"实时统计"是否有数据
================================================================================
文档结束
================================================================================