[CS193P] 第十三堂課摘要及心得筆記

在這一堂的課程中,我們將學到如何在Cocoa Touch上使用Core Foundation和AddressBook這兩個Framework將我們的應用程式與iPhone OS上的通訊錄做結合,創造出更多有趣的應用程式。就讓我們一起來看看吧!
評論
評論

在這一堂的課程中,我們將學到如何在 Cocoa Touch 上使用 Core Foundation 和 AddressBook 這兩個 Framework 將我們的應用程式與 iPhone OS 上的通訊錄做結合,創造出更多有趣的應用程式。就讓我們一起來看看吧!

Core Foundation

Core Foundation 是 Cocoa Touch 底層的 Framework,以 C 語言為主。其所提供的功能就如同我們常常使用的 Foundation Framework 一般,一樣有提供 Array、String、Dictionary 等 API。例如:

  • NSArray => CFArrayRef
  • NSString => CFStringRef
  • retain = CFRetain
  • release = CFRelease

事實上,大多數的 Foundation Framework API 底層也是透過 Core Foundation 實做的。因此,幾乎兩個 Framework 的函式和物件都可以通用,如下方程式片段:

CFArrayRef array = ABAddressBookCopyPeopleWithName(...); NSLog(@“%d”, [(NSArray *)array count]); NSMutableArray *mutableArray = [(NSArray *)array mutableCopy]; [mutableArray release]; if (array) {     CFRelease(array); }

而在記憶體管理上,Core Foundation 所提供的物件也都有 retain count 的概念,物件一樣在使用完畢後也得 release 才行。在 Core Foundation 的命名慣例上,所有以 Create 結尾的函式都會回傳已經 retain 過的物件。

值得注意的是,C 語言並不像 Objective-C 一樣可以對 nil 物件呼叫函式,在 C 語言中,所有的函式呼叫都要先檢查是否不等於 NULL:

CFStringRef string = CreateSomeCFString...; if (string != NULL) {     DoSomethingWith(string);     CFRelease(string); }

當然我們也可以使用 Foundation Framework 來操作,方便許多:

NSString *string = (NSString *)CreateSomeCFString...; NSLog(@“%@”, [string lowercaseString]); [string autorelease]; // autorelease 也可以使用

那 為什麼我們要談 Core Foundation 呢?原因是 AddressBook Framework 也是以 C 語言為基礎,所回傳的物件也都是 Core Foundation 的物件,所以在我們使用 AddressBook 的 API 之前,必須要先熟悉 Core Foundation 的一些使用方法。

AddressBook

在這次的課程中,講者透過打造一個社群網路的網站作為主軸,向大家示範 AddressBook 的使用方式。而這個應用程式的運作流程為如下:

  1. 從網路下載資料
  2. 搜尋本機中是否已經有對應的聯絡人
  3. 更新資料
  4. 顯示資料

在進行後續步驟之前,我們必須先建立 AddressBookRef 的物件,這個物件會協助我們連接通訊錄所儲存的資料庫,而這個資料庫是全系統共通的,換句話說,我們可以建立很多 AddressBookRef,但最後都是存取同一份資料。如下段程式碼所示:

ABAddressBookRef ab = ABAddressBookCreate();

而在 AddressBook 中,每一筆聯絡人的資料就是 ABRecordRef,這裡面包含了聯絡人的所有 properties,像是姓名、電話或是頭像等等。每個 property 會有不同的型別,像是 CFString、CFDate 等等。而有些 property 會有多重 value,像是 E-mail 就又可以分成工作的 E-mail 和私人的 E-mail。這些 properties 都被定義在 ABPerson.h 裡面,有興趣的讀者還可以參考。

對於只有單一 value 的 property,可以使用以下程式片段:

CFStringRef first = ABRecordCopyValue(person, kABPersonFirstNameProperty); // 獲得 property CFDateRef date = CFDateCreate(...); ABRecordSetValue(person, kABPersonBirthdayProperty, date, &error); // 設定 property

ABMultiValueRef 則是用來處理多重 value 的 property 類別,以一個樹狀的結構呈現,每個不同的 value 都會有相對應的 label,如下圖所示:

