SlideShare a Scribd company logo
1 of 81
Download to read offline
Search APIs & Universal
Links
Mercari Inc.
@kitasuke
About me
Mercari
My works
→ Cardio -Simple HealthKit wrapper for workout app
in watchOS 2-
→ PagingMenuController -Paging view controller
with customizable menu-
→ GoogleMaterialIconFont -Google Material Design
Icons for Swift and ObjC-
My future talks
→ Introducing new features for watchOS 2
@MOSA software meeting
Search API
Completely New Search
Experience
App results appear in
Spotlight and Safari even
app not installed
Rich contents with
powerful action
Universal and Seamless
experience
How it works
Index contents via Search
APIs
What to index?
Index Architecture
On-Device index
Apple's cloud index
Let's see in-depth
features!
3 Search APIs
NSUserActivity
App Search
→ Activities can be designated as searchable
→ Add indexable metadata
→ Results in Spotlight and Safari
→ Revisit activity on Search selection
Enable Capabilities
var eligibleForHandoff: Bool
var eligibleForSearch: Bool
var eligibleForPublicIndexing: Bool
Provide Attributes and Keywords
var title: String?
var keywords: Set<String>
var contentAttributeSet: CSSearchableItemAttributeSet?
var expirationDate: NSDate
Restoring on the Web
var webpageURL: NSURL?
Create Activity
var activity: NSUserActivity = NSUserActivity(activityType: "com.example")
activity.title = "Baked Potato Chips"
activity.userInfo = ["id": "http://www.example.com/recipe/111"]
activity.eligibleForSearch = true
activity.eligibleForPublicIndexing = true
activity.becomeCurrent()
Continue Activity
func application(UIApplication,
continueUserActivity userActivity: NSUserActivity,
restorationHandler: [AnyObject]? -> Void) -> Bool {
if userActivity.activityType == "com.example" {
// Restore state for userActivity and userInfo
}
return true
}
Public Indexing
→ Activities can be designated as public
→ Multiple users engage with device results
→ Popular public results available to other users
→ Results in Search and Safari (if URL included)
Public vs Private
→ Designated "public" if searchable activity fields
are solely public
→ Provisions to prevent user-specific activities from
being indexed
Additional Benefits
Handoff
Siri suggestions
CoreSpotlight
CoreSpotlight
→ For any app content
→ Methods to add, update and delete items
→ Used by Messages, Mail, Calendar and Notes
Create item
// Create attributeSet and populate with metadata
let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeImage as String)
attributeSet.title = "Haleakala Sunrise"
attributeSet.contentDescription = "May 12, 2015 Maui, Hawaii"
// Create item with unique identifier, domainIdentifier used to group items
let item = CSSearchableItem(UniqueIdentifier: "1",
domainIdentifier: "album-1",
attributeSet: attributeSet)
Index item
// Index item
CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { error in
if error != nil {
print("Item indexed!")
}
}
Restore
// Application delegate called when CoreSpotlight result is tapped
func application(UIApplication,
continueUserActivity userActivity: NSUserActivity,
restorationHandler: [AnyObject]? -> Void) -> Bool {
if userActivity.activityType == CSSearchableItemActionType {
let uniqueIdentifier = userActivity.userInfo?
[CSSearchableItemActivityIdentifier] as? String
// Use 'uniqueIdentifier'
}
return true
}
Update
// Same method as adding item to index
func indexSearchableItems(items: [CSSearchableItem],
completionHandler: ((NSError?) -> Void)?)
Delete
// Identifiers
func deleteSearchableItemsWithIdentifiers(identifiers: [String],
completionHandler: ((NSError?) -> Void)?)
identifiers = ["1", "4", "5"]
Delete
// DomainIdentifier
func deleteSearchableItemsWithDomainIdentifiers(DomainIdentifiers: [String],
completionHandler: ((NSError?) -> Void)?)
domainIdentifiers = ["domain-2"]
Delete
// All
func deleteAllSearchableItemsWithCompletionHandler(completionHandler: ((NSError?) -> Void)?)
Web Markup
Indexing Web Content
→ The content driving your app may live on the web,
not locally inside the app
→ Deep linked pages from your app's website are
indexed for app search
Applebot finds deep links
from the web
Enabling app search
1. Allow Apple to discover and index your app's
website
2. Ensure your app's website contains markup for
mobile deep links
3. Enable deep link handling for your app
4. Add markup for structured data (optional, but
highly recommended)
Smart App Banners
if app is not installed, Safari prompts the user
<meta name="myApp"
content="app-id=123,
app-argument=https://example.com/about
affiliate-date=optionalAffiliateData">
app-argument is passed to
application(_:openURL:sourceApplication:annotation:), and is
also used to index your app
Deep Linking
→ Universal link
https://developer.apple.com/videos/wwdc/2014/?
include=101#101
→ Custom URL scheme
apple://wwdc/2014/?include=101#101
Universal links advantages
→ Unique
→ Secure
→ Flexible
→ Work seamlessly across app and website
Support Universal Link in your server
→ Create your apple-app-site-association file
→ Generate an SSL certification
→ Sign your file
→ Upload to your server
Support Universal Link in your app
func application(application: UIApplication,
continueUserActivity userActivity: NSUserActivity,
restorationHandler: ([AnyObject]!) -> Void) -> Bool
var webpageURL: NSURL?
var activityType: String
let NSUserActivityTypeBrowsingWeb: String
class NSURLComponents: NSObject
Configure your associated domains
Other deep link schemes
Twitter Cards
<meta name="twitter:app:name:iphone" content="myAppName">
<meta name="twitter:app:id:iphone" content="myAppID">
<meta name="twitter:app:url:iphone" content="myURL">
Facebook's App Links
<meta name="al:ios:app_name" content="myAppName">
<meta name="al:ios:app_store_id" content="myAppID">
<meta name="al:ios:url" content="myURL">
Support deep linking
func application(application: UIApplication, openURL url: NSURL,
sourceApplication: String?, annotation: AnyObject) -> Bool {
// In this example, the URL is http://example.com/profile/?123
guard let component = NSURLComponents(URL: url, resolvingAgainstBaseURL: true),
let path = component.path, let query = component.query else { return false }
if path == "/profile" {
// Pass the profile ID from the URL, to the view controller
return profileViewController.loadProfile(query)
}
return false
}
Rich Results
→ Go beyond just a title and description
→ Results can contain images, structured data, and
even actions
→ Rich results are more engaging to users and can
improve your ranking
Other deep link schemes
Open Graph
<meta property="og:image" content="http://example.com/hello.jpg">
<meta property="og:audio" content="http://example.com/music.m4a">
<meta property="og:video" content="http://example.com/cats.mp4">
schema.org JSON-LD
<script type="application/ld+json">
{
"@context": "http://schema.org",
"@type": "AggregateRating",
"ratingValue": "4",
"reviewCount": "250"
}
</script>
Supported schemas
→ AggregateRating
→ Offers
→ PriceRange
→ InteractionCount
→ Organization
→ Recipe
App Search API Validation Tool
Test your webpage for iOS 9 Search APIs. Enter a URL
and Applebot will crawl your webpage and show
how you can optimize for best results.
https://search.developer.apple.com/appsearch-
validation-tool/
Improve Ranking
Relevance
Linking 3 APIs
Linking 2 APIs
Relevance score
User Experience
Descriptive Results
Richer results have better satisfaction and engagement
→ Thumbnail, well-structured description, ratings,
and actions
→ Relevant and applealing image
→ Key information user is looking for
Keywords associate your result with queries
→ Typical items should have 3 to 5 keywords
→ Category keywords, e.g., "ticket" or "recipe"
→ Synonyms or abbreviations for item subject
UI Behavior on App Launch
Speed
Time from tapping a search result to the content in
your app is measured and used in ranking.
Data protection
Pay attention to the appropriate data protection
level for your user's content.
Common FAQs
Not showing in the search results
→ Try using different keywords
→ In the case of Web Markup, results will only show
up after the page has been crawled by Applebot,
and once a certain level of relevance has been
attained
Supported devices?
App Search is available with iOS9, However, the
search functionality of NSUserActivity and
CoreSpotlight are not supported on the iPhone 4s,
iPad 2, iPad (3rd generation), iPad mini, and iPod
touch (5th generation).
Available on OS X?
CoreSpotlight and the search functionality of
NSUserActivity are not supported. However, web
search results may be shown.
References
Introducing Search APIs
Seamless Linking to Your App
iOS Search API Best Practices and FAQs

