Apple TV Tech Talks 東京現場筆記

蘋果在 2015 年 12 月到 2016 年 1 月,在世界幾個主要都市舉辦一系列名為 Apple TV Tech Talks 的官方技術講座,主題為去年十月推出的第四代 Apple TV 上的 App 開發。

筆者的公司(KKBOX)派出兩員參加 2016 年 1 月 21 日在東京新宿舉辦的場次。在早上八點,冒著低溫趕到大樓林立的東京都廳對面的活動場地希爾頓飯店後,開始一整天的活動。

蘋果派出三名「推廣傳教士」(evangelist),進行總共九場、每場約三十分鐘的英文技術演講,也就是除休息時間外的連續五個小時的課程,除了與開發本身相關的議程之外,也包含部分設計與市場行銷的議題。

此外也有一個「Q&A Lounge」供開發者詢問開發過程中所遇到的問題。我們之前遇到了一些問題,也在現場獲得解決。本文先就當天的內容做一摘要。

Living Room Experience:客廳中的使用體驗

蘋果以為,蘋果透過了 iPhone 與 iPad,創造了最近幾年行動裝置上的變革,並且為許許多多的開發者帶來在行動裝置上開發、銷售軟體的機會,接下來,蘋果希望將這樣的改變與機會帶到電視上,讓開發者有更多的機會,把自己的軟體帶到無數用戶的客廳中。

原本在 iOS 的 SDK(軟體開發套件)中的許多 Framework,像 UIKit、SpriteKit、Metal 等,在 Apple TV 上都可以使用,但是在 Apple TV 上,還有比 iPhone、iPad 更強大的 A8 晶片,原本在 iOS 上的應用移植到了 Apple TV 之後,可以享受更好的效能、呈現出更豐富的視覺效果。

但是,在設計電視應用的時候,就要注意客廳中的使用體驗(Living Room Experience)。

Apple TV 是在客廳中的產品,與電腦及手機都不同,屬於另外一種情境,不該貿然就把電腦與手機上的使用體驗,直接移植到電視上。

與電腦相較,用戶在客廳中就是要放鬆與娛樂;因此,在 Apple TV 上應該要避免各種繁複的操作。像是在畫面中要選擇任何一個功能時,用的是可以容錯(forgiving)的 Focus 系統,讓用戶可以透過輕鬆橫畫與直畫,將焦點移動到下一個可以被選取的項目上,而不該使用精確操作的鼠標(cursor)。

雖然用戶也習慣鼠標操作,但鼠標是種精確的操作、是工作時使用的;當用戶回到家中,我們應該要讓用戶忘記工作。

與手機相較,手機是屬於個人專用的裝置,但電視則是整個家庭一起共享,因此需要考慮多人共同使用的情境。而電視使用遙控器作為輸入裝置,資料輸入的方便程度,也不及手機。

因此,在 TV App 的設計上要注意:

  • 在 Apple 載入資料的過程中,必須:

  • 避免空白畫面,要讓用戶知道目前正在準備資料;

  • 在等待的過程中,可以同時教育用戶 App 功能,或是用一些素材娛樂用戶;

  • 盡可能事前就在背景載入資料,節省資料載入的時間。

  • 登入與授權:

  • 有必要的時候,才要用戶登入。像購物 App 應該要讓用戶先看到商品資料,等到用戶要購買商品時,才需要用戶登入;

  • 在註冊過程中,盡可能避免收集不必要的資料,像只需要知道用戶名稱與 email 即可;

  • 可以使用其他裝置做 web 登入,像是讓用戶用手機掃描 TV app 裡頭的 QR code,然後用手機登入;

  • 做一個與 TV app 搭配的手機 App,幫助用戶登入;

  • 如果有多個用戶使用,應該要實作帳號切換功能,像 AirBnb 就允許多個帳號(不過蘋果自己這方面都沒做好,一台 Apple TV 只能使用一個 Apple ID);

  • 將還原購買功能做得更明顯,讓用戶使用 Apple TV 時,可以馬上還原曾經在手機上購買的虛擬商品。

  • 進入使用環境(Onboarding):

  • 要讓用戶可以盡早進入 App 中使用,避免過多的說明後,才讓用戶使用;

  • 在用戶使用到某項功能的時候,才顯示必要的說明;

  • 使用適當的語言與用戶溝通:

  • 可以參考蘋果在 2014 年全球開發商大會(WWDC)時提到的 Onboarding 設計

  • 千萬不要在產品設計中使用鼠標。

