3 初始化

在应用程序启动的 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();
}

Last updated