搜索類API:NSUserActivity 、CoreSpotlight、Web Markup

iOS 9中的搜索為用戶提供了一種新的方式來(lái)訪問(wèn)應(yīng)用內(nèi)部的信息,即使未安裝。當(dāng)您將內(nèi)容設(shè)為可搜索時(shí),用戶可以通過(guò)Spotlight和Safari搜索結(jié)果,Handoff和Siri建議,訪問(wèn)應(yīng)用內(nèi)深層的活動(dòng)和內(nèi)容。使用與搜索相關(guān)的API,您可以決定將哪些內(nèi)容編入索引,在搜索結(jié)果中顯示哪些信息,以及在點(diǎn)擊應(yīng)用或網(wǎng)站的結(jié)果后重定向用戶的位置。

主要有三種搜索類的API:
1、NSUserActivity,索引用戶活動(dòng)以及App的狀態(tài)。
2、iOS 9新增的CoreSpotlight.framework提供了增、刪、改、查等搜索API,可以索引App的內(nèi)容。
3、Web Markup,Web內(nèi)容可被搜索。
前兩個(gè)屬于 私人設(shè)備上的索引。
最后一個(gè)屬于 蘋(píng)果的服務(wù)器端索引。

NSUserActivity

NSUserActivity是iOS 8專為Handoff推出的API,iOS 9之后得到了提升。Spotlight可以將activity編入索引,而NSUserActivity就好比網(wǎng)頁(yè)瀏覽器的歷史堆棧(history stack),使用戶能在Spotlight上搜到最近的活動(dòng)。

Web Markup

Web Markup在網(wǎng)頁(yè)上顯示App的內(nèi)容并編入Spotlight索引,如此一來(lái)即便沒(méi)有安裝某個(gè)App,蘋(píng)果的索引器也能在網(wǎng)頁(yè)上搜索特別的標(biāo)記(markup),在Safari或Spotlight上顯示搜索結(jié)果。
顯示未安裝App的搜索結(jié)果是一大亮點(diǎn),有望為開(kāi)發(fā)者帶來(lái)更多潛在用戶。公布在搜索API上的App深鏈接則儲(chǔ)存在蘋(píng)果的cloud index中。更多詳情,請(qǐng)參閱蘋(píng)果的“Web Markup使用指南(Use Web Markup to Make App Content Searchable)”。

CoreSpotlight

NSUserActivity幫助儲(chǔ)存用戶歷史,而全新的Core Spotlight則能將App中的任何內(nèi)容編入索引,實(shí)質(zhì)是在用戶設(shè)備上提供基礎(chǔ)的Core Spotlight索引渠道,滿足用戶另外一個(gè)需求。

代碼:

#import <CoreSpotlight/CoreSpotlight.h>


NSMutableArray <CSSearchableItem *> *searchableItems = [NSMutableArray array];
    CSSearchableItemAttributeSet *attribute = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:@"ceshiStyle"];
    
    attribute.title = @"測(cè)試標(biāo)題";

    attribute.thumbnailData = UIImagePNGRepresentation([UIImage imageNamed:@"ceshi.png"]);
    
    CSSearchableItem *item = [[CSSearchableItem alloc]initWithUniqueIdentifier:@"001" domainIdentifier:@"ceshiNumber" attributeSet:attribute];
    
    
    [searchableItems addObject:item];
    
    [[CSSearchableIndex defaultSearchableIndex] indexSearchableItems:searchableItems completionHandler:^(NSError * _Nullable error) {
        if (error != nil) {
            NSLog(@"%@",error);
        }
    }];
        

然后在AppDelegate的代理方法中接收點(diǎn)擊搜索結(jié)果的userInfo

#pragma mark - CoreSpotlight
- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler {
    
    NSString *ceshiNumber = userActivity.userInfo[@"kCSSearchableItemActivityIdentifier"];
    //ceshiNumber = 001
  
    return true;
}

最后需要提到的就是索引的刪除。CoreSpotlight給我們提供了三個(gè)方法來(lái)進(jìn)行刪除分別是:

- (void)deleteSearchableItemsWithIdentifiers:(NSArray<NSString *> *)identifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler; 

- (void)deleteSearchableItemsWithDomainIdentifiers:(NSArray<NSString *> *)domainIdentifiers completionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler;

 - (void)deleteAllSearchableItemsWithCompletionHandler:(void (^ __nullable)(NSError * __nullable error))completionHandler; 

根據(jù)identifier來(lái)刪除,根據(jù)domain來(lái)刪除以及刪除所有的索引。

關(guān)于Web Markup,我們只需要在自己的官網(wǎng)的代碼中的head里面加入代碼:

<meta name="apple-itunes-app" content="app-id=myAppStoreID, affiliate-data=myAffiliateData, app-argument=myURL">

affiliate-data和app-argument參數(shù)都是可選的,

文章借鑒自:http://www.csdn.net/article/2015-07-16/2825222-search-apis

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

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

  • SearchAPI是什么 iOS 9.0 系統(tǒng)以后,下拉屏幕或者向右滑到最后會(huì)顯示"spotlight"頁(yè)面(不支...
    superD閱讀 1,000評(píng)論 0 4
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,030評(píng)論 25 709
  • 原文地址 在 iOS9 之前,你只能在 spotlight 中輸入關(guān)鍵字,比如應(yīng)用名字,搜索到應(yīng)用。在 iOS9 ...
    Nathan_Bao閱讀 6,936評(píng)論 4 12
  • iOS9新特性:App搜索編程 這里基本按照官方文檔, 但是沒(méi)有百分百一致, 夾帶了私貨. 下面是一個(gè)總的結(jié)構(gòu)圖,...
    windgo閱讀 1,410評(píng)論 0 1
  • 從馬斯洛的層次理論中可以看出有兩點(diǎn)至關(guān)重要: 1.對(duì)處于特定需求層次的人,需要用這個(gè)層次的激勵(lì)才能給他最大的刺激 ...
    讀點(diǎn)書(shū)閱讀 155評(píng)論 0 0

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