[Three20] Three20 模組架構簡介(上)

在筆者先前的Three20文章中曾經提到,在本月初最新的Three20大改版中,將長久以來令人詬病的龐大程式庫細分為多個模組,本篇文章將針對這些模組進行簡單的介紹及說明,讓大家能夠對於Three20的架構有基本的概念。
評論
評論

筆者先前的 Three20 文章 中曾經提到,在本月初最新的 Three20 大改版中,將長久以來令人詬病的龐大程式庫細分為多個模組,本篇文章將針對這些模組進行簡單的介紹及說明,讓大家能夠對於 Three20 的架構有基本的概念。

整體架構圖

如前述,Three20 已經分為模組化的架構,開發者可以自由選擇所需要的模組加入到專案中,但這些模組之間有一些相依性的問題,階層的架構如下:

------------------------------------------ |                    UI                  | ------------------------------------------ | UINavigator  |            |   Style    | |--------------|            |------------| |   UICommon   |            |  Network   | ------------------------------------------ |                   Core                 | ------------------------------------------

如圖上所見,如果我們要使用 Three20Style 這個 framework 的話,就會一併加入 Three20Network 和 Three20Core 這兩個必備的底層 framework。但我們不需要擔心是否要自行加入這些相依的 framework,因為在 Three20 的各 framework 內部就有作相關的設定了,我們只需要加入想要使用的 framework 即可。

Three20Core

Three20Core 是整個 Three20 中最底層的 framework,所有的 framework 均相依於這個 framework。在 Three20Core 中提供了許多常用的 helper method、Macro,還有對 Cocoa Touch 的內建類別透過 Category 新增一些額外的方法。

以下列舉幾個在 Three20 中常出現的共用方法、函式:

  • TT_RELEASE_SAFELY(POINTER); -- 將物件 release 後一併將 POINTER = nil;
  • BOOL TTIsStringWithAnyText(id object); -- 檢查物件是否為字串、字串內是否有內容,另有 NSSet、NSArray 的版本
  • NSMutableArray* TTCreateNonRetainingArray(); --  建立一個新的 NSMutableArray 但不會自動 retain 加入的物件,在 delegate 中相當實用
  • NSString* TTPathForBundleResource(NSString* relativePath); -- 取得 Bundle 中特定檔案的 path
  • NSString* TTPathForDocumentsResource(NSString* relativePath); -- 取得 documents 中特定的檔案 path

而針對 Foundation 類別也有許多新增,以下列舉幾個:

  • NSArray
    • - (void)perform:(SEL)selector; -- 對陣列中的每個物件呼叫 selector
  • NSData
    • - (NSString*)md5Hash; -- 取得資料的 md5 hash
  • NSMutableArray
    • - (void)addNonEmptyString:(NSString*)string; -- 加入字串並檢查該字串是否有內容
  • NSString
    • - (BOOL)isWhitespaceAndNewlines; -- 字串是否為空白或換行字元
    • - (NSDictionary*)queryDictionaryUsingEncoding:(NSStringEncoding)encoding; -- 將 URL 字串 parse 為 query dictionary
    • - (NSString*)stringByRemovingHTMLTags; -- 移除字串中的 html tags
    • - (NSString*)md5Hash; -- 取得字串的 md5 hash

Three20Network

Three20Network 主要提供了 TTURLRequest 類別,相對於 Cocoa 內建的 NSURLRequest 而言,此類別有以下特點:

  • 支援各種 HTTP methods
  • 提供修改各種 header 參數
  • 加入字串、檔案作為 parameters
  • 完整的 cache 機制
  • 自動 parse response 並驗證回傳資料
  • 處理 cookies

伴隨著 TTURLRequest,Three20Network 中也有 TTURLResponse 類別及 Protocol、TTURLCache 等類別,有興趣的讀者可以自行閱讀相關原始碼。

Three20UICommon

若 Three20Core 是 Three20 中的基礎,則 Three20UICommon 則是 Three20 中 UI 介面相關類別、函式的基礎了。此類別仍然包含了許多方便的 helper 方法、Macro,也對 UIKit 的現有類別加入許多方法。

以下列舉 Three20UICommon 中的幾個方法,主要是以各種判斷為主:

  • float TTOSVersion(); -- 回傳 iPhone OS 版本
  • BOOL TTIsKeyboardVisible(); -- 檢查 Keyboard 是否在畫面上
  • BOOL TTIsPhoneSupported(); -- 是否有 iPhone
  • UIDeviceOrientation TTDeviceOrientation(); -- 目前的裝置方向
  • void TTAlert(NSString* message); -- 簡化版的 UIAlertView

至於對 UIKit 的新增方法,以 UIWindow 為例:

  • - (UIView*)findFirstResponder; -- 尋找目前的 First Responder,也就是目前虛擬鍵盤的對應物件
  • - (UIView*)findFirstResponderInView:(UIView*)topView; -- 同上,不過從某個 UIView 開始往 subviews 找

小結

在此篇文章中介紹了 Three20 的架構及底層三個模組的用途,在下一篇文章中筆者將繼續探討 Three20 的上層模組,以及 XML、JSON 兩個附屬的額外模組,還請各位多多指教!


