正文 快速接入Siri Shortcuts Siri Shortcuts的API有两大类:NSUserActivity和Intents。 ? 使用NSUserActivity接入Siri Shortcuts简单高效,只需十分钟。 ? <key>NSUserActivityTypes</key> <array> <string>loying.LearnSiriShortcut.type</string> </array> 2、配置NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:@"loying.LearnSiriShortcut.type"]; - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
二、iOS12 ShortCut 1.NSUserActivity 记录用户的操作,生成ShortCut,用户可以在设置->Siri->All ShortCuts中找到,可以匹配上语音,以后通过该语音调用用户的操作 - (NSUserActivity *)createUserActivityWithTitle:(NSString *)title userInfo:(NSDictionary *)userInfo{ NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:kKBSiriUserActivityTypeIdentifier App处理,需要在AppDelegate中处理回调,如下: -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
二、3种全新的搜索模式 1、NSUserActivity 我们可以在项目中使用相应的函数来添加一些用户的活跃元素,使我们可以在搜索中通过搜索这样的活跃元素展现我们的app。 例如: //创建一个对象,这里的type用于区分搜索的类型 NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType ]; 在下面的函数中,我们可以处理用户点击搜索后的回调: - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity NSUserActivaty一样,只是区分id的方式有所不同: - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
NSUserActivity NSUserActivity对象提供了一种轻量级的方式来描述你的应用程序状态,并将其用于以后。 流程 结合上面对于Core Spotlight和NSUserActivity的介绍,我们用代码段简单地梳理一下流程: 创建可搜索项 import CoreSpotlightlet attributeSet 由于传递给应用程序的NSUserActivity中仅提供有限的信息(contentAttributeSet为空),因此,我们只能依靠这个uri来确定对应的托管对象。 SwiftUI提供了一种便捷的方法onConinueUserActivity来处理系统传递的NSUserActivity。 我个人不太喜欢这种将处理NSUserActivity的逻辑嵌入视图代码的做法,如果想在UIWindowSceneDelegate中处理NSUserActivity,请参阅Core Data with CloudKit
completion:(void (^)(TestIntentResponse *response))completion NS_SWIFT_NAME(handle(intent:completion:)){ NSUserActivity *userActivity = [[NSUserActivity alloc] initWithActivityType:NSStringFromClass([TestIntent class])];
◆ ◆ ◆ 客户端代码 客户端进行开发时,无论采用UIKit还是SwiftUI,都是通过NSUserActivity对App Clips传入的URL做解析处理,并根据URL处理不同的业务逻辑,这块和 func scene(_ scene: UIScene, continue userActivity: NSUserActivity) { guard userActivity.activityType NSUserActivityTypeBrowsingWeb, perform: handleUserActivity) } } func handleUserActivity(_ userActivity: NSUserActivity
Appdelegate中实现代理方法,并做打开的相应处理 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
. - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity
/ 处理Universal Links或URL Schemefunc application(_ application: UIApplication, continue userActivity: NSUserActivity
Associated Domains 编写App被唤醒后的处理逻辑 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
公众号:iOS逆向 2.2 编写App被唤醒后的处理逻辑 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
3 App内部拦截Universial Link响应 -(BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
1 - (BOOL)application:(nonnull UIApplication *)application continueUserActivity:(nonnull NSUserActivity
return true } return false}func application(_ application: UIApplication, continue userActivity: NSUserActivity
AppDelegate.cs”文件; 2.重写方法,代码如下: public override bool ContinueUserActivity(UIApplication application, NSUserActivity
restorationHandler:方法中处理,如下: - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
]]) {return YES;}return YES;}- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity
实现方法 开发者通过 AppEntity 定义应用内容,并与 NSUserActivity 关联,使系统可以识别这些内容。
Universal Links Objective-C: - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity YES;} Swift: func application(_ application: UIApplication, continue userActivity: NSUserActivity
return YES; } return YES;} - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity