CallKit查找用于从本机电话应用启动应用的号码

Ras*_*und 3 ios callkit

我在我们的应用程序中实现了CallKit.我们的应用程序制作调用显示在本机电话应用程序的最新列表中.

在最近列表中点击我们的应用程序条目时,我们的应用程序已启动.有没有办法找出用于启动我们的应用程序的数字(/条目)?(openURL或其他)

Col*_*n M 8

您将要application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool在AppDelegate 上实现.对于此特定操作,userActivity将具有interaction属性,其intent属性是INStartAudioCallIntent(或者INStartVideoCallIntent如果您的应用程序执行视频)的实例.

intent对象上有一个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)
}
Run Code Online (Sandbox Code Playgroud)

获得NSUserActivity实例后,行为与其相同continueUserActivity

再次更新

根据@vivek takrani在下面的评论中,似乎continueUserActivity可以随时调用,无论应用程序以前是否打开.如果你打算支持它,我会在iOS 10的早期版本上测试这个,因为我不相信这个答案写的时候就是这种情况.