I added Web Markup to my website so items will appear in Spotlight Search results when users search in iOS 9. Users can browse the same items in the app, therefore I want to create NSUserActivity objects that link to the web content as users browse the items.
Now, NSUserActivity has a contentAttributeSet property which I will use to to attach a thumbnail photo to the activity. CSSearchableItemAttributeSet has some properties that NSUserActivity also has, so I am not sure which one I should implement or if I should specify the same data for both. Do I set the title for the NSUserActivity as well as the title on the CSSearchableItemAttributeSet, or only one or the other? Same with keywords which is a property on both as well.
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 = activity.title;
contentAttributeSet.keywords = [activity.keywords allObjects];
contentAttributeSet.contentDescription = @“My Description Here";
contentAttributeSet.thumbnailData = [self generateImage];
activity.contentAttributeSet = contentAttributeSet;
If the title property for both NSUserActivity and CSSearchableItemAttributeSet is specified, then
If the keyword property for both NSUserActivity and CSSearchableItemAttributeSet is specified, then the item is searchable using the keywords specified in the CSSearchableItemAttributeSet instance and not the keywords specified in the NSUserActivity instance.
There are no conflicts when properties are set either for NSUserActivity or CSSearchableItemAttributeSet.
So, when using CSSearchableItemAttributeSet with NSUserActivity, we can skip setting the CSSearchableItemAttributeSet properties which are common to NSUserActivity class.
After talking with DTS on this topic, this is their conclusion:
With regards properties, like
keywords, that can be set on both the NSUserActivity and the NSUserActivity’s embedded CSSearchableItemAttributeSet, the advice from Core Spotlight engineering is that you set them just on the CSSearchableItemAttributeSet.[
titleanddisplayName] are more-or-less the same, with the soft implication that, if the item has a really long title, that'd go in thetitleproperty and the abbreviated title would go in thedisplayNameproperty.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With