【问题标题】:CallKit find number used to start app from native phone appCallKit 查找用于从本机手机应用程序启动应用程序的号码
【发布时间】:2016-09-30 10:34:52
【问题描述】:

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

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

【问题讨论】:

  • 您可以在 Swift 4 Here 中获得解决方案。希望这对您有所帮助。

标签: ios callkit


【解决方案1】:

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

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

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

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

更新

之前的答案只对了一半。有两种方法可以获取这些信息,并且都应该实现。

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

但是,如果您的应用当前未运行,那么它将启动并且不会调用 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 中的行为相同

再次更新

根据下面 cmets 中的@vivek takrani,似乎可以随时调用continueUserActivity,无论该应用程序之前是否打开。如果您打算支持它,我会在早期版本的 iOS 10 上对此进行测试,因为我认为在编写此答案时情况并非如此。

【讨论】:

  • 谢谢,这正是我需要的!
  • @RasmusHöglund & Colin,当点击最近的列表时,我的应用程序没有启动并且最近没有显示通话选项。我不知道我错过了什么?
  • 它只为您的应用创建的条目打开(通过使用 callkit)。您有您的应用最近创建的条目吗?
  • @RJVKumar 另外,为了让您的应用程序显示在联系人列表和系统的其他部分中,您必须在您的 CXProviderConfiguration 上设置 supportedHandleTypes 以包含句柄类型您的应用支持。这将启用直接从联系人使用您的应用进行呼叫的选项。
  • 嘿,continueUserActivity 方法一直被调用,即使用户点击通话记录中的通话并且应用已关闭。
猜你喜欢
  • 2012-02-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 2011-04-06
  • 1970-01-01
  • 2013-03-10
  • 1970-01-01
相关资源
最近更新 更多