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.ipolyv.cn/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();
}
