1
votes

I read on some tutorial, and found that NSUserActivity for index info when user make an activity, Core Spotlight for index a set of content data in app.

Use NSUserActivity

var activity = NSUserActivity(activityType: "com.example.demo.searchapi")
activity.title = contactEntity.name
activity.userInfo = ["id": contactEntity.uid]
activity.eligibleForSearch = true
activity.keywords = NSSet(array: [contactEntity.name,contactEntity.phoneNumber, contactEntity.email]) as! Set

activity.becomeCurrent()

Use Core Spotlight

let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeContact as String)
attributeSet.title = contactEntity.name
attributeSet.relatedUniqueIdentifier = contactEntity.uid

let searchableItem = CSSearchableItem(uniqueIdentifier: contactEntity.uid, domainIdentifier: "com.example.demo.searchapi", attributeSet: attributeSet)

CSSearchableIndex.defaultSearchableIndex().indexSearchableItems(searchableItems) { error in  
if let error = error { 
    print("Error indexing: \(error)")
} else {
    print("Indexed.")
}

But I don't think there is difference between two solution result. If user make an activity, I can use Core Spotlight, instead of NSUserActivity. It give me same result.

So, why Apple have to provide two difference solutions which have same result?

1
NSUserActivity in iOS 9 has contentAttributeSet, which is of type CSSearchableItemAttributeSet onmyway133
I know it. But CSSearchableItem also init with a CSSearchableItemAttributeSet param. So why Apple provide two API (NSUserActivity and Core Spotlight) with same result. I don't find any differenceshuync
Core Spotlight does not support public indexing while NSUserActivity does. NSUserActivity can be used for both on-device and public indexing.PGDev

1 Answers

2
votes

I am now including Core Spotlight and NSUserActivity into my apps and I have come to learn some differences.

As @PGDev stated in your comments, NSUserActivity can be set to publicly be index (on Apples servers), which can then be helpful to be shown on other users' search results. While Core Spotlight is only per device.

The biggest beneficial difference with NSUserActivity, which applies to my apps, is that the more users perform the same activity, say read the same news story, the more popular that index becomes and can have beneficial outcomes. Apple - Enhance Your Search Results

  • The frequency with which users view your content (which is captured when you use NSUserActivity)
  • The amount of engagement users have with your content (determined by the engagement ratio, which is based on the number of times users tap an item related to your app and the number of app-related items that are displayed in search results)
  • The popularity of a URL in your website and the amount of structured data available