3

我已经在我们的应用程序中实现了 CallKit。我们的应用程序拨打的电话显示在本机电话应用程序的最近列表中。

当在最近列表中点击我们的应用程序的条目时,我们的应用程序就会启动。有没有办法找出启动我们的应用程序使用的数字(/条目)?(openURL 什么的)

4

1 回答 1

10

您需要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 上对此进行测试,因为我认为在编写此答案时情况并非如此。

于 2016-09-30T12:28:20.710 回答