|
創(chuàng)建C-S應(yīng)用程序(Creating a Client-Server App )
C-S應(yīng)用跟其他應(yīng)用在使用JavaScript和TVML上略有不同。Xcode應(yīng)用的主要功能是訪問一個(gè)主JavaScript文件,然后展示由TVML文件創(chuàng)建的頁面到屏幕上。
圖2-1表示出C-S模型
JavaScript文件加載TVML頁,并將每一頁推到導(dǎo)航堆棧上。當(dāng)用戶瀏覽你的應(yīng)用程序,TVML頁在導(dǎo)航堆棧上入棧和出棧。用戶關(guān)閉你的應(yīng)用程序后,Apple TV首屏幕將出現(xiàn)。圖2-2顯示了一個(gè)基本的應(yīng)用程序流程。
圖 2-2C/S 應(yīng)用程序流
構(gòu)建C/S應(yīng)用程序:
打開Xcode,創(chuàng)建一個(gè)新項(xiàng)目。 從tvOS中選擇單視圖應(yīng)用程序模板。 刪除view controller文件和應(yīng)用程序的main storyboard。 打開info.plist文件并刪除main storyboard文件的輸入名稱。
注:更多關(guān)于設(shè)置網(wǎng)絡(luò)安全的信息,查看App Transport Security Technote.
5. 對(duì)AppDelegate.swift 進(jìn)行如下修改:
加入引用TVMLKit 修改類描述為class AppDelegate: UIResponder, UIApplicationDelegate, TVApplicationControllerDelegate {. 加入在你的class中加入如下全局變量:var appController: TVApplicationController? 根據(jù)如下修改application:dIDFinishLaunchingWithOptions:
func?application(application:?UIApplication,?dIDFinishLaunchingWithOptions?launchOptions:?[NSObject:?AnyObject]?)?->?Bool?{????self.window?=?UIWindow(frame:?UIScreen.mainScreen.bounds)????????let?appControllerContext?=?TVApplicationControllerContext????????let?javascriptURL?=?NSURL(string:?"Enter?path?to?your?JavaScript?file?here")????????appControllerContext.javaScriptApplicationURL?=?javascriptURL!????if?let?options?=?launchOptions?{????????for?(kind,?value)?in?options?{????????????if?let?kindStr?=?kind?as??String?{????????????????appControllerContext.launchOptions[kindStr]?=?value????????????}????????}????}????????self.appController?=?TVApplicationController(context:?appControllerContext,?window:?self.window,?delegate:?self)????????return?true}當(dāng)一臺(tái)蘋果電視連接到你的計(jì)算機(jī)時(shí),你可以通過上面例子加載一個(gè)TVML頁面并顯示在模擬器或在電視屏幕上。關(guān)于JavaScript類的更多信息,參見 TVJS Framework Reference.
Listing 2-1中 JavaScript 加載了一個(gè)詢問用戶是否想要更新APP高級(jí)版本的提示框的 TVML 頁面,(Listing 2-2) 。頁面加載完成后被推到導(dǎo)航棧上,然后操作系統(tǒng)展示給用戶。關(guān)于 TVML 模板和元素的更多信息,請(qǐng)查看Apple TV Markup Language Reference.
Listing 2-1 將 TVML 頁面推到導(dǎo)航棧上
function?getDocument(url)?{????var?templateXHR?=?new?XMLHttpRequest;????templateXHR.responseType?=?"document";????templateXHR.addEventListener("load",?function?{pushDoc(templateXHR.responseXML);},?false);????templateXHR.open("GET",?url,?true);????templateXHR.send;????return?templateXHR;}?function?pushDoc(document)?{????navigationDocument.pushDocument(document);}?App.onLaunch?=?function(options)?{????var?templateURL?=?'Enter?path?to?your?server?here/alertTemplate.tvml';????getDocument(templateURL);}?App.onExit?=?function?{????console.log('App?finished');}Listing 2-2 展示提示框的 TVML頁面
重要
當(dāng)從web服務(wù)器上訪問JavaScript和XML文件時(shí),你通常需要確保頁面上的任何更改對(duì)于client app來說都是可見的。這樣你的服務(wù)器就必須確保client不會(huì)緩存任何頁面。當(dāng)服務(wù)器響應(yīng)不應(yīng)緩存的頁面的HTTP請(qǐng)求時(shí),服務(wù)器應(yīng)當(dāng)在HTTP響應(yīng)頭文件中包含Cache-Control:no-cache.
|
上一篇: Apple TV3連接電視無信號(hào)下一篇: Apple TV編程指南——資源管理
|