版本記錄
版本號 | 時間 |
---|---|
V1.0 | 2018.09.18 |
前言
iOS系統(tǒng)有自己的搜索奄毡,大家試過的都知道商蕴,這個搜索速度非常之快,可以很快的在網(wǎng)頁造壮、appleStor、地圖以及其他App中的內(nèi)容骂束,接下來就讓我們一起來看一下這個搜索耳璧。感興趣的看下面幾篇文章。
1. App搜索編程指南(一) —— 搜索基本之搜索推動用戶參與(一)
2. App搜索編程指南(二) —— 搜索基本之示例實現(xiàn)(一)
Index Activities and Navigation Points - 索引活動和導(dǎo)航點(diǎn)
NSUserActivity
類提供的方法允許您捕獲用戶先前訪問過的特定應(yīng)用程序狀態(tài)和導(dǎo)航點(diǎn)展箱,然后使用Handoff
恢復(fù)它們(有關(guān)在應(yīng)用程序中啟用Handoff的詳細(xì)信息旨枯,請參閱Handoff Programming Guide)。 在iOS 8及更高版本中運(yùn)行的應(yīng)用程序中混驰,用戶希望Handoff幫助他們在一臺設(shè)備上啟動活動并在另一臺設(shè)備上繼續(xù)活動攀隔。
除了支持Handoff
之外,在iOS 9及更高版本中使用NSUserActivity
還可以:
- 用戶在您的應(yīng)用中執(zhí)行索引活動栖榨。 活動可以包括創(chuàng)建或查看內(nèi)容昆汹,查看一組項目(例如結(jié)果列表)或訪問應(yīng)用程序中的導(dǎo)航點(diǎn)。
- 將特定項目標(biāo)記為可用于公共搜索(對于可適用于公共搜索的項目的一些示例婴栽,請參閱Example Implementations)满粗。
- 提供有關(guān)項目的可索引元數(shù)據(jù),為用戶提供搜索結(jié)果中的豐富信息愚争。
要提供最佳搜索結(jié)果映皆,請避免一次創(chuàng)建多個NSUserActivity
對象。 另請注意轰枝,NSUserActivity類不用于幫助您索引應(yīng)用中的任意數(shù)據(jù)捅彻。 如果要索引特定于應(yīng)用程序的數(shù)據(jù),請使用Core Spotlight
框架的API并使用相應(yīng)的relatedUniqueIdentifier將索引項鏈接在一起(有關(guān)詳細(xì)信息鞍陨,請參閱Index App Content)步淹。
使用NSUserActivity
API還可以利用Siri建議和智能提醒。 Siri建議顯示在Spotlight搜索屏幕中,可包含可搜索的活動贤旷。 (請注意广料,只有具有高參與率的活動才有資格包含在Siri建議中。有關(guān)參與的更多信息幼驶,請參閱Combine APIs to Increase Coverage艾杏。)用戶可以使用Siri智能提醒來提醒您與應(yīng)用相關(guān)的特定內(nèi)容。 當(dāng)用戶收到智能提醒時盅藻,他們指定的活動會顯示在提醒中购桑。
當(dāng)用戶使用您的應(yīng)用程序時,您可以創(chuàng)建與各種導(dǎo)航點(diǎn)和應(yīng)用程序狀態(tài)關(guān)聯(lián)的活動對象氏淑。 默認(rèn)情況下勃蜘,每個項目都會添加到設(shè)備上的索引中。 在iOS 9及更高版本中假残,將公共項目標(biāo)記為符合公共索引的條件也會將其添加到設(shè)備上索引并帶來額外的優(yōu)勢:當(dāng)您使用網(wǎng)絡(luò)標(biāo)記使您的相關(guān)網(wǎng)站內(nèi)容可搜索時缭贡,用戶參與公開符合條件的您的應(yīng)用中搜索結(jié)果,可以幫助您提高網(wǎng)站內(nèi)容的排名辉懒。 當(dāng)用戶在Spotlight搜索結(jié)果中點(diǎn)按可搜索的活動或狀態(tài)時阳惹,您可以使用NSUserActivity API繼續(xù)活動并將用戶返回到應(yīng)用中的相關(guān)區(qū)域。
注意:使用
NSUserActivity
索引的項目不會添加到Apple的服務(wù)器端索引或在設(shè)備之間同步眶俩。 要了解有關(guān)為所有iOS用戶提供適當(dāng)項目的方法的更多信息莹汤,請參閱 Mark Up Web Content。使用NSUserActivity是幫助iOS衡量用戶查看應(yīng)用內(nèi)容頻率的最佳方式颠印。 用戶查看的頻率對與您的應(yīng)用相關(guān)的搜索結(jié)果的排名有很大影響(要了解提升此排名的其他方法纲岭,請參閱Improve the Ranking of Your Results)。
1. Creating Searchable Activities - 創(chuàng)建可搜索的活動
要使活動或?qū)Ш近c(diǎn)可搜索线罕,請創(chuàng)建一個NSUserActivity
對象來表示它止潮。 使用NSUserActivity屬性標(biāo)識項目的類型,提供描述項目的元數(shù)據(jù)闻坚,并使其符合搜索條件沽翔。 將項目設(shè)置為符合搜索條件意味著當(dāng)項目變?yōu)楫?dāng)前項目時,該項目將添加到設(shè)備上的索引窿凤。Listing 3-1
顯示了如何創(chuàng)建活動仅偎。
// Listing 3-1 Creating an activity
// It's recommended that you use reverse DNS notation for the required activity type property.
var activity: NSUserActivity = NSUserActivity(activityType: "com.myCompany.myContentType")
// Set properties that describe the activity and that can be used in search.
activity.title = "My Activity Title"
activity.userInfo = ["id": "http://www.mydomain.com/myContentItem/ABC-123"]
// Add the item to the private on-device index.
activity.eligibleForSearch = true
盡管Listing 3-1
中未顯示,但NSUserActivity
還定義了contentAttributeSet
屬性雳殊,該屬性允許您指定描述項目所需的任意數(shù)量的屬性橘沥。 contentAttributeSet
屬性采用CSSearchableItemAttributeSet
對象,該對象是Core Spotlight
對象夯秃,用于提供可索引的元數(shù)據(jù)以豐富搜索結(jié)果座咆。 Core Spotlight定義了大量屬性痢艺,用于指定多個主題區(qū)域中的元數(shù)據(jù),例如媒體介陶,事件和消息堤舒。 只需要title,userInfo和contentAttributeSet屬性哺呜,但為了給用戶提供最佳體驗舌缤,建議您為盡可能多的屬性提供值。 特別是某残,建議您始終為thumbnailData和contentDescription屬性提供特定于內(nèi)容的值国撵。 有關(guān)可以使用的完整屬性列表,請參閱CSSearchableItemAttributeSet Class Reference玻墅。
圖3-1顯示了如何使用三個常用屬性來提供有關(guān)可搜索項目的元數(shù)據(jù)介牙。
特別值得一提的是三個NSUserActivity
屬性:
默認(rèn)情況下,活動是私有的 當(dāng)您設(shè)置項目的qualifiedForPublicIndexing
屬性并使用網(wǎng)絡(luò)標(biāo)記來搜索您的相關(guān)網(wǎng)站內(nèi)容時澳厢,用戶與該項目的互動有助于提高您網(wǎng)站內(nèi)容的排名环础。 要了解有關(guān)使用Web標(biāo)記的更多信息,請參閱 Mark Up Web Content剩拢。
如果未正確設(shè)置expirationDate屬性喳整,系統(tǒng)會在一段時間后自動使活動到期。
當(dāng)您的應(yīng)用內(nèi)容在您的網(wǎng)站中也可用且您在應(yīng)用中使用NSUserActivity API并在您的網(wǎng)站中使用網(wǎng)絡(luò)標(biāo)記時裸扶,webpageURL屬性非常有用。特別是搬素,您可以使用webpageURL
屬性來避免對同一項重復(fù)索引(要了解更多信息呵晨,請參閱 Combine APIs to Increase Coverage)。設(shè)置webpageURL
屬性時熬尺,還要使用必須存儲的userInfo
字典的鍵設(shè)置requiredUserInfoKeys屬性摸屠。如果未設(shè)置requiredUserInfoKeys
屬性,則在恢復(fù)活動時userInfo
字典將為空粱哼。
當(dāng)用戶執(zhí)行活動或進(jìn)入與您創(chuàng)建的NSUserActivity
對象關(guān)聯(lián)的應(yīng)用程序狀態(tài)時季二,您的應(yīng)用程序會調(diào)用becomeCurrent方法將活動標(biāo)記為當(dāng)前。符合搜索條件的當(dāng)前活動會自動添加到私有設(shè)備上的索引(即CSSearchableIndex)揭措。此外胯舷,您可以在搜索結(jié)果中啟用用戶操作,例如撥打電話號碼或獲取到某個位置的路線(要了解如何執(zhí)行此操作绊含,請參閱CSSearchableItemAttributeSet Class Reference中的Supporting Actions
)桑嘶。
為了保證活動及其元數(shù)據(jù)被編入索引,您必須對活動保持強(qiáng)引用躬充,直到將其添加到索引中逃顶。有兩種方法可以執(zhí)行此操作:第一種方法是將活動分配給創(chuàng)建活動的控制器對象中的屬性讨便。第二種方法是使用UIResponder
對象的userActivity
屬性。如果使用第二種方式以政,則需要在updateUserActivityState:方法中設(shè)置元數(shù)據(jù) - 例如userInfo屬性中的信息霸褒。否則,您在活動中設(shè)置的元數(shù)據(jù)將不會保留盈蛮。
如果您希望某個活動符合搜索條件但不適用于設(shè)備之間的Handoff
废菱,請將eligibleForSearch屬性設(shè)置為true
,并將eligibleForHandoff屬性設(shè)置為false
眉反。
使用Core Spotlight
API刪除使用NSUserActivity
編制索引的項目昙啄。使用NSUserActivity和Core Spotlight API對項目建立索引并使用relatedUniqueIdentifier屬性連接項目時,使用Core Spotlight API刪除項目會使該活動不符合索引條件寸五。有關(guān)使用relatedUniqueIdentifier
屬性的更多信息梳凛,請參閱Combine APIs to Increase Coverage。
2. Continuing Activities Chosen in Search Results - 搜索結(jié)果中選擇的持續(xù)活動
當(dāng)用戶點(diǎn)擊您添加到索引的NSUserActivity
項目的搜索結(jié)果時梳杏,您的應(yīng)用程序應(yīng)該打開并恢復(fù)與該項目關(guān)聯(lián)的上下文韧拒。 為此,您的app委托實現(xiàn)了application:continueUserActivity:restorationHandler:十性,檢查傳入活動的類型叛溢,以查看應(yīng)用程序是否正在打開,因為用戶點(diǎn)擊了搜索結(jié)果中的索引項劲适。application:continueUserActivity:restorationHandler:
方法與您當(dāng)前使用Handoff
繼續(xù)活動的方法相同楷掉。
Listing 3-2
顯示了application:continueUserActivity:restorationHandler:
的主要實現(xiàn)框架。
// Listing 3-2 Continuing a user activity
func application(UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: [AnyObject]? -> Void) -> Bool {
if userActivity.activityType == "com.myCompany.myContentType" {
// Restore app state for this userActivity and associated userInfo value.
}
return true
}
后記
本篇主要講述了讓項目可索引之索引活動和導(dǎo)航點(diǎn)霞势,感興趣的給個贊或者關(guān)注~~~