App搜索編程指南(三) —— 讓項目可索引之索引活動和導(dǎo)航點(diǎn)(一)

版本記錄

版本號 時間
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ù),例如媒體介陶,事件和消息堤舒。 只需要titleuserInfocontentAttributeSet屬性哺呜,但為了給用戶提供最佳體驗舌缤,建議您為盡可能多的屬性提供值。 特別是某残,建議您始終為thumbnailDatacontentDescription屬性提供特定于內(nèi)容的值国撵。 有關(guān)可以使用的完整屬性列表,請參閱CSSearchableItemAttributeSet Class Reference玻墅。

圖3-1顯示了如何使用三個常用屬性來提供有關(guān)可搜索項目的元數(shù)據(jù)介牙。

Figure 3-1 A searchable item can use various properties to display metadata

特別值得一提的是三個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)注~~~

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末烹植,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子愕贡,更是在濱河造成了極大的恐慌草雕,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件固以,死亡現(xiàn)場離奇詭異墩虹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)憨琳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門诫钓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人栽渴,你說我怎么就攤上這事尖坤。” “怎么了闲擦?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵慢味,是天一觀的道長场梆。 經(jīng)常有香客問我,道長纯路,這世上最難降的妖魔是什么或油? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮驰唬,結(jié)果婚禮上顶岸,老公的妹妹穿的比我還像新娘。我一直安慰自己叫编,他們只是感情好辖佣,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著搓逾,像睡著了一般卷谈。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上霞篡,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天世蔗,我揣著相機(jī)與錄音,去河邊找鬼朗兵。 笑死污淋,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的余掖。 我是一名探鬼主播寸爆,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼盐欺!你這毒婦竟也來了而昨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤找田,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后着憨,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體墩衙,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年甲抖,在試婚紗的時候發(fā)現(xiàn)自己被綠了漆改。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡准谚,死狀恐怖挫剑,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柱衔,我是刑警寧澤樊破,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布愉棱,位于F島的核電站,受9級特大地震影響哲戚,放射性物質(zhì)發(fā)生泄漏奔滑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一顺少、第九天 我趴在偏房一處隱蔽的房頂上張望朋其。 院中可真熱鬧,春花似錦脆炎、人聲如沸梅猿。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽袱蚓。三九已至,卻和暖如春簇爆,著一層夾襖步出監(jiān)牢的瞬間癞松,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工入蛆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留响蓉,地道東北人。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓哨毁,卻偏偏與公主長得像枫甲,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子扼褪,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容