Skip to content

当前版本: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分为两个:

  1. cast_base_lib-1.0.53-release.aar:它是一个Android Module,它定义了基础的MediaChannel,Module接口。

  2. 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对象应设计为全局只有一个实例。

参数

名称描述
contextAndroid应用上下文
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对象应设计为全局只有一个实例。

参数

名称描述
contextAndroid应用上下文
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操作系统不匹配
713deviceId 不能为空(请检查申请 license 过程是否填入有效的 deviceId)
714授权方式不匹配(普通和预分配)
715非法的deviceId
716不属于白名单
1001license_check_token校验失败,包名不匹配
1002license_check_token校验失败
1003license_check_pass密码校验失败
1004license_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内部属性

名称描述
licenseSumLicense总数
licenseRegistedLicense注册数
licExpiryDateLicense过期时间

4 客户如何使用SDK

4.1 混淆规则

-keepclasseswithmembernames class * {
    native <methods>;
}
-keep class com.bjnet.licensev3.apply.** { *; }

4.2 集成简要说明

  1. 导入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’)。
  2. 混淆规则请按照4.1节要求设置。