全部产品
云市场

友盟Android SDK使用方法

更新时间:2020-03-19 10:14:13

下载SDK

重要说明:AIRec需要配合友盟基础组件库 2.0.0+版本和统计SDK 8.0.0+版本一起使用。

1. Android SDK下载
2. 解压下载后的zip文件,将得到common目录下的基础组件库umeng-common-2.1.0.jar及analytics目录下的umeng-analytics-8.1.2.jar拷贝到目标工程libs目录下,并将其加入工程依赖。

12

3. 将最新版本智能推荐SDK包(AIRec SDK以aar方式提供)拷贝到目标工程libs目录下,并将其加入工程依赖。

34

基础SDK初始化

  1. 在友盟官网注册账号,并申请Appkey。友盟基础组件库的初始化函数需要传入此Appkey。
  2. 在目标工程Application.onCreate函数中执行友盟基础组件库初始化函数,设置统计SDK页面统计模式,如果您的工程没有实现Application.onCreate函数,请自行实现Application类并将其加入AndroidManifest.xml清单文件。下面的示例代码摘自AIRec SDK集成Demo工程。
    1. package com.umeng.airecdemo;
    2. import android.app.Application;
    3. import android.content.Context;
    4. import android.content.pm.ApplicationInfo;
    5. import android.content.pm.PackageManager;
    6. import android.text.TextUtils;
    7. import android.util.Log;
    8. import com.umeng.airec.RecAgent;
    9. import com.umeng.analytics.MobclickAgent;
    10. import com.umeng.commonsdk.UMConfigure;
    11. import java.util.HashMap;
    12. import java.util.Map;
    13. public class MyApp extends Application {
    14. private final static String APPKEY = "appkey";
    15. private final static String CHANNEL = "channel";
    16. private final static String DEFAULT_APPKEY = "58edcfeb310c93091c000be2";
    17. private final static String DEFAULT_CHANNEL = "Unknown";
    18. @Override
    19. public void onCreate() {
    20. super.onCreate();
    21. Context appContext = this;
    22. String appkey = DEFAULT_APPKEY;
    23. String channel = DEFAULT_CHANNEL;
    24. Map config = getAppkeyAndChannel(appContext);
    25. if (config != null) {
    26. if (config.containsKey(APPKEY)) {
    27. appkey = (String)config.get(APPKEY);
    28. }
    29. if (config.containsKey(CHANNEL)) {
    30. channel = (String)config.get(CHANNEL);
    31. }
    32. }
    33. // 友盟SDK调试Log开关,App上线前请关闭Log开关
    34. UMConfigure.setLogEnabled(true);
    35. // 友盟SDK初始化,需要设置友盟Appkey(需从友盟官网注册申请),及应用发布渠道
    36. // 友盟SDK初始化说明文档: https://developer.umeng.com/docs/66632/detail/101814
    37. UMConfigure.init(this, appkey, channel, UMConfigure.DEVICE_TYPE_PHONE, null);
    38. // 友盟统计SDK页面采集模式,建议使用自动页面采集
    39. // 友盟统计SDK集成说明: https://developer.umeng.com/docs/66632/detail/101848
    40. MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
    41. // AIRec SDK调试Log开关,App上线前请关闭Log开关。
    42. RecAgent.setDebugMode(true);
    43. // AIRec SDK初始化
    44. boolean initStatus = RecAgent.init();
    45. if (!initStatus) {
    46. Log.i("RecAgent", "AIRec SDK initialization failed.");
    47. }
    48. }
    49. // 从AndroidManifest.xml中读取预先配置的appkey和channel
    50. public static Map<String, String> getAppkeyAndChannel(Context ctx) {
    51. if (ctx == null) {
    52. return null;
    53. }
    54. Map result = new HashMap<String, String>();
    55. String appkey = null;
    56. String channelName = null;
    57. try {
    58. PackageManager packageManager = ctx.getPackageManager();
    59. if (packageManager != null) {
    60. //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
    61. ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
    62. if (applicationInfo != null) {
    63. if (applicationInfo.metaData != null) {
    64. appkey = applicationInfo.metaData.get("UMENG_APPKEY")+"";
    65. channelName = applicationInfo.metaData.get("UMENG_CHANNEL")+"";
    66. }
    67. }
    68. }
    69. } catch (PackageManager.NameNotFoundException e) {
    70. e.printStackTrace();
    71. }
    72. if (!TextUtils.isEmpty(appkey)) {
    73. result.put(APPKEY, appkey);
    74. }
    75. if (!TextUtils.isEmpty(channelName)){
    76. result.put(CHANNEL, channelName);
    77. }
    78. return result;
    79. }
    80. }
    如果需要使用友盟统计SDK高级功能,请参考如下链接:友盟统计SDK集成文档

    基础SDK权限授予

    需要在目标工程AndroidManifest.xml清单文件中加入如下权限:
    1. <!-- 必须的权限 -->
    2. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    3. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    4. <uses-permission android:name="android.permission.READ_PHONE_STATE" />
    5. <uses-permission android:name="android.permission.INTERNET" />

    基础SDK混淆配置

    如果您的应用使用了代码混淆,请添加如下配置,以避免基础SDK被错误混淆导致SDK不可用。
    1. -keep class com.umeng.** {*;}
    2. -keepclassmembers class * {
    3. public <init> (org.json.JSONObject);
    4. }
    5. -keepclassmembers enum * {
    6. public static **[] values();
    7. public static ** valueOf(java.lang.String);
    8. }
    SDK需要引用导入工程的资源文件,通过了反射机制得到资源引用文件R.java,但是在开发者通过proguard等混淆/优化工具处理apk时,proguard可能会将R.java删除,如果遇到这个问题,请添加如下配置:
    1. -keep public class [您的应用包名].R$*{
    2. public static final int *;
    3. }

    智能推荐SDK集成

    SDK API说明

    请在完成友盟基础组件库初始化函数调用之后调用AIRec SDK初始化函数。 请在调用AIRec SDK初始化函数之后再调用其它功能接口函数。