而我們可以透過以下 API 來取得資料:

  • CFIndex count = ABMultiValueGetCount(multiValue); // 有多少不同 value
  • CFTypeRef value = ABMultiValueCopyValueAtIndex(mv, index); // 取得 value
  • CFStringRef label = ABMultiValueCopyLabelAtIndex(mv, index); // 取得 label
  • CFIndex identifier = ABMultiValueGetIdentifierAtIndex(mv, index); // 取得 identifier

也可以透過以下 API 儲存資料,除了設定聯絡人的 property 之外,我們也需要將整個 AddressBook 存回系統:

ABMultiValueRef urls = ABRecordCopyValue(person, kABPersonURLProperty); // 取得原有的 URL property ABMutableMultiValueRef urlCopy = ABMultiValueCreateMutableCopy(urls); // 建立新的 URL property ABMultiValueAddValueAndLabel(urlCopy, "the url", "social", NULL); // 加入新的 value 和 label ABRecordSetValue(person, urlCopy, kABPersonURLProperty); // 將新的 URL property 存回聯絡人 ABAddressBookSave(ab, &err); // 將整個 AddressBook 存回系統資料庫

而當完成更新資料後,下一個動作就是要在畫面上顯示聯絡人,而在顯示之前,可以先做排序:

CFMutableArrayRef people = // 取得存放聯絡人的 array CFRange fullRange = CFRangeMake(0, CFArrayGetCount(people)); ABPersonSortOrdering sortOrdering = ABPersonGetSortOrdering(); CFArraySortValues(people, fullRange, ABPersonComparePeopleByName, (void*)sortOrdering);

也可以透過 Objective-C 的 Framework:

[people sortUsingFunction:ABPersonComparePeopleByName context: (void*)sortOrdering];

而最後,AddressBook 也提供了 ABRecordCopyCompositeName(person); 以取得使用者的名稱。

以上大概就是簡單的 AddressBook 操作流程。

PersonViewController

當我們需要顯示 ABPerson 的詳細資料時,ABPesonViewController 就會提供很好的幫助,如下圖:

而 ABPersonViewController 有以下幾種 Property:

  • displayedPerson -- 顯示的 person
  • displayedProperties -- 顯示的 properties
  • allowsEditing -- 是否允許修改

而當我們要新增聯絡人資料時,則可以使用 ABUnknownPersonViewController,當使用者編輯完成之後,會呼叫 delegate 的方法:

- (void)unknownPersonViewController:(ABUnknownPersonViewController *) unknownCardViewController didResolveToPerson:(ABRecordRef)person

透過以上這兩個 View Controller,我們就可以完成 AddressBook 中 Person 的顯示和新增,更多資料請參考 AddressBook Programming Guide for iPhone OS

ABPeoplePickerNavigationController

除了顯示 AddressBook 的 Person 之外,有時我們也得提供使用者一個選擇的清單,而這個介面就可以透過 ABPeoplePickerNavigationController 來完成,如下圖:

想必大家在 iPhone 平台上開發也有一段時間了,自然可以猜想到這個類別也提供了很多 delegate 方法,像是當使用者選擇了聯絡人或者是取消時,都會呼叫對應的 delegate 方法。

更多的內容請參考 ABPeoplePickerNavigationController Class Referecne

結論

在這一次的課程中,我們獲得了許多關於 Core Foundation 和 AddressBook 的基本觀念,透過這兩個 Framework 我們可以將 iPhone 的通訊錄整合到我們的應用程式中,而不需要另外自行建立資料庫及相關程式。在下一次的課程中,內容將會轉移到 iPhone 上的多點觸控事件以及相關的使用方法,還請各位讀者敬請期待!

參考資源


【 MarTech Asia 】數位轉型突圍!萬里雲推出機器人寫文案服務,以 AI 加速行銷流程

