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

时间:2016-09-30 10:34:52

标签: ios callkit

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

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

1 个答案:

答案 0 :(得分:8)

您希望在AppDelegate上实施application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool。对于此特定操作,userActivity将具有interaction属性,其intent属性是INStartAudioCallIntent的实例(如果您的应用视频播放,则为INStartVideoCallIntent )。

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

如果您的应用没有将任何联系人加载到系统中,则您的通话是一对一的(而不是群组),您只需要访问"拨打的号码",您和#39; ll可能会在intent.contacts?.first?.personHandle?.value找到你想要的东西。

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

<强>更新

之前的答案只有一半是正确的。有两种获取此信息的方法,两者都应该实现。

点击最近的项目(或选择了联系人),并且您的应用已在运行时,系统会调用上面的continueUserActivity变体。

但是,如果您的应用当前未运行,则会启动该应用,并且不会调用continueUserActivity。相反,系统会使用didFinishLaunchingWithOptions调用您的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上测试一下,因为我不相信这个答案是在写这个答案时的情况。