• 初始化函数 RecAgent.init();

  1. /**
  2. * 初始化函数
  3. * @return
  4. * true:正确初始化,可以正常使用;
  5. * false: 初始化失败,友盟基础组件库、统计SDK未正确集成及初始化
  6. */
  7. public static boolean init();

例子:

  1. boolean initStatus = RecAgent.init();
  2. if (!initStatus) {
  3. Log.i("RecAgent", "AIRec SDK initialization failed.");
  4. }

实例代码摘自Demo工程如下路径:app/src/main/java/com/umeng/airecdemo/MyApp.java• 调试Log开关函数 RecAgent.setDebugMode(true);

  1. /**
  2. * 调试Log开关函数,SDK默认情况下调试Log关闭
  3. * @param debug
  4. * true: 开启调试Log输出
  5. * false: 关闭调试Log输出
  6. */
  7. public static void setDebugMode(boolean debug);

例子:

  1. // AIRec SDK调试Log开关,App上线前请关闭Log开关。
  2. RecAgent.setDebugMode(true);

实例代码摘自Demo工程如下路径:app/src/main/java/com/umeng/airecdemo/MyApp.java

• 设置UserId函数 RecAgent.setUserId(userId);

  1. /**
  2. * 设置用户identity。
  3. * @param userId 非空字符串。
  4. */
  5. public static void setUserId(String userId);

例子:

  1. private static final String BIZ_ID = "bizid1233456";
  2. // ...
  3. btSetBizID.setOnClickListener(new View.OnClickListener() {
  4. @Override
  5. public void onClick(View v) {
  6. RecAgent.setUserId("test_user12345");
  7. RecAgent.setLogin(true);
  8. }
  9. });

