CallKit 查找用于从本机 phone 应用程序启动应用程序的号码
CallKit find number used to start app from native phone app
我已经在我们的应用程序中实现了 CallKit。我们的应用发出的呼叫显示在本机 phone 应用的最近通话列表中。
在最近列表中点击我们应用程序的条目时,我们的应用程序将启动。有没有办法找出启动我们的应用程序时使用的号码(/条目)? (openURL 或其他)
您需要在 AppDelegate 上实施 application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool
。对于此特定操作,userActivity
将有一个 interaction
属性,其中 intent
属性 是 INStartAudioCallIntent
(或 INStartVideoCallIntent
如果你的应用有视频)。
intent 对象上有一个 INPerson
联系人对象数组,可用于确定有关所拨内容的信息。
如果您的应用没有将任何联系人加载到系统中,您的通话是一对一的(而不是群组通话)并且您只想访问 "dialed number",您可能会发现intent.contacts?.first?.personHandle?.value
.
你想要什么
另请注意,您需要 link 并导入 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
中的行为相同
再次更新
Per @vivek takrani 在下面的评论中,似乎可以随时调用 continueUserActivity
,无论该应用程序之前是否打开过。如果您打算支持它,我会在 iOS 10 的早期版本上对此进行测试,因为我认为在撰写此答案时情况并非如此。
我已经在我们的应用程序中实现了 CallKit。我们的应用发出的呼叫显示在本机 phone 应用的最近通话列表中。
在最近列表中点击我们应用程序的条目时,我们的应用程序将启动。有没有办法找出启动我们的应用程序时使用的号码(/条目)? (openURL 或其他)
您需要在 AppDelegate 上实施 application(application: UIApplication, continueUserActivity userActivity: NSUserActivity, restorationHandler: ([AnyObject]?) -> Void) -> Bool
。对于此特定操作,userActivity
将有一个 interaction
属性,其中 intent
属性 是 INStartAudioCallIntent
(或 INStartVideoCallIntent
如果你的应用有视频)。
intent 对象上有一个 INPerson
联系人对象数组,可用于确定有关所拨内容的信息。
如果您的应用没有将任何联系人加载到系统中,您的通话是一对一的(而不是群组通话)并且您只想访问 "dialed number",您可能会发现intent.contacts?.first?.personHandle?.value
.
另请注意,您需要 link 并导入 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
再次更新
Per @vivek takrani 在下面的评论中,似乎可以随时调用 continueUserActivity
,无论该应用程序之前是否打开过。如果您打算支持它,我会在 iOS 10 的早期版本上对此进行测试,因为我认为在撰写此答案时情况并非如此。