22. Core Spotlight (﴾Search)﴿
public override void Index (Task t)
{
var attributeSet = new CSSearchableItemAttributeSet (UTType.Text);
attributeSet.Title = t.Name;
attributeSet.ContentDescription = t.Notes;
attributeSet.TextContent = t.Notes;
var dataItem = new CSSearchableItem (t.Id.ToString(), "co.conceptdev.to9o",
attributeSet);
}
// delete items
CSSearchableIndex.DefaultSearchableIndex.Delete (new string[] {t.Id.ToString()}, err => {})
// index all-at-once (for reference material)
var dataItems = new List<CSSearchableItem>();
foreach (var session in sessions)
{
Index (session);
}
23. Responding to Search
public override bool ContinueUserActivity (UIApplication application,
NSUserActivity userActivity,
UIApplicationRestorationHandler completionHandler)
{
// Take action based on the activity type
if (userActivity.ActivityType == CSSearchableItem.ActionType)
{
var uuid = userActivity.UserInfo.ObjectForKey (CSSearchableItem.ActivityIdentifier);
ContinueNavigation (); // custom implementation
}
27. Creating NSUserActivity for Handoff
var activity = new NSUserActivity ("my.custom.identifier.add")(;
activity.EligibleForSearch = false; // don’t use this _and_ CoreSpotlight
activity.EligibleForPublicIndexing = false;
activity.EligibleForHandoff = true;
activity.Title = "Todo Detail";
var attributeSet = new CoreSpotlight.CSSearchableItemAttributeSet ();
attributeSet.DisplayName = "Add Todo";
attributeSet.ContentDescription = NSBundle.MainBundle.LocalizedString ("(new)","");
activity.AddUserInfoEntries (NSDictionary.FromObjectAndKey(new NSString("0"),
ActivityKeys.Id));
activity.ContentAttributeSet = attributeSet;
activity.BecomeCurrent (); // ViewWillDisappear: don’t forget to ResignCurrent()
ViewController
28. Responding to NSUserActivity
public override bool ContinueUserActivity (UIApplication application,
NSUserActivity userActivity,
UIApplicationRestorationHandler completionHandler)
{
// Take action based on the activity type
if (userActivity.ActivityType == "my.custom.identifier.add")
{
var uuid = userActivity.UserInfo.ObjectForKey
(CSSearchableItem.ActivityIdentifier);
ContinueNavigation (); // custom implementation
};
}
AppDelegate
29. Universal Links
Deep link into your app
Great for search, mail-‐outs
https://evolve.xamarin.com/session/56f441a3de91c6253c277bf6
30. Set up Universal Links
https://evolve.xamarin.com/apple-‐app-‐site-‐association
{
"applinks": {
"apps": [],
"details": [
{
"appID": "XXXX421985.com.xamarin.evolve",
"paths": [ "/session/*" ]
}
]
}
}
Entitlements.plist
App ID
apple-‐app-‐site-‐association
31. Responding to Universal Links
public override bool ContinueUserActivity (UIApplication application,
NSUserActivity userActivity,
UIApplicationRestorationHandler completionHandler)
{
if (userActivity.ActivityType == NSUserActivityType.BrowsingWeb)
{
var data = userActivity.WebPageUrl.AbsoluteString;
if (string.IsNullOrWhiteSpace (data) || !data.Contains ("/session/"))
return true;
var id = data.Substring (data.LastIndexOf ("/", StringComparison.Ordinal) + 1);
ContinueNavigation (); // custom implementation
}
}
AppDelegate