我在我们的应用程序中实现了CallKit。我们的应用程序制作调用显示在本机手机应用程序的最新列表中。
在最近列表中点击我们应用的条目时,我们的应用就会启动。有没有办法找出用于启动我们的应用程序的数字(/条目)? (openURL或其他)
答案 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上测试一下,因为我不相信这个答案是在写这个答案时的情况。