百宝箱开放平台 ✖️ 友盟+SDK接入准备 ✖️ Android 集成说明

28 阅读4分钟

本文将介绍如何通过 SDK 实现百宝箱与友盟+ Android 应用进行集成。

1. 环境及权限声明

请通过如下代码示例进行应用配置以及权限的声明。

<manifest ……>
  <uses-sdkandroid:minSdkVersion="8"></uses-sdk>
  <uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permissionandroid:name="android.permission.ACCESS_WIFI_STATE"/>
  <uses-permissionandroid:name="android.permission.INTERNET"/>
  
  <!-- 根据智能体实际功能声明以下权限,若智能体需要LBS位置,务必声明该权限 -->
  <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<application ……>

其中,各配置说明如下。

配置项必填说明
minSdkVersion表示该应用可以在 Android 2.2 (API Level 8) 及以上版本的设备上运行。
ACCESS_NETWORK_STATE允许应用检查网络连接状态, 常用于判断是否可以安全地进行网络请求。
ACCESS_WIFI_STATE允许应用获取当前 Wi-Fi 连接的信息,如 SSID、BSSID、信号强度等。通常用于需要识别当前连接的 Wi-Fi 网络的场景。
INTERNET允许应用访问互联网,进行网络通信(如 HTTP 请求、Socket 连接等)。
ACCESS_FINE_LOCATION允许应用通过 GPS、Wi-Fi、基站等方式获取精确位置(精度可达几米)。
ACCESS_COARSE_LOCATION允许应用通过 Wi-Fi 或移动网络获取大致位置(精度约几十到几百米)

2. 混淆设置

如果您的应用使用了代码混淆,为避免友盟+ SDK被错误混淆导致 SDK 不可用问题,请参照以下命令进行混淆设置。

-keep class com.umeng.** { *; }

-keepclassmembers class *{
     public<init>(org.json.JSONObject);
}
-keepclassmembers enum *{
      publicstatic**[] values();
      publicstatic** valueOf(java.lang.String);
}

若在处理 apk 的过程中出现 proguard 被删除的问题,可参照下述命令添加配置。

-keep publicclass [您的应用包名].R$*{ 
      publicstaticfinalint*;
}

3. 集成说明

3.1. 初始化 SDK

通过调用宿主应用的 application.onCreate函数来完成初始化。

/**
* 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调
* 用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,
* UMConfigure.init调用中appkey和channel参数请置为null)。
*/
UMConfigure.init(Context context,String appkey,String channel,int deviceType,String pushSecret);

UMAgent.init(Context context, String appKey);

或者

/** 
* 注意:如果您已经在AndroidManifest.xml中配置过appkey和channel值,可以调用此版本初始化函数。
*/
UMConfigure.init(Context context,int deviceType,String pushSecret);

UMAgent.init(Context context, String appKey);

关于Channel 渠道的使用命名规范如下:

  • 使用规范: 每台设备仅记录首次安装激活的渠道,在其他渠道再次安装不会重复计量。 所以在测试不同的渠道的时候,请使用不同的设备来分别测试,不要改变 UMENG_CHANNEL
  • 命名规范:
    • 以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。
    • 首尾字符不可以为空格。
    • 不要使用纯数字作为渠道ID。
    • 最多256个字符。
    • “unknown” 及其各种大小写形式,作为【友盟+】保留的字段,不可以作为渠道名。

3.2. (可选)预初始化 SDK

若无法保证 App 能够在 Appcalition.onCreate 函数中调用 UMConfigure.init 初始化函数,则必须在 Appcalition.onCreate 函数中调用下述命令进行预初始化。

说明:

  • 对于有延迟初始化 SDK 需求的场景(不能在 Application.onCreate 函数中调用 UMConfigure.init 初始化函数),必须在 Application.onCreate 函数中调用 UMConfigure.preInit 预初始化函数(该函数 preInit 耗时极少,不会影响冷启动体验),而后 UMConfigure.init 函数可以按需延迟调用(可以放到后台线程中延时调用,可以延迟,但还是必须调用)。
  • 如果您的 App 已经是在 Application.onCreate 函数中调用UMConfigure.init 进行初始化,则无需额外调用 UMConfigure.preInit 预初始化函数。
  • 详细说明可参见:SDK 预初始化
public static void preInit(Context context,String appkey,String channel)

3.3. 查看日志

可以通过调用如下方法控制 SDK 的运行,调试日志是否输出。 SDK 运行调试日志默认关闭,需要用户手动开启。

UMConfigure.setLogEnabled(true);
UMAgent.setLogEnabled(true);

3.4. 查看集成效果

通过 UMAgent.startAgentActivity 方法打开本地智能体页面,需要传入 agentId。

UMAgent.startAgentActivity(Context context, String agentId)

4. demo 工程

📎UAgent_Demo_Android-main-ab521c16a85345e68d99da16b8032bcd94b536eb.zip

工程运行效果

打开智能体效果

说明: 工程运行时需要填入的参数如下。