在視覺上:

  • 盡量使用 Apple TV 上的透視效果(Parallax),讓整個 Apple TV 上有一致的使用體驗;

  • 要清楚。包含:畫面要讓用戶隔著一整個客廳的距離都可以看得清楚,文案不要含糊不清讓人誤解意思,而且盡量使用蘋果為了清晰顯示而設計的 San Francisco 字體。

  • 不要放置無用的訊息。電視就是讓人娛樂的,不要用過多的訊息造成用戶的負擔,而且盡量使用大螢幕的優點。

此外,由於 Apple TV 是放置在家中,不像人們會經常帶著行動裝置移動,因此 Apple TV 會一直保持在連線狀態中(always connected),因此在使用體驗上,不該設計離線狀態。

也就是說,用戶資料應該盡可能儲存在雲端上,Apple TV 對於本地儲存也有相當大的限制,而當一套 App 的檔案很大時,也不需要讓用戶一開始就下載完整的檔案;可以將整個 App 的資料切成許多小包,有需要的時候再透過網路載入(on-demand resource loading)。

技術相關課程

在 Tech Talks 上與技術相關的課程包括:

  • 負責 Apple TV 上整個資訊瀏覽系統的「Focus Engine」;

  • 如何把 Siri 語音控制功能當做遊戲搖桿使用,以及如何處理其他外接 MFi 搖桿的事件;

  • Video Player 元件(AVFoundation)以及 HTTP Live Streaming Video 串流;

  • 如何開發 TVML app;

  • Apple TV 上的本機資料、與雲端資料儲存;

  • 如何提昇顯示效能;

  • 如何實作 Top Shelf⋯⋯等等。

其中有相當多是我們從過去的 iOS 開發經驗、以及去年11月份我們開始透過文件學習 Apple TV 開發時,就已經掌握的技術。例如在顯示效能方面,主要就是各種的 Core Animation 動畫技巧,像是在 UI 中盡可能減少半透明圖層、盡量將多個圖層壓扁成同一個圖層、使用陰影時避免只設定 Shadow Radius,而是還要設定 Shadow Path⋯⋯等等。

在技術上主要獲得的新知,是對 Focus Engine 的進一步了解,像是我們之前遇到在某些狀況下無法正確將 Focus 移動到某些元件上,我們學到可以透過 customize focus guides (一套被建立在 auto-layout 系統下的 focus 移動管理機制)達成。

像如何使用

GCController

GCMicroGamePad

GCEventViewController

等 class,把 Siri Remote Control 變成搖桿,以及連接更多的 MFi 搖桿,也說得相當完整,不過畢竟我們還沒有開始開發 Apple TV 上的遊戲應用,就沒有留下多少筆記。

蘋果也透露了在 tvOS 中,可以對每個 view 呼叫一組叫做

_whyIsThisViewNotFocusable

的 private method,用來知道為什麼某個元件無法變成 focus 起來的 view。話說在 Swift 裡頭無法直接呼叫 private 的 Objective-C API 對不對?他們還特別教你⋯⋯你還是可以呼叫

performSelector

在媒體播放部分,蘋果鼓勵開發者在播放影片的時候,使用

AVPlayerViewController

;因為這個 class 不但具備影片播放功能,還可以顯示額外的影片 metadata,像是標題、敘述等等,還可以在調整播放時間的時候,直接在時間軸上顯示該時間的影片預覽圖片(蘋果稱這個功能「Trick Play」),如果影片有字幕的話,也可以處理多國語文字幕。

在 Apple TV 上,還可以使用 Apple TV 中 Siri 的「What did she say」功能。也就是說,當我們看影片時,覺得聽不清楚某個人的台詞時,就可以叫出 Siri,問 Siri「她剛剛說了什麼」,Siri 就會跳回不久前的片段,並且顯示字幕。

要讓

AVPlayerViewController

顯示影片 metadata,需要設定一個

ACMetadataItem

物件給 player。要提供 Trick Play,則要在 m3u8 檔案中,準備一軌為 IFrame 的 track。至於字幕的部分,可以參考 WWDC 2013 的影片「Preparing and Presenting Media for Accessibility」。

在 TVML 部分,蘋果除了提到可以使用各種不同的 template 呈現 App 的外觀外,也提到如何使用 native code 呼叫 TVML 裡頭的 JavaScript,以及反過來用 JavaScript 呼叫 native code。

