應(yīng)用擴(kuò)展可以延伸應(yīng)用的使用范圍。當(dāng)用戶使用其他應(yīng)用時(shí),應(yīng)用擴(kuò)展使得用戶仍能使用你應(yīng)用的核心功能。舉個(gè)例子,當(dāng)人們?cè)?Safari 中瀏覽網(wǎng)頁時(shí),他們可以使用你的分享擴(kuò)展來發(fā)送一張圖片或一篇文章到你的社交網(wǎng)站上?;蛘弋?dāng)使用 Photos(照片)應(yīng)用時(shí),人們可能會(huì)使用你的圖片編輯擴(kuò)展來為一張圖片加上一個(gè)濾鏡效果。(在這些場景中,Safari 和照片應(yīng)用承載用戶使用擴(kuò)展的場景,因而被稱為宿主應(yīng)用(host apps)。)
你需要提交包含應(yīng)用擴(kuò)展的完整 iOS 應(yīng)用到 App Store(包含擴(kuò)展的應(yīng)用被稱為容器應(yīng)用(containing app))。在你的容器應(yīng)用中啟用擴(kuò)展之后,人們就可以在使用其他應(yīng)用時(shí),使用擴(kuò)展來執(zhí)行快速任務(wù)。例如,在郵件中瀏覽某個(gè)商品時(shí),人們可以不用離開郵件應(yīng)用就使用你的動(dòng)作擴(kuò)展來把商品添加到購物清單中。 表 22-1 列舉了可以多個(gè)創(chuàng)建的 iOS 應(yīng)用擴(kuò)展類型。
以下指南適用于所有類型的應(yīng)用擴(kuò)展,針對(duì)特定類型應(yīng)用擴(kuò)展的指南請(qǐng)參閱后續(xù)章節(jié)。(如果想了解如何開發(fā)、調(diào)試和發(fā)布一個(gè)擴(kuò)展,請(qǐng)參閱 App Extension Programming Guide.)
確保是單任務(wù)。應(yīng)用擴(kuò)展并不是應(yīng)用的精簡版,它幫助用戶在有全局目標(biāo)的上下文中完成狹義范圍內(nèi)的有限任務(wù)。例如,動(dòng)作擴(kuò)展可以為用戶提供一種不同的方式來查看當(dāng)前內(nèi)容。
保證用戶的交互是有限和流暢的。好的應(yīng)用擴(kuò)展應(yīng)該只需幾步點(diǎn)擊就可以幫助人們完成任務(wù),這樣他們就能盡快回到之前的場景中。例如,分享擴(kuò)展只需一次點(diǎn)擊即可完成一張圖片的分享。
將容器應(yīng)用及其應(yīng)用擴(kuò)展的名稱保持一致。一個(gè)容器應(yīng)用中如果有多個(gè)擴(kuò)展,需要使用不同的名稱,你需要確保用戶能夠理解你的擴(kuò)展和應(yīng)用之間的關(guān)系。人們會(huì)在很多不同的情況下遇到擴(kuò)展,如果他們當(dāng)下沒有認(rèn)出來,那么他們就未必會(huì)信任這些擴(kuò)展。
大部分情況下,復(fù)用容器應(yīng)用的圖標(biāo)。顯示用戶熟悉的圖標(biāo)是獲得用戶信任的另一種方式。請(qǐng)注意,對(duì)于動(dòng)作擴(kuò)展來說,你應(yīng)該使用單色版本的容器應(yīng)用圖標(biāo)(詳見分享和動(dòng)作擴(kuò)展)。
重要:和設(shè)計(jì)圖標(biāo)和圖形一樣,不要重復(fù)使用 iOS 的圖標(biāo)和圖片,不要為蘋果的產(chǎn)品和設(shè)計(jì)再設(shè)計(jì)一套圖片。
避免在擴(kuò)展上顯示模態(tài)視圖。很多擴(kuò)展默認(rèn)以模態(tài)視圖來顯示,所以應(yīng)避免再疊加模態(tài)視圖。盡管有時(shí)候用戶可能會(huì)在擴(kuò)展上遇到警告框,但是在設(shè)計(jì)擴(kuò)展的流程時(shí),應(yīng)避免出現(xiàn)模態(tài)視圖。
人們會(huì)在通知中心的今天區(qū)域中查看今天部件(Today widgets)。因?yàn)槿藗儠?huì)設(shè)置今天區(qū)域以顯示他們最關(guān)注的信息,所以在此進(jìn)行設(shè)計(jì)可以有效幫助你的部件在這些用戶最重要的信息中占據(jù)一席之地。
設(shè)計(jì)與通知中心風(fēng)格一致的外觀。當(dāng)使用通知中心的默認(rèn)邊距和背景時(shí),你的今天部件就會(huì)給用戶以統(tǒng)一的體驗(yàn)。為獲得最佳的結(jié)果,你應(yīng)該重點(diǎn)關(guān)注你的內(nèi)容而不是背景或者其他的,尤其應(yīng)該避免繪制一片純色背景。
注意:
iOS 會(huì)自動(dòng)在自定義的部件內(nèi)容上方顯示應(yīng)用的圖標(biāo)和標(biāo)題(圖標(biāo)會(huì)顯示在標(biāo)題前面的空白處)。
將部件內(nèi)容與標(biāo)題對(duì)齊。當(dāng)你的部件內(nèi)容與標(biāo)題對(duì)齊時(shí),人們就可以很簡單地瀏覽今天視圖中他們想要的部件。遵守今天視圖中的邊距規(guī)范,并將內(nèi)容約束在如圖的部件內(nèi)容區(qū)內(nèi)。
一般情況下,使用白色的系統(tǒng)字體來顯示文本。在通知中心默認(rèn)背景下白色文字會(huì)看起來較好。對(duì)于二級(jí)文本,可以使用系統(tǒng)提供的 vibrant 外觀樣式(查看 notificationCenterVibrancyEffect了解更多)。
提供通知中心式的體驗(yàn)。人們?cè)L問通知中心來獲取簡要的更新或者執(zhí)行一個(gè)非常簡單的任務(wù),所以今天部件最好只顯示適量的信息和進(jìn)行有限的互動(dòng),特別是:
避免用戶在部件中需要滾動(dòng)或縱向移動(dòng)來查看全部的信息。部件可以通過縱向擴(kuò)展來顯示更多的信息,但若部件的高度超過通知中心的高度就不是一種好的體驗(yàn)了,因?yàn)檫@樣會(huì)干擾其他部件的查看
避免使用橫向掃動(dòng)或拖曳,因?yàn)檫@會(huì)干擾在通知中心進(jìn)行導(dǎo)航
盡可能使用戶只需一步操作就完成任務(wù)或打開你的應(yīng)用(注意,在今天部件中鍵盤是不可用的)
在適當(dāng)情況下,讓人們點(diǎn)擊你的今天部件來打開你的應(yīng)用。因?yàn)榻裉觳考峁┝藢R坏捏w驗(yàn),所以就能有效引導(dǎo)人們?nèi)サ侥愕膽?yīng)用以獲取更多信息或功能。最好不要顯示“打開應(yīng)用”按鈕,而是應(yīng)該讓你的整個(gè)今天部件都可被點(diǎn)擊來打開應(yīng)用。你也可以讓用戶點(diǎn)擊部件中的UI對(duì)象,以打開你的應(yīng)用并跳轉(zhuǎn)到關(guān)于此UI對(duì)象的視圖中。舉個(gè)例子,日歷部件顯示了今天的事件,如果用戶想要獲得某個(gè)事件的更多信息,他們可以點(diǎn)擊部件中的事件來打開日歷應(yīng)用進(jìn)行查看。
注意:
雖然從部件打開應(yīng)用的方式對(duì)用戶來說還不錯(cuò),但繼續(xù)在部件中提供有用且及時(shí)的信息依然是很重要的。人們可不一定會(huì)欣賞一個(gè)功能只是打開應(yīng)用的今天部件。
如果可能,在今天部件中讓人們知道他們需要登錄來獲取有用的信息。如果你的今天不見需要人們登錄查看信息,展示一個(gè)信息去鼓勵(lì)他們登錄和解釋什么樣的內(nèi)容將會(huì)被呈現(xiàn)。例如,如果你的時(shí)間部件即將到來的預(yù)約是用戶登錄后展現(xiàn)的,你可能需要讓用戶“登錄我的應(yīng)用去查看即將到來的預(yù)約”。
不要制作一個(gè)今天不見需要打開除了你自己應(yīng)用外的應(yīng)用。一個(gè)模擬 iOS 主屏的行為的時(shí)間部件不會(huì)為你的用戶提供有用的功能。
人們通過點(diǎn)擊應(yīng)用中的動(dòng)作按鈕(Action button)來使用分享和動(dòng)作擴(kuò)展。在通過動(dòng)作按鈕顯示的動(dòng)作視圖控制器(activity view controller)中,動(dòng)作擴(kuò)展被列在底部,分享擴(kuò)展被列在動(dòng)作擴(kuò)展之上。人們可以使用更多(More)按鈕來管理顯示在動(dòng)作視圖控制器中的分享和動(dòng)作擴(kuò)展。
分享或動(dòng)作擴(kuò)展通常被認(rèn)為是在當(dāng)前用戶場景下用來輸入內(nèi)容之用。例如,當(dāng)在 Safari 中閱讀一篇文章時(shí),用戶可能會(huì)點(diǎn)擊動(dòng)作按鈕并使用一個(gè)分享擴(kuò)展來發(fā)送這篇文章到分享網(wǎng)站上,也可能會(huì)使用一個(gè)動(dòng)作擴(kuò)展來查看這篇文章的翻譯。
注意:
在動(dòng)作視圖控制器中,iOS 只會(huì)顯示支持當(dāng)前內(nèi)容類型的動(dòng)作擴(kuò)展。例如,當(dāng)用戶當(dāng)前內(nèi)容是視頻時(shí),iOS 就不會(huì)顯示支持文本的動(dòng)作擴(kuò)展。
盡可能在分享擴(kuò)展中使用系統(tǒng)提供的 UI。系統(tǒng)所提供的撰寫視圖控制器 (compose view controller) 提供給用戶一種一致的體驗(yàn),并能自動(dòng)支持一些常用任務(wù),例如預(yù)覽和確認(rèn)標(biāo)準(zhǔn)項(xiàng),同步內(nèi)容,查看動(dòng)畫,以及完成一封郵件。欲知更多關(guān)于使用系統(tǒng)提供的撰寫視圖控制器,請(qǐng)參見 App Extension Programming Guide 中的 Share.
如果上傳需要一定時(shí)間,那就應(yīng)考慮在分享擴(kuò)展的容器應(yīng)用中顯示上傳進(jìn)度。無論分享的文件有多大,人們都期待在點(diǎn)擊擴(kuò)展中的發(fā)送或分享按鈕后,能立即返回他們之前的場景。你需要讓進(jìn)度狀態(tài)隨時(shí)更新,但是人們不想每次上傳完畢后都收到通知,并且也無法自動(dòng)重啟擴(kuò)展。在這種場景下,在容器應(yīng)用中顯示上傳進(jìn)度是一種解決方案,這樣容器應(yīng)用就可以在后臺(tái)處理任務(wù),并在遇到問題時(shí)發(fā)送通知。
動(dòng)作擴(kuò)展使用單色的應(yīng)用圖標(biāo)。( 不同的是,分享擴(kuò)展則應(yīng)該使用其容器應(yīng)用的彩色應(yīng)用圖標(biāo)。) 要為動(dòng)作擴(kuò)展設(shè)計(jì)圖標(biāo)時(shí),你可能需要從創(chuàng)建一個(gè)應(yīng)用圖標(biāo)的模版開始著手。如有需要,可以專注圖標(biāo)所特有的元素來進(jìn)行簡化設(shè)計(jì)。
如果你在容器應(yīng)用中提供了多個(gè)動(dòng)作擴(kuò)展,那么最好為他們?cè)O(shè)計(jì)一套圖標(biāo),且確保這套圖標(biāo)中的每一個(gè)看起來都與容器應(yīng)用的圖標(biāo)是有關(guān)聯(lián)的。
當(dāng)人們?cè)谡掌?Photos)中查看圖片或視頻時(shí),可以使用圖片編輯擴(kuò)展。一般來說,圖片編輯擴(kuò)展能幫助用戶篩選圖片或進(jìn)行一些其他的圖片或視頻編輯。在用戶確認(rèn)之后,編輯后的內(nèi)容就會(huì)出現(xiàn)在照片應(yīng)用中。
照片應(yīng)用提供了一個(gè)模態(tài)視圖來顯示圖片編輯擴(kuò)展的自定義 UI。當(dāng)用戶在確認(rèn)對(duì)圖片或視頻的編輯時(shí)選擇了取消(你必須要在代碼上保證存在這個(gè)行為),照片應(yīng)用還可以顯示一個(gè)確認(rèn)視圖。
避免在圖片編輯擴(kuò)展中使用導(dǎo)航欄。如圖所示,承載擴(kuò)展的模態(tài)視圖已經(jīng)包含了導(dǎo)航欄,若再增加另一個(gè)導(dǎo)航欄,既會(huì)占據(jù)更多你的界面空間,還會(huì)使用戶產(chǎn)生困擾。(照片應(yīng)用默認(rèn)會(huì)以全屏高度來顯示你的視圖,所以你的內(nèi)容會(huì)出現(xiàn)在內(nèi)建的導(dǎo)航欄之下。)
如果可以,讓用戶能夠預(yù)覽編輯結(jié)果。盡可能讓用戶在關(guān)閉擴(kuò)展返回照片應(yīng)用之前看到他們編輯的成果。
文檔提供者擴(kuò)展幫助人們?cè)谄渌鞣N應(yīng)用中查閱你的應(yīng)用所管理的文檔。在宿主應(yīng)用(host app)中,文檔采集視圖控制器(document picker view controller)會(huì)顯示你的擴(kuò)展所提供的UI(想要了解更多有關(guān)文檔采集視圖控制器的內(nèi)容,請(qǐng)查閱 UIDocumentPickerViewController Class Reference).
注意:
文檔提供者擴(kuò)展由兩個(gè)不同的部分組成:文檔采集視圖控制器擴(kuò)展和文件提供者擴(kuò)展。文檔采集視圖控制器擴(kuò)展包括了你的自定義 UI,文件提供者擴(kuò)展實(shí)現(xiàn)對(duì)文件的訪問。為了簡單起見,本節(jié)所使用的術(shù)語文檔提供者擴(kuò)展(Document Provider extension)是為了表述擴(kuò)展中文檔采集視圖控制器部分的 UI 和體驗(yàn)。
避免在文檔提供者擴(kuò)展中使用導(dǎo)航欄。iOS 會(huì)顯示擴(kuò)展的自定義 UI,而自定義 UI 又包含在文檔采集視圖控制器中基于導(dǎo)航欄的界面之中。所以,在內(nèi)建導(dǎo)航欄之下再顯示第二個(gè)導(dǎo)航欄會(huì)使用戶感到困惑,并且還會(huì)占據(jù)原本你的內(nèi)容區(qū)域。(文檔采集視圖控制器默認(rèn)會(huì)以全屏高度來顯示你的視圖,所以你的內(nèi)容會(huì)出現(xiàn)在內(nèi)建的導(dǎo)航欄之下。)
人們?cè)谡麄€(gè)系統(tǒng)中使用帶有自定義輸入法的輸入法擴(kuò)展來替換 iOS 的自帶輸入法。在啟用輸入法擴(kuò)展之后,除了受保護(hù)的文本區(qū)域(例如密碼輸入?yún)^(qū))和手機(jī)鍵盤區(qū)(例如聯(lián)系人中的電話號(hào)碼區(qū))外,當(dāng)人們點(diǎn)擊任何文本輸入?yún)^(qū)域后就能使用自定義輸入法。
為用戶提供明顯的方式來切換輸入法。人們對(duì)于 iOS 的輸入法切換按鈕很熟悉,他們會(huì)期望在你的輸入法中也有類似的體驗(yàn)。
如果可能,在你的容器應(yīng)用中包括一個(gè)教程。如果必要,使用你的自定義鍵盤的容器應(yīng)用去給人們講解如何啟用和使用你的鍵盤。不要把這個(gè)信息直接放在鍵盤本身,因?yàn)樗赡茏屓藗儑L試使用這個(gè)鍵盤時(shí)感到困惑。
更多建議: