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

版本記錄

版本號 時間
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 - 索引活動和導航點

NSUserActivity類提供的方法允許您捕獲用戶先前訪問過的特定應用程序狀態(tài)和導航點,然后使用Handoff恢復它們(有關在應用程序中啟用Handoff的詳細信息,請參閱Handoff Programming Guide)。 在iOS 8及更高版本中運行的應用程序中,用戶希望Handoff幫助他們在一臺設備上啟動活動并在另一臺設備上繼續(xù)活動。

除了支持Handoff之外,在iOS 9及更高版本中使用NSUserActivity還可以:

  • 用戶在您的應用中執(zhí)行索引活動。 活動可以包括創(chuàng)建或查看內(nèi)容,查看一組項目(例如結(jié)果列表)或訪問應用程序中的導航點。
  • 將特定項目標記為可用于公共搜索(對于可適用于公共搜索的項目的一些示例,請參閱Example Implementations)。
  • 提供有關項目的可索引元數(shù)據(jù),為用戶提供搜索結(jié)果中的豐富信息。

要提供最佳搜索結(jié)果,請避免一次創(chuàng)建多個NSUserActivity對象。 另請注意,NSUserActivity類不用于幫助您索引應用中的任意數(shù)據(jù)。 如果要索引特定于應用程序的數(shù)據(jù),請使用Core Spotlight框架的API并使用相應的relatedUniqueIdentifier將索引項鏈接在一起(有關詳細信息,請參閱Index App Content)。

使用NSUserActivity API還可以利用Siri建議和智能提醒。 Siri建議顯示在Spotlight搜索屏幕中,可包含可搜索的活動。 (請注意,只有具有高參與率的活動才有資格包含在Siri建議中。有關參與的更多信息,請參閱Combine APIs to Increase Coverage。)用戶可以使用Siri智能提醒來提醒您與應用相關的特定內(nèi)容。 當用戶收到智能提醒時,他們指定的活動會顯示在提醒中。

當用戶使用您的應用程序時,您可以創(chuàng)建與各種導航點和應用程序狀態(tài)關聯(lián)的活動對象。 默認情況下,每個項目都會添加到設備上的索引中。 在iOS 9及更高版本中,將公共項目標記為符合公共索引的條件也會將其添加到設備上索引并帶來額外的優(yōu)勢:當您使用網(wǎng)絡標記使您的相關網(wǎng)站內(nèi)容可搜索時,用戶參與公開符合條件的您的應用中搜索結(jié)果,可以幫助您提高網(wǎng)站內(nèi)容的排名。 當用戶在Spotlight搜索結(jié)果中點按可搜索的活動或狀態(tài)時,您可以使用NSUserActivity API繼續(xù)活動并將用戶返回到應用中的相關區(qū)域。

注意:使用NSUserActivity索引的項目不會添加到Apple的服務器端索引或在設備之間同步。 要了解有關為所有iOS用戶提供適當項目的方法的更多信息,請參閱 Mark Up Web Content。使用NSUserActivity是幫助iOS衡量用戶查看應用內(nèi)容頻率的最佳方式。 用戶查看的頻率對與您的應用相關的搜索結(jié)果的排名有很大影響(要了解提升此排名的其他方法,請參閱Improve the Ranking of Your Results)。

1. Creating Searchable Activities - 創(chuàng)建可搜索的活動

要使活動或?qū)Ш近c可搜索,請創(chuàng)建一個NSUserActivity對象來表示它。 使用NSUserActivity屬性標識項目的類型,提供描述項目的元數(shù)據(jù),并使其符合搜索條件。 將項目設置為符合搜索條件意味著當項目變?yōu)楫斍绊椖繒r,該項目將添加到設備上的索引。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,userInfocontentAttributeSet屬性,但為了給用戶提供最佳體驗,建議您為盡可能多的屬性提供值。 特別是,建議您始終為thumbnailDatacontentDescription屬性提供特定于內(nèi)容的值。 有關可以使用的完整屬性列表,請參閱CSSearchableItemAttributeSet Class Reference。

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

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

特別值得一提的是三個NSUserActivity屬性:

默認情況下,活動是私有的 當您設置項目的qualifiedForPublicIndexing屬性并使用網(wǎng)絡標記來搜索您的相關網(wǎng)站內(nèi)容時,用戶與該項目的互動有助于提高您網(wǎng)站內(nèi)容的排名。 要了解有關使用Web標記的更多信息,請參閱 Mark Up Web Content。

如果未正確設置expirationDate屬性,系統(tǒng)會在一段時間后自動使活動到期。

當您的應用內(nèi)容在您的網(wǎng)站中也可用且您在應用中使用NSUserActivity API并在您的網(wǎng)站中使用網(wǎng)絡標記時,webpageURL屬性非常有用。特別是,您可以使用webpageURL屬性來避免對同一項重復索引(要了解更多信息,請參閱 Combine APIs to Increase Coverage)。設置webpageURL屬性時,還要使用必須存儲的userInfo字典的鍵設置requiredUserInfoKeys屬性。如果未設置requiredUserInfoKeys屬性,則在恢復活動時userInfo字典將為空。

當用戶執(zhí)行活動或進入與您創(chuàng)建的NSUserActivity對象關聯(lián)的應用程序狀態(tài)時,您的應用程序會調(diào)用becomeCurrent方法將活動標記為當前。符合搜索條件的當前活動會自動添加到私有設備上的索引(即CSSearchableIndex)。此外,您可以在搜索結(jié)果中啟用用戶操作,例如撥打電話號碼或獲取到某個位置的路線(要了解如何執(zhí)行此操作,請參閱CSSearchableItemAttributeSet Class Reference中的Supporting Actions)。

為了保證活動及其元數(shù)據(jù)被編入索引,您必須對活動保持強引用,直到將其添加到索引中。有兩種方法可以執(zhí)行此操作:第一種方法是將活動分配給創(chuàng)建活動的控制器對象中的屬性。第二種方法是使用UIResponder對象的userActivity屬性。如果使用第二種方式,則需要在updateUserActivityState:方法中設置元數(shù)據(jù) - 例如userInfo屬性中的信息。否則,您在活動中設置的元數(shù)據(jù)將不會保留。

如果您希望某個活動符合搜索條件但不適用于設備之間的Handoff,請將eligibleForSearch屬性設置為true,并將eligibleForHandoff屬性設置為false。

使用Core Spotlight API刪除使用NSUserActivity編制索引的項目。使用NSUserActivity和Core Spotlight API對項目建立索引并使用relatedUniqueIdentifier屬性連接項目時,使用Core Spotlight API刪除項目會使該活動不符合索引條件。有關使用relatedUniqueIdentifier屬性的更多信息,請參閱Combine APIs to Increase Coverage。

2. Continuing Activities Chosen in Search Results - 搜索結(jié)果中選擇的持續(xù)活動

當用戶點擊您添加到索引的NSUserActivity項目的搜索結(jié)果時,您的應用程序應該打開并恢復與該項目關聯(lián)的上下文。 為此,您的app委托實現(xiàn)了application:continueUserActivity:restorationHandler:,檢查傳入活動的類型,以查看應用程序是否正在打開,因為用戶點擊了搜索結(jié)果中的索引項。application:continueUserActivity:restorationHandler:方法與您當前使用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
}

后記

本篇主要講述了讓項目可索引之索引活動和導航點,感興趣的給個贊或者關注~~~

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容