More Related Content

What's hot

Working With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps DevelopmentWorking With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps DevelopmentPankaj Srivastava
 
Building Android apps with Parse
Building Android apps with ParseBuilding Android apps with Parse
Building Android apps with ParseDroidConTLV
 
How To Manage API Request with AXIOS on a React Native App
How To Manage API Request with AXIOS on a React Native AppHow To Manage API Request with AXIOS on a React Native App
How To Manage API Request with AXIOS on a React Native AppAndolasoft Inc
 
Introduction to SharePoint 2013 REST API
Introduction to SharePoint 2013 REST APIIntroduction to SharePoint 2013 REST API
Introduction to SharePoint 2013 REST APIQUONTRASOLUTIONS
 
Android Intermediatte IAK full
Android Intermediatte IAK fullAndroid Intermediatte IAK full
Android Intermediatte IAK fullAhmad Arif Faizin
 
AnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyAnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyKiana Tennyson
 
SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationAdil Ansari
 
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...Lviv Startup Club
 
Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013
Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013
Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013Aaron Parecki
 
08.1. Android How to Use Intent (explicit)
08.1. Android How to Use Intent (explicit)08.1. Android How to Use Intent (explicit)
08.1. Android How to Use Intent (explicit)Oum Saokosal
 
Are you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsAre you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsLiam Cleary [MVP]
 
