CallKit查找号码用于从本地手机应用程序启动应用程序

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

当我们的应用程序在最近列表中点击一个条目,我们的应用程序启动。 有没有办法找出使用哪个号码(/入口)来启动我们的应用程序? (openURL或其他)

你会想实现application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool的AppDelegate。 对于此特定操作, userActivity将具有interaction属性, intent属性是INStartAudioCallIntent的实例(如果应用程序执行video, INStartAudioCallIntent INStartVideoCallIntent )。

intent对象上有一个INPerson联系对象的数组,可用于确定有关所拨INPerson信息。

如果您的应用程序没有将任何联系人加载到系统中,您的呼叫是一对一(而不是组),您只需要访问“拨打的号码”,您可能会发现你想要的intent.contacts?.first?.personHandle?.value

另外请注意,您需要链接并导入Intents框架。

更新

以前的答案只是一半的权利。 获取这些信息有两种方法,两者都应该被执行。

上面的continueUserActivity变体将在轻按最后一个项目(或select联系人)时被调用,并且您的应用程序已经在运行

但是,如果您的应用程序当前不在运行,则会启动,并且不会调用continueUserActivity 。 相反,系统会用UIApplicationLaunchOptionsKey.userActivityDictionary调用你的AppDelegate的didFinishLaunchingWithOptions ,可以这样使用:

 if let activityOptions = launchOptions?[UIApplicationLaunchOptionsKey.userActivityDictionary] as? [String: AnyObject], let activity = activityOptions["UIApplicationLaunchOptionsUserActivityKey"] as? NSUserActivity { self.launchWithActivity(activity) } 

一旦你有NSUserActivity实例,行为就像在continueUserActivity