我在网站上添加了Web Markup,因此当用户在iOS 9中搜索时,项目将显示在Spotlight搜索结果中.用户可以浏览应用程序中的相同项目,因此我想创建NSUserActivity在用户浏览项目时链接到Web内容的对象.
现在,NSUserActivity有一个contentAttributeSet属性我将用于将缩略图照片附加到活动.CSSearchableItemAttributeSet有一些属性NSUserActivity也有,所以我不确定我应该实现哪一个,或者我应该为两者指定相同的数据.难道我设置title的NSUserActivity,以及在title上CSSearchableItemAttributeSet,或只有一个或其他?同样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) 我正在构建一个使用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) 我试图让我的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 …
我正在使用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) 我正在使用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是区分大小写的.
我不知道文件有什么问题.可能是语法错误,但我看不到它.
任何帮助将不胜感激.