Parse cloud code
Parse cloud codeParse cloud code
Parse cloud code維佋 唐
 
Lightning Components Workshop
Lightning Components WorkshopLightning Components Workshop
Lightning Components WorkshopGordon Bockus
 
Using intents in android
Using intents in androidUsing intents in android
Using intents in androidOum Saokosal
 
File Repository on GAE
File Repository on GAEFile Repository on GAE
File Repository on GAElynneblue
 

What's hot (20)

Working With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps DevelopmentWorking With Sharepoint 2013 Apps Development
Working With Sharepoint 2013 Apps Development
 
Building Android apps with Parse
Building Android apps with ParseBuilding Android apps with Parse
Building Android apps with Parse
 
Android search
Android searchAndroid search
Android search
 
How To Manage API Request with AXIOS on a React Native App
How To Manage API Request with AXIOS on a React Native AppHow To Manage API Request with AXIOS on a React Native App
How To Manage API Request with AXIOS on a React Native App
 
What's Parse
What's ParseWhat's Parse
What's Parse
 
Introduction to SharePoint 2013 REST API
Introduction to SharePoint 2013 REST APIIntroduction to SharePoint 2013 REST API
Introduction to SharePoint 2013 REST API
 
Android Intermediatte IAK full
Android Intermediatte IAK fullAndroid Intermediatte IAK full
Android Intermediatte IAK full
 
AnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior CreativelyAnDevCon - Tracking User Behavior Creatively
AnDevCon - Tracking User Behavior Creatively
 
SharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote AuthenticationSharePoint 2013 REST API & Remote Authentication
SharePoint 2013 REST API & Remote Authentication
 
Parse Advanced
Parse AdvancedParse Advanced
Parse Advanced
 
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
Lviv MDDay 2014. Ігор Коробка “забезпечення базової безпеки в андроїд аплікац...
 
Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013
Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013
Building Web Apps with the Esri-Leaflet Plugin - Dubai DevSummit 2013
 
08.1. Android How to Use Intent (explicit)
08.1. Android How to Use Intent (explicit)08.1. Android How to Use Intent (explicit)
08.1. Android How to Use Intent (explicit)
 
Are you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint AppsAre you getting Sleepy. REST in SharePoint Apps
Are you getting Sleepy. REST in SharePoint Apps
 
Parse cloud code
Parse cloud codeParse cloud code
Parse cloud code
 
Lightning Components Workshop
Lightning Components WorkshopLightning Components Workshop
Lightning Components Workshop
 
Using intents in android
Using intents in androidUsing intents in android
Using intents in android
 
Actionview
ActionviewActionview
Actionview
 
Html indexed db
Html indexed dbHtml indexed db
Html indexed db
 
File Repository on GAE
File Repository on GAEFile Repository on GAE
File Repository on GAE
 

Viewers also liked

Share Extension@pixiv
Share Extension@pixivShare Extension@pixiv
Share Extension@pixivYusuke Kita
 
Today & Share Extension@potatotips
Today & Share Extension@potatotipsToday & Share Extension@potatotips
Today & Share Extension@potatotipsYusuke Kita
 
WatchKit@potatotips
WatchKit@potatotipsWatchKit@potatotips
WatchKit@potatotipsYusuke Kita
 
App extensionでテストコードを書く
App extensionでテストコードを書くApp extensionでテストコードを書く
App extensionでテストコードを書くYusuke Kita
 
SwiftCoreとFoundationを読んでみた
SwiftCoreとFoundationを読んでみたSwiftCoreとFoundationを読んでみた
SwiftCoreとFoundationを読んでみたYusuke Kita
 
WKInterfaceMap on Apple Watch
WKInterfaceMap on Apple WatchWKInterfaceMap on Apple Watch
WKInterfaceMap on Apple WatchYusuke Kita
 
Useful and Practical Functionalities in Realm
Useful and Practical Functionalities in RealmUseful and Practical Functionalities in Realm
Useful and Practical Functionalities in RealmYusuke Kita
 
Uiテスト@yidev
Uiテスト@yidevUiテスト@yidev
Uiテスト@yidevYusuke Kita
 
WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由Yusuke Kita
 
Protocol in Swift
Protocol in SwiftProtocol in Swift
Protocol in SwiftYusuke Kita
 
Advanced realm in swift
Advanced realm in swiftAdvanced realm in swift
Advanced realm in swiftYusuke Kita
 
iOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotipsiOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotipsYusuke Kita
 
