保利威文档中心

幫助中心

3 初始化

更新時間:2024-12-16 19:20:47

在應用程式啟動的 Application 的 onCreate() 方法中對 SDK 進行初始化。

1. 取得 PolyvSDKClient 實例

PolyvSDKClient 是 Polyv SDK 用戶端設定的單例物件。必須設定正確的參數才能正常使用。

//获取 PolyvSDKClient 实例
PolyvSDKClient client = PolyvSDKClient.getInstance();

2. 設定 SDK 加密串

2.1 取得 SDK 加密串

SDK 加密串在官網 雲點播-設定-API 介面 裡面可見。同時可以看見 useridwritetokenreadtokensecretkey 四個使用者設定資訊。Polyv SDK 需要透過這幾個設定資訊,才能解密播放影片。

為防止 APP 端被嗅探和反編譯到這四個值,需要對此進行加密,所以就有了 SDK加密串 ,在伺服器端進行加密,APP 端對應的進行解密。保利威後台提供的 SDK加密串 只是一種固定的加密方式,僅做演示使用。

對於設定 SDK 加密串,開發者應當設計自己的加密方式,在服務端對 useridreadtokenwritetokensecretkey 四個值進行加密,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();
}
联系客服,在线咨询