要讓 TVML 的 application controller 執行一段 JavaScript,便是向

TVApplicationController

的 instance 呼叫

-evaluateInJavaScriptContext:completion:

;反過來,則要先建立一個 confront

JSExport

的一套 protocol,再由某個物件實作這套 protocol。

最後,呼叫

-evaluateInJavaScriptContext:completion:

,在裡頭對拿到的

JSContext

物件呼叫

-setObject:forKeyedSubscript

,將這個物件設定到

JSContext

中,便可是可以讓 JavaScript 呼叫的物件。

蘋果其實有放出 Tech Talks 上使用的 sample code 與相關說明,請參考蘋果網站

商業與行銷相關課程

蘋果在最後一場課程中,講的是 TV app 的行銷相關主題。

蘋果拿出目前 App Store 中的數據,認為 TV app 與行動裝置 app 的市場相當不同;也就是說,iOS 的定價策略用在 Apple TV 上不見得行得通。

在 iOS 上,Free(完全免費)與 Freemium(免費下載後提供付費內容)類型的 App 總共佔了八成,付費 App 僅佔兩成;但在 TV app 中,Free App 與 Freemium App 僅佔一半,有一半的 App 是付費 App,看起來 Apple TV 用戶會更習慣付費使用 App 的模式。

因此,做 TV App 時,可以考慮與 iOS App 不同的商業模式,甚至同一套 App 做了 iOS 版本之後,在移植到 Apple TV 上時,也可以考慮改變商業模式。

在考慮商業模式的時候,便可以考慮是否使用 Universal Purchase。Universal Purchase 的意思便是:在購買了 iOS 版本之後,其實也就同時購買了 Apple TV 版本,iOS app 與 TV app 共用相同的定價,在手機購買之後,也會出現在 Apple TV 的「已購買 app」的列表中。

不過如此一來,就無法就 iOS app 與 TV app 分別定價,如果想要使用不同價格販售,TV app 需要使用另外的 app ID 上架。

蘋果提供了目前十大 iOS App 的國家/地區排行,分別是美國、日本、中國、英國、澳洲、加拿大、德國、法國、韓國與台灣。

蘋果也強調,想要擴張市場,一個可行的方向便是向海外擴張;如果是日本的開發者,在日本市場推出之後,便可以思考下一個目標便是英語版本,畢竟前十大地區就有美國、英國、澳洲、加拿大等四個英語國家,然後再考慮推出一些歐語版本。

在推出其他語言版本時,務必要翻譯 App 裡頭、以及 App Store 頁面的內容。

蘋果花了一些時間介紹如何對 App Store 做最佳化,以及讓 App 被 App Store 列為「特別推薦」(featured)的流程。

在 App Store 上架的時候,我們可以對 App 設定關鍵字,關鍵字最長可以使用 100 個字元、使用逗號分隔;蘋果建議我們把 100 個字元全部用完,盡可能填入最多的相關關鍵字,中間不用加上空白。

如果同一個關鍵字的英文有單數與複數之分,不用額外填入複數的版本,只要單數即可,App Store 上會自動把用戶輸入的複數關鍵字,與我們的單數關鍵字做好關連。

如果你希望蘋果 feature 你的 App,蘋果對 TV app 的標準是:

  • 要夠獨特,之前沒有人做過;

  • 符合客廳中的使用體驗;

  • 充分發揮 Siri Remote Control 的能力;

  • 對第一次使用的用戶來說非常驚艷(fantastic);

  • 效能也要好。

蘋果選擇 Feature App 的流程是:

  • 蘋果每週四更新一次推薦 App 的名單;

  • 遇到節慶(過年、聖誕)的時候,也會建立特別的名單;

  • 如果要在某個地區的 App 商店被推薦,要有該地區的本土化翻譯內容;

  • 最好是搭配該 App 初次在市場上發表。

想要被蘋果 Feature,可以寫信給蘋果:

  • 寫信到 appstorepromotion@apple.com;

  • 寫上完整的產品介紹,而且務必要記得附上 App Store 裡頭的 product ID。蘋果特別強調 product ID,看來過去真的不少人忘記填寫;

  • 提供接下來的產品發展方向(roadmap);

  • 提供該 App 的媒體資料包(media-kit)等行銷素材;

  • 大概在第三次到第四次 release 版本的時候,會是聯絡蘋果的最佳時機。