User Scenario based UI testing with KIF
User Scenario based UI testing with KIFUser Scenario based UI testing with KIF
User Scenario based UI testing with KIFYusuke Kita
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swiftYusuke Kita
 

Viewers also liked (15)

Share Extension@pixiv
Share Extension@pixivShare Extension@pixiv
Share Extension@pixiv
 
Today & Share Extension@potatotips
Today & Share Extension@potatotipsToday & Share Extension@potatotips
Today & Share Extension@potatotips
 
WatchKit@potatotips
WatchKit@potatotipsWatchKit@potatotips
WatchKit@potatotips
 
App extensionでテストコードを書く
App extensionでテストコードを書くApp extensionでテストコードを書く
App extensionでテストコードを書く
 
SwiftCoreとFoundationを読んでみた
SwiftCoreとFoundationを読んでみたSwiftCoreとFoundationを読んでみた
SwiftCoreとFoundationを読んでみた
 
Swift core
Swift coreSwift core
Swift core
 
WKInterfaceMap on Apple Watch
WKInterfaceMap on Apple WatchWKInterfaceMap on Apple Watch
WKInterfaceMap on Apple Watch
 
Useful and Practical Functionalities in Realm
Useful and Practical Functionalities in RealmUseful and Practical Functionalities in Realm
Useful and Practical Functionalities in Realm
 
Uiテスト@yidev
Uiテスト@yidevUiテスト@yidev
Uiテスト@yidev
 
WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由WWDCのチケット外れてもSFに行った方が良い理由
WWDCのチケット外れてもSFに行った方が良い理由
 
Protocol in Swift
Protocol in SwiftProtocol in Swift
Protocol in Swift
 
Advanced realm in swift
Advanced realm in swiftAdvanced realm in swift
Advanced realm in swift
 
iOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotipsiOSにおけるUIテスト@potetotips
iOSにおけるUIテスト@potetotips
 
User Scenario based UI testing with KIF
User Scenario based UI testing with KIFUser Scenario based UI testing with KIF
User Scenario based UI testing with KIF
 
Command Line Tool in swift
Command Line Tool in swiftCommand Line Tool in swift
Command Line Tool in swift
 

Similar to Search APIs & Universal Links

Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015MobileMoxie
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Suzzicks
 
Deep linking slides
Deep linking slidesDeep linking slides
Deep linking slidesPersonagraph
 
Hooking SharePoint APIs with Android
Hooking SharePoint APIs with AndroidHooking SharePoint APIs with Android
Hooking SharePoint APIs with AndroidKris Wagner
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!Craig Schumann
 
Prototyping applications with heroku and elasticsearch
 Prototyping applications with heroku and elasticsearch Prototyping applications with heroku and elasticsearch
Prototyping applications with heroku and elasticsearchprotofy
 
An IT Pro Guide to Deploying and Managing SharePoint 2013 Apps
An IT Pro Guide to Deploying and Managing SharePoint 2013 AppsAn IT Pro Guide to Deploying and Managing SharePoint 2013 Apps
An IT Pro Guide to Deploying and Managing SharePoint 2013 AppsRandy Williams
 
Hi5 Hackathon Presentation
Hi5 Hackathon PresentationHi5 Hackathon Presentation
Hi5 Hackathon PresentationLou Moore
 
Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)Luc Bors
 
Get started with building native mobile apps interacting with SharePoint
Get started with building native mobile apps interacting with SharePointGet started with building native mobile apps interacting with SharePoint
Get started with building native mobile apps interacting with SharePointYaroslav Pentsarskyy [MVP]
 
google drive and the google drive sdk
google drive and the google drive sdkgoogle drive and the google drive sdk
google drive and the google drive sdkfirenze-gtug
 
Approaches to mobile site development
Approaches to mobile site developmentApproaches to mobile site development
Approaches to mobile site developmentErik Mitchell
 
How to Setup App Indexation
How to Setup App IndexationHow to Setup App Indexation
How to Setup App IndexationJustin Briggs
 
Appear IQ - Tutorials Backbone.js
Appear IQ - Tutorials Backbone.jsAppear IQ - Tutorials Backbone.js
Appear IQ - Tutorials Backbone.jsAppear
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web DevelopmentRobert J. Stein
 
Creating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure FunctionsCreating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure FunctionsMurray Fife
 

Similar to Search APIs & Universal Links (20)

Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
 
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
Life After Mobilegeddon: App Deep Linking Strategies - Pubcon October 2015
 
Deep linking slides
Deep linking slidesDeep linking slides
Deep linking slides
 
Hooking SharePoint APIs with Android
Hooking SharePoint APIs with AndroidHooking SharePoint APIs with Android
Hooking SharePoint APIs with Android
 
Search API
Search APISearch API
Search API
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!
 
Prototyping applications with heroku and elasticsearch
 Prototyping applications with heroku and elasticsearch Prototyping applications with heroku and elasticsearch
