在应用程序启动的 Application 的 onCreate()
方法中对 SDK 进行初始化。
1. 获取 PolyvSDKClient 实例
PolyvSDKClient
是 Polyv SDK 客户端设置的单例对象。必须设置正确的参数才能正常使用。
//获取 PolyvSDKClient 实例
PolyvSDKClient client = PolyvSDKClient.getInstance();
2. 设置 SDK 加密串
2.1 获取 SDK 加密串
SDK加密串在官网 云点播-设置-API接口 里面可见。同时可以看见 userid
writetoken
readtoken
secretkey
四个用户配置信息。Polyv SDK 需要通过这几个配置信息,才能解密播放视频。
为防止 APP 端被嗅探和反编译到这四个值,需要对此进行加密,所以就有了 SDK加密串
,在服务器端进行加密,APP端对应的进行解密。保利威后台提供的 SDK加密串
只是一种固定的加密方式,仅做演示使用。
对于设置SDK加密串,开发者应当设计自己的加密方式, 在服务端对userid
readtoken
writetoken
secretkey
四个值进行加密,APP端对应的进行解密(建议使用 C 语言在 Native 方法中进行解密),然后将参数传递给SDK。
2.2 设置 SDK 加密串
方式一:使用保利威后台提供的SDK加密串直接设置(不推荐):
PolyvSDKClient client = PolyvSDKClient.getInstance();
client.settingsWithConfigString("你的SDK加密串", "加密密钥", "加密向量");
//client.settingsWithUserid(String userid, String secretkey, String readtoken, String writetoken)
如果在后台 云点播-设置-账号管理 中添加了角色为内容分发的子账号,建议使用settingsWithAppId()
方法而不用直接设置SDK加密串。其中 appid,secretKey
在后台界面子账号中点击修改,查看编辑子账号有该值。userId
仍使用 API 接口中的值。
PolyvSDKClient client = PolyvSDKClient.getInstance();
//client.settingsWithConfigString("你的SDK加密串", "加密密钥", "加密向量");
client.settingsWithAppId(String appId, String secretKey, String userId);
...
方式二:开发者自行对用户配置信息加密,通过网络方式获取(推荐):
以下为 Android 端解密和配置示例,更多加解密例子参考 SDK 加密串正式解决方案。
public class PolyvApplication extends Application {
@Override
public void onCreate() {
new LoadConfigTask().execute();
...
}
private class LoadConfigTask extends AsyncTask<String, String, String> {
@Override
protected String doInBackground(String... params) {
String config = PolyvSDKUtil.getUrl2String("http://demo.polyv.net/demo/appkey2.php");
if (TextUtils.isEmpty(config)) {
try {
throw new Exception("没有取到数据");
} catch (Exception e) {
e.printStackTrace();
}
}
return config;//取得SDK加密串
}
@Override
protected void onPostExecute(String config) {
//解密处理,拿到需要的初始化信息,进行初始化
PolyvSDKClient client = PolyvSDKClient.getInstance();
client.settingsWithConfigString(config, "加密密钥", "加密向量");
//client.settingsWithUserid(String userid, String secretkey, String readtoken, String writetoken)
//...
}
}
}
3. 初始化SDK
PolyvSDKClient client = PolyvSDKClient.getInstance();
//初始化SDK设置
client.initSetting(getApplicationContext());
4. 设置保存目录
设置下载文件保存目录
PolyvSDKClient.getInstance().setDownloadDir("下载视频保存的目录");
5. 设置学员唯一标识
学员唯一标识,也就是viewer id,观众id,学员id。设置学员唯一标识,可以有效定位学员反馈遇到的问题,有效提高SDK 这边单方面排查问题的效率。更多请查看设置学员唯一标识的意义。
client.setViewerId("学员唯一标识");
6. 设置崩溃报告(可选,推荐)
我们在 SDK 中内置了 Bugly 崩溃报告,开发者可以初始化启动(可选)。
//启动Bugly
client.initCrashReport(getApplicationContext());
//启动Bugly后,在学员登录时设置学员id
//client.crashReportSetUserId(userId);
7. 设置HttpDNS(IPV6支持)
注意:在集成2.16.5.1及之后的版本,需要在获取用户隐私授权的前提下,在适当的时机做httpdns启动。以demo中为例:在PolyvMainActivity
中调用 PolyvSDKClient.getInstance().enableHttpDns()方法来启动httpdns。
PolyvSDKClient.getInstance().enableHttpDns(true);
在2.16.5.1之前的版本,SDK 内部默认实现开启了HttpDNS,这能有效进行网络防劫持。但是HttpDNS默认解析的是IPV4的IP,如果需要支持IPV6环境,可以将HttpDNS关闭(v2.13.2起提供)。关闭后将使用域名访问,同时支持IPV4/IPV6。
//v2.13.2起提供了以下接口
//默认开启了HttpDns,使用IPV4
client.enableHttpDns(true);
//如果需要支持IPV6/IPV4,请开启IPV6开关,或者将enableHttpDns设置为false。开启后自动关闭HttpDns,采用域名访问
//client.enableIPV6(true);
2.13.2以前的版本,可以使用反射的方法,关闭HttpDNS。关闭后支持IPV4/IPV6.
//在Application的PolyvSDKClient.getInstance().initSetting(getApplicationContext())初始化后调用
try {
Field[] fields = PolyvSDKClient.getInstance().getClass().getDeclaredFields();
for (int i = 0; i < fields.length; i++) {
Field field = fields[i];
if(field.getType() == HttpDnsService.class){
field.setAccessible(true);
field.set(PolyvSDKClient.getInstance(), null);
break;
}
}
}catch (IllegalAccessException e){
e.printStackTrace();
}