实例代码摘自Demo工程如下路径:app/src/main/java/com/umeng/airecdemo/MainActivity.java

• 设置UserId函数 RecAgent. setLogin(status);

  1. /**
  2. * 设置用户登录状态。
  3. * @param status true: 用户已登录; false: 用户未登录。
  4. */
  5. public static void setLogin(boolean status);

例子:

  1. // ...
  2. btSetBizID.setOnClickListener(new View.OnClickListener() {
  3. @Override
  4. public void onClick(View v) {
  5. RecAgent.setUserId("test_user12345");
  6. RecAgent.setLogin(true);
  7. }
  8. });

实例代码摘自Demo工程如下路径:app/src/main/java/com/umeng/airecdemo/MainActivity.java

• 推荐事件触发函数 RecAgent.onRecEvent

  1. /**
  2. * 行为事件类型
  3. */
  4. public enum BHV_EVT_TYPE {
  5. expose, // 曝光
  6. click, // 点击
  7. cart, // 加入购物车
  8. buy, // 购买
  9. collect, // 收藏
  10. like, // 点赞
  11. unlike, // 点衰
  12. comment, // 写评论
  13. share, // 分享
  14. subscribe, // 订阅
  15. stay // 停留
  16. }
  17. /**
  18. * 推荐事件接口函数
  19. * @param context 接口调用ApplicationContext上下文对象
  20. * @param traceIdStr TRACE_ID,效果跟踪ID,不能为null,可以使用:RecAgent.TRACEID_ALIBABA 或者 RecAgent.TRACEID_SELFHOLD,也可以自定义其它值
  21. * @param traceInfo 字符串类型参数,不能为null或者空字符串,效果跟踪信息
  22. * @param itemId 字符串类型参数,不能为null或者空字符串,物品ID
  23. * @param itemType 字符串类型参数,不能为null或者空字符串,物品类型
  24. * @param attribute 用户自定义属性K-V键值对,可以为null,属性K-V值都必须是字符串类型
  25. * @param bhvType 枚举类型BHV_EVT_TYPE,行为事件类型,不能为null
  26. * @param bhvValue 字符串类型参数,不能为null或空字符串,
  27. * 1. 如果传入的bhvType参数为click,bhvValue 传 1;
  28. * 2. 如果传入的bhvType参数为stay,
  29. * 则本参数应该可转换为long型值,如果传入参数不能成功转换为long型值,则使用默认值0.
  30. * 此时参数含义为停留时长,时间单位:s;
  31. * 3. 如果传入的bhvType参数为其它值,则本参数为可选,不指定传入null或空字符串即可。
  32. * @param bizId 必填否则行为事件不生效
  33. * @param sceneId 完全自定义
  34. */
  35. public static void onRecEvent(Context context,
  36. String traceIdStr,
  37. String traceInfo,
  38. String itemId,
  39. String itemType,
  40. Map<String, String> attribute,
  41. BHV_EVT_TYPE bhvType,
  42. String bhvValue,
  43. String bizId,
  44. String sceneId)

例子:

  1. btRecEvent.setOnClickListener(new View.OnClickListener() {
  2. @Override
  3. public void onClick(View v) {
  4. // 自定义属性
  5. Map<String, String> args = new HashMap<>();
  6. args.put("page_id", "12345");
  7. args.put("module_id", "23456");
  8. args.put("position_id", "34567");
  9. RecAgent.onRecEvent(context,
  10. "Alibaba",
  11. "TraceInfo_123",
  12. "item_id_2233",
  13. "item_type_book",args,RecAgent.BHV_EVT_TYPE.click,"12356AA",BIZ_ID,"");
  14. }
  15. });

实例代码摘自Demo工程如下路径:app/src/main/java/com/umeng/airecdemo/MainActivity.java

SDK集成调试

AIRec SDK调试Log开关打开时,SDK会输出相关调试信息。过滤TAG字段为”RecAgent”。