Cookie 消失?試試看全新 AI 影像內容辨識:讓用戶看的內容決定看到的廣告

Google Chrome 即將淘汰幫助廣告主的工具—— Cookie ,它的離去將再一次地影響數位廣告產業。
評論
Photo Credit:<a href="https://www.shutterstock.com/zh/image-photo/ai-artificial-intelligence-big-data-internet-1075853384" target="_blank">shutterstock</a>
評論

透過GA分析進站者發現, Safari的新客數越來越多,難道這表示 iOS 的用戶數也跟著增加了嗎?注意了,這有可能是 Apple 封鎖第三方 Cookie 帶來的影響。隨著 Google 即將淘汰 Chrome 上的 Cookie ,這個幫助廣告主記住用戶受眾的小工具,將要再一次地影響數位廣告產業。

Photo Credit:驚點股份有限公司( FreakOut Taiwan )

後 Cookie 時代的廣告受眾如何鎖定?

各大廣告平台在過去幾年不斷地透過 Cookie 以及其它方式,悄悄收集使用者的用戶數據,隨著這幾年用戶的隱私權意識抬頭, Apple 與 Google 對於藉由 Cookie 辨識用戶資料的廣告投遞方式,持有不同的態度,這也將是所有廣告主的極大挑戰。當 Cookie 不復存在,要如何辨識使用者資料?

Cookie 消失了,或許會有新的數據辨識工具來取代,但是任何試圖跟蹤受眾的方式,都難以符合大眾對於保護隱私權的期望。另一方面,也極有可能無法再通過日趨嚴格的媒體監管限制。無論如何,數位廣告不能像過去一樣,無條件地使用類似 Cookie 的追蹤方式,來達到與現在同樣的廣告效果。

後 Cookie 時代內容辨識類型的廣告鎖定方式,將成為未來具指標性的投放策略。廣告與瀏覽平台或內文主題的高相關性,不僅能顯著提高受眾的互動度,更重要的是,完全不需要收集任何個人數據。

FreakOut Taiwan 不斷嘗試更友善的廣告投遞形式, 自 2016 年進入台灣市場的原生廣告,到 2020 年末引進「 Mirrors 」 AI 影像視覺內容辨識系統,都是以網路使用者的角度出發。「 Mirrors 」不需要使用傳統的受眾興趣設定,即可針對「目標受眾在觀看的影像內容」、「品牌自身競爭對手或相關指定系列產品出現的影片」來投遞 YouTube 上的影音廣告。

Photo Credit:驚點股份有限公司( FreakOut Taiwan )

AI 人工智慧影像技術突破,推動新一代內容辨識功能

傳統的內容比對廣告皆為自然語言處理 NLP 中心,基於「純文字」的比對來顯示相關廣告,如大家很熟悉的 Google AdSense 。但是,結合新興的 AI 演算和複雜的圖像辨識,已然能夠達到「影片」的內容偵測,透過增加多個比對層和基於自然語言處理 NLP 的基準定位,可深度學習並提供更精細的辨識洞察力。

舉例來說,若想要將汽車廣告投放給對汽車有興趣的人,我們要先從可能對汽車感興趣的受眾中開始推估,並且根據過去的經驗加入不同的興趣條件,最後針對素材更進一步地測試。透過 Mirrors ,我們可以讓廣告出現在有滿足特定條件的影片內,例如:在消費者觀看的影片中,出現汽車評測報告、自家品牌或競爭對手的 LOGO 、代言人等指定條件,再依照不同廣告主設定的預算判斷是否露出廣告。

藉由這樣的影像比對方式,可以更有效地根據消費者行為觸發廣告投遞條件,而不再是現行的用戶受眾數據。人的興趣是多樣且多變的,當對汽車有興趣的用戶在完成汽車的選購後,短期內將不會再瀏覽相關資訊,轉而瀏覽其他更具時效性的內容。透過消費者當下正在觀看的影片內容,取代消費者身上被貼上的數位標籤,將更貼近消費者本身的使用行為。

Photo Credit:驚點股份有限公司( FreakOut Taiwan )

Mirrors AI 影像辨識:用消費者看的內容決定廣告

2021 年台灣數位報告指出,台灣人在各網路內容服務中,最愛「網路影片」的比例高達 97.9%,遠超過 Vlog、串流音樂、網路廣播、Podcast 。

影音廣告早已是品牌經營的趨勢:根據 DMA 2019 年台灣數位廣告量統計報告指出,台灣各類型廣告中,影音廣告以 37.2% 的成長比例大幅領先奪冠。其中 YouTube 持續蟬聯台灣最常被造訪網站第 2 名(僅次於 Google ) ,在台灣各大影音平台中的觸及率及影響力不容小覷。

2021 年 FreakOut Taiwan 已與客戶合作,進行搭載新系統的 YouTube 串流內廣告投遞,在針對品牌及產品客製化的多層鎖定策略建議下,房地產廣告的 CTR 表現高於平均,並發現「人臉」群組辨識表現為佳,其中多為財經、名嘴等名人。而美妝品牌廣告 VTR 表現優異,則以品牌「 Logo 」、「人臉」群組有最出色的表現。

本文章內容由「驚點股份有限公司( FreakOut Taiwan )」提供,經關鍵評論網媒體集團廣編企劃編審。