SDK集成文档
目录
1 概述.....................................................................2
2 环境配置要求............................................................2
3 基础使用说明............................................................3
3.1 前期准备....................................................3
3.2 终端客户端接入方式..........................................3
3.3 引入SDK(jar).............................................4
3.4 配置manifest注册AppId....................................4
3.5 配置manifest文件为sdk组件做静态注册......................5
3.5.1添加权限配置清单.........................................5
3.5.2添加系统组件注册清单.....................................6
3.5.3系统静态广播接收者组件...................................6
3.5.4动态更新组件.............................................7
4 接口调用说明............................................................7
4.1 SDK初始化..................................................7
4.2 设置SDK的DEBUG模式.......................................8
4.3 设置初始化终端SDK获取设备信息的实现DmykAbsTelephonyManage8
终端出厂时需将终端管理SDK集成至终端操作系统,先提供此集成文档供终端厂家参考。终端需实现规范要求API供SDK调用,详情参见《终端管理接口规范(终端能力开放接口分册)V1.0.1》,终端厂家在集成SDK后需保证对用户不可见,详细要求请参考《终端管理终端技术规范V1.0.1》。
本SDK仅限于终端适配联调使用,终端送测及正式发售前需更换商用版SDK,调试版SDK域名指向终端适配管理平台,打开日志输出,终端厂商可以从终端适配平台查看终端上报信息、修改配置参数,心跳周期在调试版中做了比例缩短处理。商用版SDK域名指向商用平台,关闭日志输出,终端厂商无法查看平台相关数据,心跳周期按规范要求设定,其余代码均无区别。适配集成过程中如果有问题可以先查阅《终端管理客户端集成适配FAQ》文档。
Android Studio
Tool | Version |
gradle | 2.2.3+ |
compileSdkVersion | 21+ |
minSdkVersion | 14+ |
targetSdkVersion | 21+ |
Eclipse
compileSdkVersion | 21+ |
minSdkVersion | 14+ |
targetSdkVersion | 21+ |
终端厂商需实现终端能力开放相关接口,按要求封装成相应的库,以便于终端客户SDK集成调用,相关包名、类名设计及实现参考终端管理接口规范(终端能力开放接口分册)。
接入方式一:
图3-1 终端客户端SDK集成方案
终端厂商将终端SDK内嵌至已有的常用系统及应用,确保其终端自注册信息采集正常,业务处理正常,保证客户端具备开机自启动权限,具备涉及联网、数据采集所需要的所有系统权限,保证客户端进程不会被系统安全管理软件清除。
其中终端客户端SDK主要实现相关数据采集的及业务功能设置,实现终端数据上报终端管理及服务平台。终端厂商需要实现终端管理接口,完成终端SDK内置集成。
接入方式二:
图3-2 终端客户端APK集成方案
终端厂商将终端客户端封装成独立的APK,同时将其需声明为系统应用,同时终端厂商相关接口需过滤掉应用信息,使用户不可见,无感知,确保其终端自注册信息采集正常,业务处理正常,保证客户端具备开机自启动权限,具备涉及联网、数据采集所需要的所有系统权限,需要能够做到常驻内存,保证客户端进程不会被系统安全管理软件清除,影响终端SDK的数据采集和上报。
终端管理APK主要实现相关数据采集的及业务功能设置,实现终端数据上报终端管理及服务平台。终端厂商需要实现终端管理接口,将APP内置为系统级应用,同时屏蔽所有能查询APP相关信息接口。
在需要集成的project中引入SDK,拷贝至libs目录下并添加引用。
3.4 添加图片引用
拷贝 icon_dm.png至res目录下的drawable文件夹下,为sdk在特定条件下弹出Notification通知添加图片引用。
<meta-data
android:name="dmkey"
android:value="1234415234123kk"/>
每一个终端厂商都对应有唯一的AppKey,是作为管理终端厂商的唯一标识,在集成时需同步修改成对应的值,该AppKey一般由终端管理及服务平台生成,一般在平台从可以查到,如果没有,可以联系相关人员获取。
注:同厂家不同型号终端使用相同AppKey。
3.6 配置manifest文件为sdk组件做静态注册
<uses-permission android:name="android.permission.INTERNET" />//网络权限 <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
//接收开机启动广播 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
//获取WiFi状态
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
//读取网络相关信息 <uses-permission android:name="android.permission.READ_PHONE_STATE" />
//获取手机rom,ram等信息 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
//获取rom <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
//写日志 <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
//写日志 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
//读取cell id和lac <uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" tools:ignore="ProtectedPermissions"/>
//获取应用使用的相关信息 <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" tools:ignore="ProtectedPermissions"/>
//读写apn的数据库
注册系统基础服务组件
<service android:name="cn.richinfo.dm.service.DMService" android:exported="true" > </service>
3.6.3 系统静态广播接收者组件
<receiver android:name="cn.richinfo.dm.receiver.DMBroadCastReceiver"> <intent-filter > <action android:name="android.intent.action.BOOT_COMPLETED"/> <action android:name="com.dmyk.android.telephony.action.SIM_STATE_CHANGED"/> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> <intent-filter> <action android:name="android.dmyk.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> <intent-filter> <action android:name="cn.richinfo.dmyk.action.APPINFO" /> <action android:name="cn.richinfo.dmyk.action.APPINFO_RETRY" /> </intent-filter> <intent-filter> <action android:name="cn.richinfo.dmyk.action.REGISITER" /> <action android:name="cn.richinfo.dmyk.action.REGISITER_RETRY" /> <action android:name="cn.richinfo.dmyk.action.HEARTBEAT" /> <action android:name="cn.richinfo.dmyk.action.HEARTBEAT_RETRY" /> </intent-filter> <intent-filter> <action android:name="cn.richinfo.dmyk.action.APN" /> <action android:name="cn.richinfo.dmyk.action.APN_RETRY" /> </intent-filter> <intent-filter> <action android:name="com.dmyk.android.telephony.action.VOLTE_STATE_CHANGE" /> <action android:name="com.dmyk.android.telephony.action.APN_STATE_CHANGE" /> </intent-filter> </receiver>
4 接口调用说明
系统APP需要在Application的入口函数onCreate(Bundle)方法中对DMSDK.init(Application);进行初始化操作,加载SDK启动所需要的资源。
4.2 终端SDK获取设备信息的实现DmykAbsTelephonyManage
所有厂商自行创建com.dmyk.android.telephony.DmykAbsTelephonyManager类,并在其中实现文档中的17个抽象方法。
5 SDK日志管理/异常分析
5.1 日志保存路径
sdk在Debug调试模式下会自动生成日志文件,存储路径为Environment.getExternalStorageDirectory() + "/DMLog",不同厂商对该接口是实现逻辑不一致,通常都在SD存储卡的DMLog目录下面。每一个日志文件的命名都是基于日期来定义。
5.2 日志TAG标签分析
日志记录的每一条调试信息都会包含<日期+类型+TAG+SDK_VERSION+Message>等多种信息,来帮助厂商和SDK开发人员分析定位在集成过程中出现的各种异常问题。
RegisterMsgReport | 自注册相关日志TAG,如果自注册成功会打印“RegisterMsgReport自注册成功” |
HeartbeatMsgReport | 心跳相关日志TAG,上报成功会打印“心跳成功” |
PostApplyMsgReport | 上报应用使用信息TAG,可以查看应用上报的信息 |
ApnInfoReport | APN信息上报TAG,上报成功会打印“apn上报成功” |
currentRetryCount0 | 查找当前的重试次数,最后的数值为第几次重试次数 |