Prototyping applications with heroku and elasticsearch
 
An IT Pro Guide to Deploying and Managing SharePoint 2013 Apps
An IT Pro Guide to Deploying and Managing SharePoint 2013 AppsAn IT Pro Guide to Deploying and Managing SharePoint 2013 Apps
An IT Pro Guide to Deploying and Managing SharePoint 2013 Apps
 
Korhan bircan
Korhan bircanKorhan bircan
Korhan bircan
 
Hi5 Hackathon Presentation
Hi5 Hackathon PresentationHi5 Hackathon Presentation
Hi5 Hackathon Presentation
 
Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)Reaching out from ADF Mobile (ODTUG KScope 2014)
Reaching out from ADF Mobile (ODTUG KScope 2014)
 
Get started with building native mobile apps interacting with SharePoint
Get started with building native mobile apps interacting with SharePointGet started with building native mobile apps interacting with SharePoint
Get started with building native mobile apps interacting with SharePoint
 
Android search
Android searchAndroid search
Android search
 
google drive and the google drive sdk
google drive and the google drive sdkgoogle drive and the google drive sdk
google drive and the google drive sdk
 
Approaches to mobile site development
Approaches to mobile site developmentApproaches to mobile site development
Approaches to mobile site development
 
How to Setup App Indexation
How to Setup App IndexationHow to Setup App Indexation
How to Setup App Indexation
 
Appear IQ - Tutorials Backbone.js
Appear IQ - Tutorials Backbone.jsAppear IQ - Tutorials Backbone.js
Appear IQ - Tutorials Backbone.js
 
04 objective-c session 4
04  objective-c session 404  objective-c session 4
04 objective-c session 4
 
Advanced Web Development
Advanced Web DevelopmentAdvanced Web Development
Advanced Web Development
 
Creating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure FunctionsCreating a Custom PowerApp Connector using Azure Functions
Creating a Custom PowerApp Connector using Azure Functions
 

More from Yusuke Kita

Integrating libSyntax into the compiler pipeline
Integrating libSyntax into the compiler pipelineIntegrating libSyntax into the compiler pipeline
Integrating libSyntax into the compiler pipelineYusuke Kita
 
Making your own tool using SwiftSyntax
Making your own tool using SwiftSyntaxMaking your own tool using SwiftSyntax
Making your own tool using SwiftSyntaxYusuke Kita
 
[Deprecated] Integrating libSyntax into the compiler pipeline
[Deprecated] Integrating libSyntax into the compiler pipeline[Deprecated] Integrating libSyntax into the compiler pipeline
[Deprecated] Integrating libSyntax into the compiler pipelineYusuke Kita
 
Creating your own Bitrise step
Creating your own Bitrise stepCreating your own Bitrise step
Creating your own Bitrise stepYusuke Kita
 
Introducing swift-format
Introducing swift-formatIntroducing swift-format
Introducing swift-formatYusuke Kita
 
Unidirectional Data Flow Through SwiftUI
Unidirectional Data Flow Through SwiftUIUnidirectional Data Flow Through SwiftUI
Unidirectional Data Flow Through SwiftUIYusuke Kita
 
Open Source Swift Workshop
Open Source Swift WorkshopOpen Source Swift Workshop
Open Source Swift WorkshopYusuke Kita
 
Contributing to Swift Compiler
Contributing to Swift CompilerContributing to Swift Compiler
Contributing to Swift CompilerYusuke Kita
 
Writing a compiler in go
Writing a compiler in goWriting a compiler in go
Writing a compiler in goYusuke Kita
 
Writing an interpreter in swift
Writing an interpreter in swiftWriting an interpreter in swift
Writing an interpreter in swiftYusuke Kita
 
SIL Optimizations - AllocBoxToStack
SIL Optimizations - AllocBoxToStackSIL Optimizations - AllocBoxToStack
SIL Optimizations - AllocBoxToStackYusuke Kita
 
SIL for First Time Learners
SIL for First Time LearnersSIL for First Time Learners
SIL for First Time LearnersYusuke Kita
 
SIL for First Time Leaners LT
SIL for First Time Leaners LTSIL for First Time Leaners LT
SIL for First Time Leaners LTYusuke Kita
 
How to try! Swift
How to try! SwiftHow to try! Swift
How to try! SwiftYusuke Kita
 
SIL for the first time
SIL for the first timeSIL for the first time
SIL for the first timeYusuke Kita
 
Introducing protobuf in Swift
Introducing protobuf in SwiftIntroducing protobuf in Swift
Introducing protobuf in SwiftYusuke Kita
 
Type-safe Web APIs with Protocol Buffers in Swift at AltConf
Type-safe Web APIs with Protocol Buffers in Swift at AltConfType-safe Web APIs with Protocol Buffers in Swift at AltConf
Type-safe Web APIs with Protocol Buffers in Swift at AltConfYusuke Kita
 
