标签: ios-searchapi

在NSUserActivity上CSSearchableIttributeSet应该使用哪些属性?

我在网站上添加了Web Markup,因此当用户在iOS 9中搜索时,项目将显示在Spotlight搜索结果中.用户可以浏览应用程序中的相同项目,因此我想创建NSUserActivity在用户浏览项目时链接到Web内容的对象.

现在,NSUserActivity有一个contentAttributeSet属性我将用于将缩略图照片附加到活动.CSSearchableItemAttributeSet有一些属性NSUserActivity也有,所以我不确定我应该实现哪一个,或者我应该为两者指定相同的数据.难道我设置titleNSUserActivity,以及在titleCSSearchableItemAttributeSet,或只有一个或其他?同样keywords是两者的财产.

NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@“com.domain.appname-something"];
activity.title = @“My Title";
activity.keywords = [NSSet setWithArray:@[@“one", @“two", @“three"]];
activity.userInfo = @{@“id": @“12345"};
activity.requiredUserInfoKeys = [NSSet setWithArray:@[@“id"]];
activity.eligibleForSearch = YES;
activity.eligibleForPublicIndexing = YES;
activity.webpageURL = [NSURL URLWithString:@"https://someurl.com"];

//QUESTION: Do I need to duplicate title and keywords here:
CSSearchableItemAttributeSet *contentAttributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage];
contentAttributeSet.title = activity.title;
contentAttributeSet.displayName = …
Run Code Online (Sandbox Code Playgroud)

ios corespotlight ios-searchapi nsuseractivity

7
推荐指数
1
解决办法
933
查看次数

CSSearchableItemAttributeSet搜索结果的contentType

我正在构建一个使用CSSearchableItemAttributeSetwith 的应用程序,NSUserActivity以便将项目添加到Spotlight搜索索引中.我正在索引的项目是表情符号,它由表情符号字符本身,描述和显示表情符号的图像组成.我正在创建一个活动,然后将项目属性集绑定到它,这允许我指定缩略图图像.

我的问题是,在这种情况下,内容类型应该是CSSearchableItemAttributeSet什么?

我最初认为它应该是kUTTypeImage.但是图像不是被索引的项目,而是表情符号字符.图像仅提供补充信息.

NSUserActivity *activity = [[NSUserActivity alloc] initWithActivityType:@“com.domain.appname-something"];
activity.title = @“<emoji here>";

CSSearchableItemAttributeSet *contentAttributeSet = [[CSSearchableItemAttributeSet alloc] initWithItemContentType:(NSString *)kUTTypeImage]; //QUESTION: What’s the appropriate contentType?
contentAttributeSet.contentDescription = @"<emoji description here>";
contentAttributeSet.thumbnailData = [self generateEmojiImage];

activity.contentAttributeSet = contentAttributeSet;
Run Code Online (Sandbox Code Playgroud)

ios corespotlight ios-searchapi

6
推荐指数
0
解决办法
412
查看次数

NSUserActivity未被Spotlight索引

我试图让我的NSUserActivity被iOS中Spotlight中的私有索引编入索引.我已经按照Apple的索引活动和导航点指南中的所有步骤进行了操作,但我的活动似乎根本没有被聚光灯索引.

指南说:

为了保证活动及其元数据被编入索引,您必须拥有对活动的强引用,直到将其添加到索引中.有两种方法可以执行此操作:第一种方法是将活动分配给创建活动的控制器对象中的属性.第二种方法是使用UIResponder对象的userActivity属性.

我选择了第一个选项(在我的视图控制器中创建一个属性来保存NSUserActivity).

var lastSearchedUserActivity: NSUserActivity?
Run Code Online (Sandbox Code Playgroud)

这个想法是,当用户搜索某些内容时,他的最后一个查询将在设备上编入索引.我有以下方法准备用户活动和(据称)索引它:

func prepareLastSearchedUserActivity(tags: [String], server: Server) {
    if Settings.applicationIndexedUserActivitiesAsShortcutTypes.contains(.LastSearched) {
        print("Get ready to index. and tags \(tags.reduce("") { "\($0) \($1)" })")
        let activity = NSUserActivity(activityType: ShortcutType.LastSearched.rawValue)

        activity.title = server.serverName
        activity.userInfo = ["tags": tags, "server name": server.serverName]

        let attributeSet = CSSearchableItemAttributeSet()
        attributeSet.contentDescription = tags.reduce("") { "\($0) \($1)" }
        attributeSet.relatedUniqueIdentifier = ShortcutType.LastSearched.rawValue

        activity.contentAttributeSet = attributeSet
        activity.keywords = Set(tags)
        activity.eligibleForSearch = true
        activity.eligibleForHandoff = false
        activity.becomeCurrent()
        self.lastSearchedUserActivity = activity
        //self.lastSearchedUserActivity?.becomeCurrent()
    }
}
Run Code Online (Sandbox Code Playgroud)

调用此方法时没有问题,但活动无法搜索:我尝试使用title …

spotlight ios ios9 ios-searchapi nsuseractivity

5
推荐指数
1
解决办法
812
查看次数

核心Spotlight用户信息始终为空

我正在使用CoreSpotlight api和NSUserActivityapi 的组合来索引应用程序内容。一切顺利,直到我点击搜索结果。在continueUserActivity方法中与userActivity一起传递的userInfo仅包含一项,即kCSSearchableItemActivityIdentifier。我的其他自定义键为nil。

这是我的索引项目代码。

class MyTestViewController:UIViewController{
     viewDidLoad(){
        searchHandler = SearchHandler()
        searchHandler.index(items)
     }
 }

 class  SearchHandler{
         var activity: NSUserActivity!

         func index(items:[Item]){
            for item in items{
         let attributeSet = getSearchItemAttribute(item)
                if let attributeSet =  attributeSet{
                    let searchableItem = CSSearchableItem(uniqueIdentifier: item.uniqueId, domainIdentifier:itemType.groupId(), attributeSet: attributeSet)
                    searchableItem.expirationDate = item.expirationDate
                    addToSpotlight([searchableItem])
                }

            activity = NSUserActivity(activityType: searchPrivacy.activity())
            activity.delegate = delegate

            //meta data
            activity.title = item.title

            var userInfoDic = [NSObject:AnyObject]()
            userInfoDic["indexItemType"] = itemType.rawValue
            userInfoDic["address"] = item.title
            activity.userInfo = userInfoDic

            if item.expirationDate != nil { …
Run Code Online (Sandbox Code Playgroud)

indexing ios ios9 corespotlight ios-searchapi

5
推荐指数
1
解决办法
1605
查看次数

找到了apple-app-site-association文件,但它没有遵循所需的格式

我正在使用Apple的这个API验证工具,我在特定页面中获得了6个验证通过,但"Universal Links"测试得到了以下消息:

"找到了apple-app-site-association文件,但它没有遵循所需的格式.了解如何格式化apple-app-site-association文件."

我在WWDC 2015" 无缝链接到您的应用程序 "和" 介绍Search API "中看到了这些视频,并阅读了此应用程序搜索编程指南.

我的网站有SSL证书(来自Authority认证),我的apple-app-site-association在https://www.mywebsite.com/apple-app-site-association里面

这是我的apple-app-site-association文件的示例:

{
"applinks": {
    "apps": [],
    "details": [
        {
            "appID": “TeamId.com.MyCompany.MyAppName01”,
            "paths": [ “*” ]
        },
        {
            "appID": "TeamId.com.MyCompany.MyAppName02”,
            "paths": [ "*" ]
        }
    ]
   }
}
Run Code Online (Sandbox Code Playgroud)

注意:appName是区分大小写的.

我不知道文件有什么问题.可能是语法错误,但我看不到它.

任何帮助将不胜感激.

ios ios-universal-app applinks ios9 ios-searchapi

3
推荐指数
1
解决办法
4545
查看次数