CloudMile 萬里雲旗下 Martech 產品── ADsvantage (廣告智庫)全新 2.0 功能上線,採用非營利人工智慧組織 —— OpenAI 強大的文章產成器 「 GPT 系列」為基礎,推出全新 AI 智慧寫手功能。
評論
Photo Credit:CloudMile
評論

 CloudMile  萬里雲旗下 Martech 產品── ADsvantage(廣告智庫)全新 2.0 功能上線,採用非營利人工智慧組織 —— OpenAI  強大的文章產成器「 GPT 系列」為基礎,推出全新 AI 智慧寫手功能。隨著行銷碎片化時代來臨,消費者的用戶輪廓越來越難拼湊,從獲取資料、數據分析,到廣告文案創作的最後一哩路,行銷人員必須借助更多工具幫忙,奪回行銷效益的掌握度。 ADsvantage 提供台灣中小企業行銷人員、廣告主及電商業者自助管理的廣告平台,大幅縮短廣告行銷人員作業時間。

 ADsvantage 推出新功能,受邀 2021 MarTech Asia 分享 AI 化數據行銷

日前全台最大的行銷科技盛會 2021 MarTech Asia ,阿物科技創辦人暨執行長林思吾號召 26 位業界領袖同台 ,現場及線上共有超過 1,800 位全球及台灣相關業者齊聚一堂,包括行銷科技之父 Scott Brinker、前 Verizon Media 國際事業董事總經理鄒開蓮、全聯實業副董事長謝健南等人,分享行銷科技的重要趨勢及後疫情時代的新生態。 CloudMile 萬里雲營運長高斌恒也受邀分享,各個科技巨頭都紛紛有許多針對隱私權的規範和措施,消費者的線上線下界線越來越模糊。 當今行銷人所面對的難題不只是 SEO、投放優化而已,「數據」才是致勝關鍵,透過將許多流程自動化,省下時間與人力成本的情況下,達到更高的行銷目標,其中包括 Cookieless 時代來臨、深化 OMO 無縫體驗、打造顧客數據平台( Customer Data Platform , CDP )等議題都受到業界高度關注。

豐富跨國實戰經驗的 CloudMile 機器學習團隊,運用超過 500 萬的文案數據庫、橫跨 20 種產業以上的廣告量,結合廣告代理商 20 年以上行銷經驗,創造 ADsvantage 「 AI 智慧寫手」 新功能。 CloudMile 看見客戶對於數位轉型及運用 MarTech 行銷科技推廣商品的急迫需求,希望可運用 AI 技術之力,縮短廣告前期企劃、發想關鍵字詞、寫文案和廣告投放設定,同時還需跨組溝通,尋找資源協助的時程, ADsvantage 廣告智庫即是專為滿足客戶後疫行銷需求的一站式廣告營運平台解決方案。

人工智慧寫手結合電商平台, 加速行銷流程的最佳 AI 助理

 ADsvantage 全新 2.0 功能上線,採用 GPT 模型,為矽谷時下最夯的自然語言處理模型,推出全新 AI 智慧寫手功能,透過平台能協助客戶透過數據匯流、 AI 分析達到預測的成效,快速蒐集最熱門的關鍵字、文案內容,加速創意的過程並提升廣告效率。

此全新產品適合應用在電商等大型網購平台上,透過機器學習與 AI 科技應用,讓中間產製時間被大幅被縮短,並提升操作數位行銷的「效率」與「精準度」,像是電商平台即可透過採用 ADsvantage 的服務,有效提升自己在數位行銷上的競爭力。

Photo Credit:CloudMile
ADsvantage 全新 2.0 功能上線,推出 AI 華語文案生成工具「AI 智慧寫手」。/Photo Credit:CloudMile

 ADsvantage 產品介紹

運用 AI 科技力助企業數位轉型的 CloudMile 萬里雲,發表關鍵字數位廣告輿情系統 ADsvantage(廣告智庫),提供企業廣告主及電商平台,透過超過百萬的文案創意庫( Ads  idea ) 、 AI 智慧監控工具及 AI 智慧寫手,平均只要 3 秒即可生成一個廣告文案。 CloudMile 透過 Google 雲端、機器學習與 AI 大數據分析技術,致力協助企業落實數位轉型。疫情期間抓住需求開發的 ADsvantage ( 廣告智庫) 服務,透過服務台灣、新加坡、及香港逾 400 家客戶的專業經驗,將傳統的商業廣告運營模式數據化,提供企業廣告主一站式 Google Ads 廣告文案創作 AI 化平台。

本文章內容由「阿物科技」提供,經關鍵評論網媒體集團廣編企劃編審。