我已经在我们的应用程序中实现了 CallKit。我们的应用程序拨打的电话显示在本机电话应用程序的最近列表中。
当在最近列表中点击我们的应用程序的条目时,我们的应用程序就会启动。有没有办法找出启动我们的应用程序使用的数字(/条目)?(openURL 什么的)
您需要application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool
在 AppDelegate 上实现。对于此特定操作,userActivity
将具有一个interaction
属性,该intent
属性是一个实例INStartAudioCallIntent
(或者INStartVideoCallIntent
如果您的应用程序执行视频)。
意图对象上有一个联系人对象数组,INPerson
可用于确定有关所拨打内容的信息。
如果您的应用程序没有将任何联系人加载到系统中,那么您的呼叫是一对一的(而不是群组),并且您只想访问“已拨号码”,您可能会在intent.contacts?.first?.personHandle?.value
.
另请注意,您需要链接和导入Intents
框架。
更新
之前的答案只对了一半。有两种方法可以获取此信息,并且都应该实施。
当点击最近的项目(或选择联系人)并且您的应用程序已经在运行时,将调用上面的 continueUserActivity 变体。
但是,如果您的应用程序当前没有运行,那么它将被启动并且continueUserActivity
不会被调用。didFinishLaunchingWithOptions
相反,系统将使用 a调用您的 AppDelegate UIApplicationLaunchOptionsKey.userActivityDictionary
,它可以像这样使用:
if let activityOptions = launchOptions?[UIApplicationLaunchOptionsKey.userActivityDictionary] as? [String: AnyObject],
let activity = activityOptions["UIApplicationLaunchOptionsUserActivityKey"] as? NSUserActivity {
self.launchWithActivity(activity)
}
拥有NSUserActivity
实例后,行为与在continueUserActivity
再次更新
根据下面评论中的@vivek takrani,似乎continueUserActivity
可以随时调用,无论该应用程序之前是否打开。如果您打算支持它,我会在早期版本的 iOS 10 上对此进行测试,因为我认为在编写此答案时情况并非如此。