Appearance
当前版本:V1.1
苏州必捷网络有限公司
1 概述
1.1 目的
用于指导使用必捷License申请 SDK的开发人员进行开发及测试。
1.2 读者对象
本文档适用于使用必捷License申请 SDK的开发人员。
2 范围
2.1 功能
本SDK为License申请SDK,用于提供AirPlay、DLNA、BJCast、MiraCast、GoogleCast等SDK的开放授权。
本SDK为标准的Android AAR模块,提供JAVA接口供应用集成。
2.2 SDK框架
License SDK分为两个:
cast_base_lib-1.0.53-release.aar:它是一个Android Module,它定义了基础的MediaChannel,Module接口。
bj_license_v3_apply-1.0.17-release.aar:它是一个Android Module,定义了BJLicenseMoudle,以及相关JNI接口。
2.3 SDK交付物
- SDK库(两个AAR文件)
- SDK接口文档
3 接口
接口主要在BJLicenseMoudle类中进行定义;
3.1 BJLicenseMoudle类中的接口说明
3.1.1 初始化LicenseSDK
3.1.1.1 初始化接口1
java
public int init(Context context, Properties paras)
描述
BJLicenseMoudle类的Init方法用于初始化License申请模块。App在启动做初始化时调用,BJLicenseMoudle对象应设计为全局只有一个实例。
参数
名称 | 描述 |
---|---|
context | Android应用上下文 |
paras | 为SDK初始化属性集合,paras为Properties类型。 通过键值对的方式初始化sdk的参数 |
其中paras支持以下常用属性的设置:
属性名 | 描述 | 必填 |
---|---|---|
license_check_token | 由必捷分配,用于初始化SDK的license校验和包名认证,防止被其它用户盗用 | 否 |
license_check_pass | 由必捷分配,用于初始化SDK的license校验密码,防止盗用 | 否 |
返回值
0表示成功,其它表示初始化失败
3.1.1.2 初始化接口2
java
public int init(Context context, Properties paras, Object userdata)
描述
一般SDK用户无需关心此接口,使用3.1.1.1接口即可。此接口是针对特定用户的定制化需求而开发,具体业务请咨询我司接口人。
BJLicenseMoudle类的Init方法用于初始化License申请模块。App在启动做初始化时调用,BJLicenseMoudle对象应设计为全局只有一个实例。
参数
名称 | 描述 |
---|---|
context | Android应用上下文 |
paras | 为SDK初始化属性集合,paras为Properties类型。 通过键值对的方式初始化sdk的参数 |
userdata | 特定用户对象。根据实际某些定制业务场景设计。 |
其中paras支持以下常用属性的设置:
属性名 | 描述 | 必填 |
---|---|---|
license_check_token | 由必捷分配,用于初始化SDK的license校验和包名认证,防止被其它用户盗用 | 否 |
license_check_pass | 由必捷分配,用于初始化SDK的license校验密码,防止盗用 | 否 |
返回值
0表示成功,其它表示初始化失败
调用示例
java
BJLicenseMoudle moudle = BJLicenseMoudle.getInstance();
Properties initP = new Properties();
initP.setProperty("license_check_token",licenseCheckToken);
initP.setProperty("license_check_pass",licensePass);
moudle.init(BJCastSdk.getInstance().getContext(), initP, null);
注意事项
普通SDK用户不需要关心此接口。
初始化时还支持指定一些其它定制化的属性,或者针对某些业务场景的属性(如酒店投屏场景需要自动隐藏不被外部发现),这部分属性属于特定业务场景才需要使用的功能,在本文没有列出,如有需求请与我司商务/技术接口人对接咨询。
此接口从1.0.17版本开始支持,为某些特定用户定制的特殊需求,SDK内部会访问userdata的某些方法和属性,此处必须要求userdata类没有被混淆并且传入userdata时必须为可用状态,具体使用和对接请与我司技术接口人咨询。
3.1.2 授权申请
3.1.2.1 授权申请接口1
java
public ApplyLicenseRetInfo applyLicense(String userCode, String deviceId, int proGuardMode, String proGuardSalt)
描述
向必捷授权服务器申请授权时调用,需要网络服务。
参数
名称 | 描述 |
---|---|
userCode | 必捷提供 |
proGuardMode | 是否混淆,0为不混淆,1为启用混淆 |
deviceId | 设备唯一标识码,如果开启混淆则填入唯一标识码混淆后的值 |
proGuardSalt | 开启混淆时的混淆参数,如果没有开启混淆则填空字符串,不可填null |
返回值
ApplyLicenseRetInfo对象,其含义请参考3.1.2.3节描述。
示例代码
java
ApplyLicenseRetInfo info = moudle.applyLicense(usercode,deviceId, 0, "");
if(info.getRetcode() == 0){
key = info.getLicenseKey();//请注意次就好保存对应的key
}
注意事项:
申请授权成功后请做好持久化保存,切勿重复进行申请。
若用户希望对DeviceID进行混淆,上述两个申请方式的混淆规则请按照下面示例代码:
java
//方法中的src为设备唯一标识码 加 proGuardSalt
private String sah1DeviceId(String src) {
String deviceId = "";
Log.d(TAG, "sah1DeviceId: src " + src);
try {
byte[] msg = src.getBytes("UTF-8");
MessageDigest md = MessageDigest.getInstance("SHA1");
deviceId = encodeHex(md.digest(msg));
} catch (Exception e) {
Log.e(TAG, "execute SHA1 error", e);
}
return deviceId;
}
3.1.2.2 授权申请接口2
java
public ApplyLicenseRetInfo applyLicenseWithLicenseNo(String userCode, String licenseNO, String deviceId, int proGuardMode, String proGuardSalt)
描述
向必捷授权服务器申请授权时调用,需要网络服务。
此接口使用必须使用必捷授权服务预先分配的licenseNO。
参数
名称 | 描述 |
---|---|
userCode | 必捷提供 |
proGuardMode | 是否混淆,0为不混淆,1为启用混淆 |
deviceId | 设备唯一标识码,如果开启混淆则填入唯一标识码混淆后的值 |
proGuardSalt | 开启混淆时的混淆参数,如果没有开启混淆则填空字符串,不可填null |
licenseNO | 由必捷为客户预先分配的License序列号,一个序列号与一个deviceId进行绑定(不允许重复绑定) |
返回值
ApplyLicenseRetInfo对象,其含义请参考3.1.2.3节描述。
注意事项
申请授权成功后请做好持久化保存,切勿重复进行申请。
3.1.2.3 ApplyLicenseRetInfo结构
名称 | 描述 |
---|---|
retcode | 申请错误码 |
licenseKey | 必捷服务器返回的License许可证内容,需要存储到硬件的合适位置 |
申请错误码:
0 | 成功 |
---|---|
701 | 此授权码(productId)无效 |
702 | 此授权码(productId)已过期 |
703 | 授权码设备注册数量已达到上限 |
704 | 该序列号不合法 |
705 | 该序列号已被使用 |
706 | 该设备注册次数已达上限 |
707 | 该设备已注册,序列号不匹配 |
708 | 注册失败 |
709 | 该 deviceId 已混淆注册成功,请不要重复注册 |
710 | 该 deviceId 未混淆注册成功,请不要重复注册 |
711 | 授权码字符串分配长度过低, 避免内存泄漏 返回错误 |
712 | 操作系统不匹配 |
713 | deviceId 不能为空(请检查申请 license 过程是否填入有效的 deviceId) |
714 | 授权方式不匹配(普通和预分配) |
715 | 非法的deviceId |
716 | 不属于白名单 |
1001 | license_check_token校验失败,包名不匹配 |
1002 | license_check_token校验失败 |
1003 | license_check_pass密码校验失败 |
1004 | license_check_token校验失败,非法的校验类型 |
3.1.3 获取当前License相关信息
java
public int getLicenseInfo(String userCode, LicenseInfo info)
描述:
用于获取当前License的过期时间,授权总数量和申请次数。
参数
名称 | 描述 |
---|---|
userCode | 必捷提供 |
LicenseInfo | 数据返回对象 |
返回值
0表示成功,其它表示初始化失败
返回值 | 含义 |
---|---|
0 | 成功 |
示例代码
java
LicenseInfo info = new LicenseInfo();//初始化LicenseInfo,不可以为null
int error = BJLicenseMoudle.getInstance().getLicenseInfo(usercode,info);
Log.d(TAG, "license " + error + " Date:"+info.licExpiryDate+ " sum :"+info.licenseSum+" reg:"+info.licenseRegisted );
LicenseInfo内部属性
名称 | 描述 |
---|---|
licenseSum | License总数 |
licenseRegisted | License注册数 |
licExpiryDate | License过期时间 |
4 客户如何使用SDK
4.1 混淆规则
-keepclasseswithmembernames class * {
native <methods>;
}
-keep class com.bjnet.licensev3.apply.** { *; }
4.2 集成简要说明
- 导入aar,在app目录下新建libs目录,并将aar文件放在该目录下,然后在build.gradle(app)中dependencies上方及内部分别添加如下代码:repositories{ flatDir { dirs ’libs ’} },compile (name: ‘bj_license_v3_apply-1.0.17-release.aar’, ext: ‘aar’) compile (name: ‘cast_base_lib-1.0.36-release.aar’, ext: ‘aar’)。
- 混淆规则请按照4.1节要求设置。