閱讀201 返回首頁    go 阿裏雲 go 技術社區[雲棲]


【短視頻SDK】短視頻SDK License的策略

1.概述

短視頻SDK的使用前提是需要開通License的,否則用戶集成SDK將會不可用.目前需要用戶提供一些基礎信息發送到我們的服務郵箱來保證SDK可用.整體用戶需要保證提供的信息的準確性.SDK需要保證服務的穩定性和可用性.

2.需要提供的參數

iOS: 應用bundleID
Android:包名和簽名信息(MD5、格式小寫無冒號)

2.1 bundleId如何獲取?

你可以直接使用xCode查看,也可以通過代碼獲取:

//代碼段示例
[[NSBundle mainBundle] bundleIdentifier]

2.2 包名和簽名信息如何獲取?

注:獲取簽名有個點需要明確,綁定的keystore不一樣,得到的MD5信息也不一樣,如不指定keystore默認拿到的debug包是自己本地的debug.keystore.

  • 如何指定keystore呢?

    //1.指定keystore簽名文件,如不指定,Android studio會默認讀取本地的keystore
    //這裏演示如何配置keystore,下麵的keystore文件開發者可以自由替換, 一下配置的前提是開發者將keystore文件放在項目的根目錄下.
    signingConfigs {
        debug {
            storeFile file("$rootDir/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    
        release {
            storeFile file("$rootDir/debug.keystore")
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
        }
    }
    
        buildTypes {
    
        debug {
            multiDexEnabled true
            signingConfig signingConfigs.debug
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    
        release {
            minifyEnabled true
            multiDexEnabled true
            signingConfig signingConfigs.release
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
    
  • 配置了keystore簽名了之後,提供一個簡單的獲取MD5簽名的方法.(當然你也可以通過命令行keytool來獲取)

    //2.獲取MD5
    public static String getCertificateSHA1Fingerprint(Context context) {
        //獲取包管理器
        PackageManager pm = context.getPackageManager();
        //獲取當前要獲取MD5值的包名,也可以用其他的包名,但需要注意,
        //在用其他包名的前提是,此方法傳遞的參數Context應該是對應包的上下文。
        String packageName = context.getPackageName();
        //返回包括在包中的簽名信息
        int flags = PackageManager.GET_SIGNATURES;
        PackageInfo packageInfo = null;
        try {
            //獲得包的所有內容信息類
            packageInfo = pm.getPackageInfo(packageName, flags);
        } catch (PackageManager.NameNotFoundException e) {
            e.printStackTrace();
        }
        //簽名信息
        Signature[] signatures = packageInfo.signatures;
        byte[] cert = signatures[0].toByteArray();
        //將簽名轉換為字節數組流
        InputStream input = new ByteArrayInputStream(cert);
        //證書工廠類,這個類實現了出廠合格證算法的功能
        CertificateFactory cf = null;
        try {
            cf = CertificateFactory.getInstance("X509");
        } catch (CertificateException e) {
            e.printStackTrace();
        }
        //X509證書,X.509是一種非常通用的證書格式
        X509Certificate c = null;
        try {
            c = (X509Certificate) cf.generateCertificate(input);
        } catch (CertificateException e) {
            e.printStackTrace();
        }
        String hexString = null;
        try {
            //加密算法的類,這裏的參數可以使MD4,MD5,SHA1等加密算法
            MessageDigest md = MessageDigest.getInstance("MD5");
            //獲得公鑰
            byte[] publicKey = md.digest(c.getEncoded());
            //字節到十六進製的格式轉換
            hexString = byte2HexFormatted(publicKey);
        } catch (NoSuchAlgorithmException e1) {
            e1.printStackTrace();
        } catch (CertificateEncodingException e) {
            e.printStackTrace();
        }
        return hexString;
    }
    //這裏是將獲取到得編碼進行16進製轉換
    private static String byte2HexFormatted(byte[] arr) {
        StringBuilder str = new StringBuilder(arr.length * 2);
        for (int i = 0; i < arr.length; i++) {
            String h = Integer.toHexString(arr[i]);
            int l = h.length();
            if (l == 1)
                h = "0" + h;
            if (l > 2)
                h = h.substring(l - 2, l);
            str.append(h.toUpperCase());
            if (i < (arr.length - 1))
                str.append(':');
        }
        return str.toString();
    }
    

3.為什麼要提供這些參數,會有安全隱患嗎?

目前提供的信息主要是為了保證唯一性,iOS的bundleID是可以保證一定唯一的.安卓的包名和簽名也是可以保證唯一的.隻要用戶使用上麵的方法獲取的簽名跟發送給我們的簽名信息能夠對手.其他的事情用戶
都不需要關心.

4.會不會出現因為服務不可用導致的License不可用?

SDK內部會有機製保障類似情況依舊可以使用.如出現license異常情況可在阿裏雲官網提交工單.

5.期間簽名提交錯誤之後重新提交申請成功之後為什麼沒有馬上生效?

目前SDK內部的策略需要一個自然日(24小時)來同步,如需要馬上看到效果,iOS和安卓都可以卸載開發者自己的應用後重新進入即可.

最後更新:2017-08-28 14:32:24

  上一篇:go  想在Google做好外貿推廣你得注意這些seo優化誤區
  下一篇:go  成為阿裏雲大使遇到的問題