載入您的已簽署Token

Flash執行階段TVSDK需要有簽名的Token,以驗證您有權在應用程式所在的網域上呼叫TVSDK API。

  1. 從您的Adobe代表取得每個網域的簽名Token(其中每個網域可以是特定網域或萬用字元網域)。

    若要取得Token,請提供Adobe以儲存或載入您應用程式的網域,或以SHA256雜湊的形式提供網域。作為回報,Adobe會為您提供每個網域的已簽署Token。 這些預付碼採用下列其中一種形式:
    
    • .xml檔案,用作單一網域或萬用字元網域的Token。

      注意

      萬用字元網域的Token涵蓋該網域及其所有子網域。 例如,域mycompany.com的萬用字元也會涵蓋vids.mycompany.com和private.vids.mycompany.com;vids.mycompany.com的萬用字元也會涵蓋private.vids.mycompany.com。 只有某些Flash Player版本才支援萬用字元網域Token。

    • .swf檔案,包含多個網域的Token資訊(不包括萬用字元)(單一或萬用字元),您的應用程式可動態載入。

  2. 將Token檔案儲存在與應用程式相同的位置或網域中。

    依預設,TVSDK會在此位置尋找代號。 或者,您也可以在HTML檔案的flash_vars中指定Token的名稱和位置。

  3. 如果您的Token檔案是單一XML檔案:

    1. 使用utils.AuthorizedFeaturesHelper.loadFrom下載儲存在指定URL(Token檔案)的資料,並從中擷取authorizedFeatures資訊。

      這個步驟可能有所不同。 例如,您可能想在啟動應用程式之前先執行驗證,或直接從您的內容管理系統(CMS)接收Token。

    2. 如果載入成功,TVSDK將調度COMPLETED事件,否則調度FAILED事件。 偵測到任一事件時,請採取適當的動作。

      這必須成功,您的應用程式才能以MediaPlayerContext的形式,將必要的authorizedFeatures物件提供給TVSDK。
      此範例說明如何使用單一Token .xml檔案。

    private function loadDirectTokenURL():void {
        var url:String = constructAuthorizedFeatureTokenURL();
        _logger.debug("#onApplicationComplete Loading token from [{0}].", url);
        _authorizedFeatureHelper = new AuthorizedFeaturesHelper();
        _authorizedFeatureHelper.addEventListener(Event.COMPLETE,
            onFeatureComplete);
        _authorizedFeatureHelper.addEventListener(ErrorEvent.ERROR,
            onFeatureError);
         _authorizedFeatureHelper.loadFrom(url);
     }
    
  4. 如果您的Token是.swf檔案:

    1. 定義Loader類別,以動態載入.swf檔案。

    2. 設定LoaderContext以指定載入在目前應用程式網域中,讓TVSDK在.swf檔案中選擇正確的Token。 如果未指定LoaderContext,則Loader.load的預設動作是在目前網域的子網域中載入。swf。

    3. 請監聽COMPLETE事件,如果載入成功,TVSDK會調度該事件。

      此外,還監聽ERROR事件並採取適當的操作。

    4. 如果載入成功,請使用AuthorizedFeaturesHelper獲取包含PCKS-7編碼安全資料的ByteArray

      此資料會透過AVE V11 API使用,以從Flash執行階段播放器取得授權確認。 如果位元組陣列沒有內容,請改用程式來尋找單網域Token檔案。

    5. 使用AuthorizedFeatureHelper.loadFeatureFromData從位元組陣列獲取所需資料。

    6. 卸載.swf檔案。

    下列範例說明如何使用多Token .swf檔案。

    多重Token範例1:

    private function onApplicationComplete(event:FlexEvent):void {
        var url:String = constructAuthorizedFeatureTokenURLFromSwf();
        _loader = new Loader();
        var swfUrl:URLRequest = new URLRequest(url);
        var loaderContext:LoaderContext =
            new LoaderContext(false, ApplicationDomain.currentDomain, null);
        _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,
            modEventHandler);
        _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,
            errEventHandler);
        _loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,
            onProgressHandler);
        _loader.uncaughtErrorEvents.addEventListener(UncaughtErrorEvent.
            UNCAUGHT_ERROR, uncaughtEventHandler);
        _logger.debug("# Loading token swf with context from [{0}].", url);
        _loader.load(swfUrl, loaderContext);
    }
    
    private function modEventHandler(e:Event):void {
        _logger.debug("loadSWF with domainID {0}",
        SecurityDomain.currentDomain.domainID);
        var loader : Loader = e.currentTarget.loader as Loader;
        var myAuthorizedTokensLoaderClass:Class =
            loader.contentLoaderInfo.applicationDomain.
            getDefinition("AuthorizedTokensLoader") as Class;
        var myTokens:Object = new myAuthorizedTokensLoaderClass();
        _authorizedFeatureHelper = new AuthorizedFeaturesHelper();
        _authorizedFeatureHelper.addEventListener(Event.COMPLETE, onFeatureComplete);
        _authorizedFeatureHelper.addEventListener(ErrorEvent.ERROR, onFeatureError);
        var byteArray:ByteArray = myTokens.
            FetchToken(SecurityDomain.currentDomain.domainID);
        if (myTokens == null || byteArray == null || byteArray.length == 0)
            loadDirectTokenURL();
        else {
            _logger.debug("token bytearry size {0}", byteArray.length);
            _authorizedFeatureHelper.loadFeatureFromData(byteArray);
        }
        _loader.unload();
    }
    

    多重代號範例2:

    private function tokenSwfLoadedHandler(e:Event):void {
        trace("loadSWF with domainID {0}", SecurityDomain.currentDomain.domainID);
        var loader : Loader = e.currentTarget.loader as Loader;
        var myAuthorizedTokensLoaderClass:Class =
          loader.contentLoaderInfo.applicationDomain.
          getDefinition("AuthorizedTokensLoader") as Class;
        var myTokens:Object = new myAuthorizedTokensLoaderClass();
        authorizedFeatureHelper = new AuthorizedFeaturesHelper();
        authorizedFeatureHelper.addEventListener(Event.COMPLETE, onFeatureComplete);
        authorizedFeatureHelper.addEventListener(ErrorEvent.ERROR, onFeatureError);
        var byteArray:ByteArray =
            myTokens.FetchToken(SecurityDomain.currentDomain.domainID);
        var myDomains:Array = ["domain.com"];
        if (byteArray == null || byteArray.length == 0) {
            // check for wildcard tokens
            if (myTokens.hasOwnProperty("FetchWildCardToken") == true) {
                // contains wildcard domains
                for each (var domain:String in myDomains) {
                    byteArray = myTokens.FetchWildCardToken(domain);
                    if (byteArray != null && byteArray.length != 0) {
                        break;
                    }
                };
            }
        }
    
        if (myTokens == null || byteArray == null || byteArray.length == 0)
            loadDirectTokenURL();
        else {
            trace("token bytearry size {0}", byteArray.length);
            authorizedFeatureHelper.loadFeatureFromData(byteArray);
        }
        _loader.unload();
    }
    
    private function loadDirectTokenURL():void {
        trace("#onApplicationComplete Loading token from [{0}].", tokenUrl);
        authorizedFeatureHelper = new AuthorizedFeaturesHelper();
        authorizedFeatureHelper.addEventListener(Event.COMPLETE, onFeatureComplete);
        authorizedFeatureHelper.addEventListener(ErrorEvent.ERROR, onFeatureError);
        authorizedFeatureHelper.loadFrom(tokenUrl);
    }
    

本頁內容