Core Spotlight和深度链接结合使用(上)中我们已经说了Spotlight的创建和使用了这篇文章着重说怎么创建深度链接深度链接(Universal links)怎么和Spotlight结合使用在这里就不过多赘述什么是深度连接了在文末提供了几篇文章供大家参考,以及国内成熟的深度链接(Universal links)技术服务商LinkedME。
可以与iOS9 search功能配合使用的三种技术1、Universal links.2、Smart App Banners.3、Handoff.
为什么我们要使用Spotlight和深度链接
上篇中提到WWDC公布关于用户习惯的数据用户有 86% 的时间花在 App中,而如今App同质化现象这么严重,假设在手机上装了两个提供相同的内容App,除了推送通知以外我们都知道通知过度的使用会导致用户反感直接关闭通知我们怎么让用户打开我的App而不是打开别的App如果用户打开了我们的App我们怎么知道他是通过什么途径打开App的他感兴趣的内容是什么怎么获取用户的这些行为数据和兴趣爱好
传统的统计分析SDK只能统计App的启动次数页面的打开次数页面停留的时间但是无法统计用户是通过什么途径如QQ微信微博短信Spotlight..打开App甚至是打开App的某个页面。
使用深度链接LinkedME可以满足上面提出的所有问题产品同时提供了更详细的数据和渠道的统计和分析不仅仅是Spotlight的数据整个互联网的其他所有数据来源都能统计。
下面的Demo我们就使用LinkedME的SDK来开发。
第一步:导入Framework
MobileCoreServices.frameworkCoreSpotlight.framework不需要判断iOS 9 SDK内部已判断
第二步:导入头文件
import
第三步:创建Spotlight索引
import -(IBAction)creatSearchableItem{NSSet *set5 [NSSet setWithObjects:"linkedME", nil];//NSDictionary *dict {"test":"test"};[[LinkedME getInstance] createDiscoverableContentWithTitle:"LinkedME 国内第一家企业级深度链接" description:"让APP不再是信息孤岛!" thumbnailUrl:[NSURL URLWithString:"http://7xq8b0.com1.z0.glb.clouddn.com/logo.png"] linkParams:dict type:"" publiclyIndexable:NO keywords:set5 expirationDate:nil spotlightIdentifier:"bbcc" spotlightCallback:^(NSString *url, NSString *spotlightIdentifier, NSError *error) {[self performSelectorOnMainThread:selector(showAlert:) withObject:"索引创建成功" waitUntilDone:NO];}];}
参数详解
通过搜索结果跳转到相应页面在Appdelegate引入头文件
import
添加方法
//Universal Links 通用链接实现深度链接技术- (BOOL)application:(UIApplication*)application continueUserActivity: (NSUserActivity*)userActivity restorationHandler:(void (^) (NSArray*))restorationHandler{return [[LinkedME getInstance] continueUserActivity:userActivity];}
在didFinishLaunchingWithOptions中添加
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {LinkedME* linkedme [LinkedME getInstance];//获取跳转参数[linkedme initSessionWithLaunchOptions:launchOptions automaticallyDisplayDeepLinkController:NO deepLinkHandler:^(NSDictionary* params, NSError* error) {if (!error) {try {} catch (NSException *exception) {} finally {}} else {NSLog("LinkedME failed init: %", error);}}];return YES;}