Type-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSConType-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSConYusuke Kita
 

More from Yusuke Kita (19)

Integrating libSyntax into the compiler pipeline
Integrating libSyntax into the compiler pipelineIntegrating libSyntax into the compiler pipeline
Integrating libSyntax into the compiler pipeline
 
Making your own tool using SwiftSyntax
Making your own tool using SwiftSyntaxMaking your own tool using SwiftSyntax
Making your own tool using SwiftSyntax
 
[Deprecated] Integrating libSyntax into the compiler pipeline
[Deprecated] Integrating libSyntax into the compiler pipeline[Deprecated] Integrating libSyntax into the compiler pipeline
[Deprecated] Integrating libSyntax into the compiler pipeline
 
Creating your own Bitrise step
Creating your own Bitrise stepCreating your own Bitrise step
Creating your own Bitrise step
 
Introducing swift-format
Introducing swift-formatIntroducing swift-format
Introducing swift-format
 
Unidirectional Data Flow Through SwiftUI
Unidirectional Data Flow Through SwiftUIUnidirectional Data Flow Through SwiftUI
Unidirectional Data Flow Through SwiftUI
 
Open Source Swift Workshop
Open Source Swift WorkshopOpen Source Swift Workshop
Open Source Swift Workshop
 
Contributing to Swift Compiler
Contributing to Swift CompilerContributing to Swift Compiler
Contributing to Swift Compiler
 
Writing a compiler in go
Writing a compiler in goWriting a compiler in go
Writing a compiler in go
 
Writing an interpreter in swift
Writing an interpreter in swiftWriting an interpreter in swift
Writing an interpreter in swift
 
SIL Optimizations - AllocBoxToStack
SIL Optimizations - AllocBoxToStackSIL Optimizations - AllocBoxToStack
SIL Optimizations - AllocBoxToStack
 
SIL for First Time Learners
SIL for First Time LearnersSIL for First Time Learners
SIL for First Time Learners
 
var, let in SIL
var, let in SILvar, let in SIL
var, let in SIL
 
SIL for First Time Leaners LT
SIL for First Time Leaners LTSIL for First Time Leaners LT
SIL for First Time Leaners LT
 
How to try! Swift
How to try! SwiftHow to try! Swift
How to try! Swift
 
SIL for the first time
SIL for the first timeSIL for the first time
SIL for the first time
 
Introducing protobuf in Swift
Introducing protobuf in SwiftIntroducing protobuf in Swift
Introducing protobuf in Swift
 
Type-safe Web APIs with Protocol Buffers in Swift at AltConf
Type-safe Web APIs with Protocol Buffers in Swift at AltConfType-safe Web APIs with Protocol Buffers in Swift at AltConf
Type-safe Web APIs with Protocol Buffers in Swift at AltConf
 
Type-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSConType-safe Web APIs with Protocol Buffers in Swift at iOSCon
Type-safe Web APIs with Protocol Buffers in Swift at iOSCon
 

Recently uploaded

Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераMark Opanasiuk
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIES VE
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?Mark Billinghurst
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2DianaGray10
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024Stephanie Beckett
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxAbida Shariff
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekCzechDreamin
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxJennifer Lim
 
Buy Epson EcoTank L3210 Colour Printer Online.pdf
Buy Epson EcoTank L3210 Colour Printer Online.pdfBuy Epson EcoTank L3210 Colour Printer Online.pdf
Buy Epson EcoTank L3210 Colour Printer Online.pdfEasyPrinterHelp
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsStefano
 
Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024TopCSSGallery
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1DianaGray10
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FIDO Alliance
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxDavid Michel
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfFIDO Alliance
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsUXDXConf
 
Agentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdfAgentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdfChristopherTHyatt
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Julian Hyde
 

Recently uploaded (20)

Intro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджераIntro in Product Management - Коротко про професію продакт менеджера
Intro in Product Management - Коротко про професію продакт менеджера
 
Syngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdfSyngulon - Selection technology May 2024.pdf
Syngulon - Selection technology May 2024.pdf
 
IESVE for Early Stage Design and Planning
IESVE for Early Stage Design and PlanningIESVE for Early Stage Design and Planning
IESVE for Early Stage Design and Planning
 
The Metaverse: Are We There Yet?
The  Metaverse:    Are   We  There  Yet?The  Metaverse:    Are   We  There  Yet?
The Metaverse: Are We There Yet?
 
UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2UiPath Test Automation using UiPath Test Suite series, part 2
UiPath Test Automation using UiPath Test Suite series, part 2
 
What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024What's New in Teams Calling, Meetings and Devices April 2024
What's New in Teams Calling, Meetings and Devices April 2024
 
Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024Enterprise Knowledge Graphs - Data Summit 2024
Enterprise Knowledge Graphs - Data Summit 2024
 
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptxIOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
IOS-PENTESTING-BEGINNERS-PRACTICAL-GUIDE-.pptx
 
AI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří KarpíšekAI revolution and Salesforce, Jiří Karpíšek
AI revolution and Salesforce, Jiří Karpíšek
 
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptxWSO2CONMay2024OpenSourceConferenceDebrief.pptx
WSO2CONMay2024OpenSourceConferenceDebrief.pptx
 
Buy Epson EcoTank L3210 Colour Printer Online.pdf
Buy Epson EcoTank L3210 Colour Printer Online.pdfBuy Epson EcoTank L3210 Colour Printer Online.pdf
Buy Epson EcoTank L3210 Colour Printer Online.pdf
 
PLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. StartupsPLAI - Acceleration Program for Generative A.I. Startups
PLAI - Acceleration Program for Generative A.I. Startups
 
Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024Top 10 Symfony Development Companies 2024
Top 10 Symfony Development Companies 2024
 
UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1UiPath Test Automation using UiPath Test Suite series, part 1
UiPath Test Automation using UiPath Test Suite series, part 1
 
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
FDO for Camera, Sensor and Networking Device – Commercial Solutions from VinC...
 
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptxUnpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
Unpacking Value Delivery - Agile Oxford Meetup - May 2024.pptx
 
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdfWhere to Learn More About FDO _ Richard at FIDO Alliance.pdf
Where to Learn More About FDO _ Richard at FIDO Alliance.pdf
 
Strategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering TeamsStrategic AI Integration in Engineering Teams
Strategic AI Integration in Engineering Teams
 
Agentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdfAgentic RAG What it is its types applications and implementation.pdf
Agentic RAG What it is its types applications and implementation.pdf
 
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
Measures in SQL (a talk at SF Distributed Systems meetup, 2024-05-22)
 

Search APIs & Universal Links

  • 1. Search APIs & Universal Links Mercari Inc. @kitasuke
  • 4. My works → Cardio -Simple HealthKit wrapper for workout app in watchOS 2- → PagingMenuController -Paging view controller with customizable menu- → GoogleMaterialIconFont -Google Material Design Icons for Swift and ObjC-
  • 5. My future talks → Introducing new features for watchOS 2 @MOSA software meeting
  • 8. App results appear in Spotlight and Safari even app not installed
  • 9.
  • 11.
  • 13.
  • 15. Index contents via Search APIs
  • 22.
  • 24. App Search → Activities can be designated as searchable → Add indexable metadata → Results in Spotlight and Safari → Revisit activity on Search selection
  • 25. Enable Capabilities var eligibleForHandoff: Bool var eligibleForSearch: Bool var eligibleForPublicIndexing: Bool
  • 26. Provide Attributes and Keywords var title: String? var keywords: Set<String> var contentAttributeSet: CSSearchableItemAttributeSet? var expirationDate: NSDate
  • 27. Restoring on the Web var webpageURL: NSURL?
  • 28. Create Activity var activity: NSUserActivity = NSUserActivity(activityType: "com.example") activity.title = "Baked Potato Chips" activity.userInfo = ["id": "http://www.example.com/recipe/111"] activity.eligibleForSearch = true activity.eligibleForPublicIndexing = true activity.becomeCurrent()
  • 29.
  • 30. Continue Activity func application(UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: [AnyObject]? -> Void) -> Bool { if userActivity.activityType == "com.example" { // Restore state for userActivity and userInfo } return true }
  • 31. Public Indexing → Activities can be designated as public → Multiple users engage with device results → Popular public results available to other users → Results in Search and Safari (if URL included)
  • 32. Public vs Private → Designated "public" if searchable activity fields are solely public → Provisions to prevent user-specific activities from being indexed
  • 37. CoreSpotlight → For any app content → Methods to add, update and delete items → Used by Messages, Mail, Calendar and Notes
  • 38.
  • 39. Create item // Create attributeSet and populate with metadata let attributeSet = CSSearchableItemAttributeSet(itemContentType: kUTTypeImage as String) attributeSet.title = "Haleakala Sunrise" attributeSet.contentDescription = "May 12, 2015 Maui, Hawaii" // Create item with unique identifier, domainIdentifier used to group items let item = CSSearchableItem(UniqueIdentifier: "1", domainIdentifier: "album-1", attributeSet: attributeSet)
  • 40. Index item // Index item CSSearchableIndex.defaultSearchableIndex().indexSearchableItems([item]) { error in if error != nil { print("Item indexed!") } }
  • 41. Restore // Application delegate called when CoreSpotlight result is tapped func application(UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: [AnyObject]? -> Void) -> Bool { if userActivity.activityType == CSSearchableItemActionType { let uniqueIdentifier = userActivity.userInfo? [CSSearchableItemActivityIdentifier] as? String // Use 'uniqueIdentifier' } return true }
  • 42. Update // Same method as adding item to index func indexSearchableItems(items: [CSSearchableItem], completionHandler: ((NSError?) -> Void)?)
  • 43. Delete // Identifiers func deleteSearchableItemsWithIdentifiers(identifiers: [String], completionHandler: ((NSError?) -> Void)?) identifiers = ["1", "4", "5"]
  • 44. Delete // DomainIdentifier func deleteSearchableItemsWithDomainIdentifiers(DomainIdentifiers: [String], completionHandler: ((NSError?) -> Void)?) domainIdentifiers = ["domain-2"]
  • 47. Indexing Web Content → The content driving your app may live on the web, not locally inside the app → Deep linked pages from your app's website are indexed for app search
  • 48. Applebot finds deep links from the web
  • 49.
  • 50. Enabling app search 1. Allow Apple to discover and index your app's website 2. Ensure your app's website contains markup for mobile deep links 3. Enable deep link handling for your app 4. Add markup for structured data (optional, but highly recommended)
  • 51.
  • 52. Smart App Banners if app is not installed, Safari prompts the user <meta name="myApp" content="app-id=123, app-argument=https://example.com/about affiliate-date=optionalAffiliateData"> app-argument is passed to application(_:openURL:sourceApplication:annotation:), and is also used to index your app
  • 53. Deep Linking → Universal link https://developer.apple.com/videos/wwdc/2014/? include=101#101 → Custom URL scheme apple://wwdc/2014/?include=101#101
  • 54. Universal links advantages → Unique → Secure → Flexible → Work seamlessly across app and website
  • 55. Support Universal Link in your server → Create your apple-app-site-association file → Generate an SSL certification → Sign your file → Upload to your server
  • 56. Support Universal Link in your app func application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]!) -> Void) -> Bool var webpageURL: NSURL? var activityType: String let NSUserActivityTypeBrowsingWeb: String class NSURLComponents: NSObject
  • 58. Other deep link schemes Twitter Cards <meta name="twitter:app:name:iphone" content="myAppName"> <meta name="twitter:app:id:iphone" content="myAppID"> <meta name="twitter:app:url:iphone" content="myURL"> Facebook's App Links <meta name="al:ios:app_name" content="myAppName"> <meta name="al:ios:app_store_id" content="myAppID"> <meta name="al:ios:url" content="myURL">
  • 59. Support deep linking func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { // In this example, the URL is http://example.com/profile/?123 guard let component = NSURLComponents(URL: url, resolvingAgainstBaseURL: true), let path = component.path, let query = component.query else { return false } if path == "/profile" { // Pass the profile ID from the URL, to the view controller return profileViewController.loadProfile(query) } return false }
  • 60. Rich Results → Go beyond just a title and description → Results can contain images, structured data, and even actions → Rich results are more engaging to users and can improve your ranking
  • 61. Other deep link schemes Open Graph <meta property="og:image" content="http://example.com/hello.jpg"> <meta property="og:audio" content="http://example.com/music.m4a"> <meta property="og:video" content="http://example.com/cats.mp4"> schema.org JSON-LD <script type="application/ld+json"> { "@context": "http://schema.org", "@type": "AggregateRating", "ratingValue": "4", "reviewCount": "250" } </script>
  • 62.
  • 63. Supported schemas → AggregateRating → Offers → PriceRange → InteractionCount → Organization → Recipe
  • 64. App Search API Validation Tool Test your webpage for iOS 9 Search APIs. Enter a URL and Applebot will crawl your webpage and show how you can optimize for best results. https://search.developer.apple.com/appsearch- validation-tool/
  • 72. Richer results have better satisfaction and engagement → Thumbnail, well-structured description, ratings, and actions → Relevant and applealing image → Key information user is looking for
  • 73. Keywords associate your result with queries → Typical items should have 3 to 5 keywords → Category keywords, e.g., "ticket" or "recipe" → Synonyms or abbreviations for item subject
  • 74. UI Behavior on App Launch
  • 75. Speed Time from tapping a search result to the content in your app is measured and used in ranking.
  • 76. Data protection Pay attention to the appropriate data protection level for your user's content.
  • 78. Not showing in the search results → Try using different keywords → In the case of Web Markup, results will only show up after the page has been crawled by Applebot, and once a certain level of relevance has been attained
  • 79. Supported devices? App Search is available with iOS9, However, the search functionality of NSUserActivity and CoreSpotlight are not supported on the iPhone 4s, iPad 2, iPad (3rd generation), iPad mini, and iPod touch (5th generation).
  • 80. Available on OS X? CoreSpotlight and the search functionality of NSUserActivity are not supported. However, web search results may be shown.
  • 81. References Introducing Search APIs Seamless Linking to Your App iOS Search API Best Practices and FAQs