我正在try 将一个消息应用程序与iOS Contacts应用程序集成,这样用户就可以通过该应用程序直接从Contacts发送消息.这在WWDC 2016 session 240篇文章中有所涉及,但显然有些细节被省略了.
以WWDC为例,我有:
-
将活动类型添加到应用程序的
Info.plist
:<key>NSUserActivityTypes</key> <array> <string>INSendMessageIntent</string> </array>
在我的应用程序代理中实现了
application(_:continue:restorationHandler:)
.-
创建并捐赠了一次互动
let activity = NSUserActivity(activityType: "com.example.message") activity.title = "Send CB Test Message" activity.expirationDate = Date.distantFuture let recipient = INPerson( /* recipient with an email address in my Contacts database */ ) let sender = INPerson( /* me */ ) let intent = INSendMessageIntent(recipients: [recipient], content: nil, groupName: nil, serviceName: "CB Test Chat", sender: sender) let response = INSendMessageIntentResponse(code: .success, userActivity: activity) let interaction = INInteraction(intent: intent, response: response) interaction.direction = .outgoing interaction.donate { (error) in print("Donated") if let error = error { print("Donate error: \(error)") } }
这很管用.该应用在Contacts中显示为选项on the one recipient's card.在Contacts中点击它会启动我的应用程序,显示NSUserActivity
.这很好,但还不够.
WWDC会议以WhatsApp为例.WhatsApp在我的all个联系人中显示为一个选项,即使是那些没有WhatsApp帐户的联系人.我想也许WhatsApp for each 人创造并捐赠了互动.但是,如果我在WhatsApp不运行时创建了一个新联系人,它将立即成为该联系人的一个选项.我做了一些实验,将recipient参数设置为nil或空数组,但没有效果.
那我还缺什么?我很接近,也许?但似乎捐赠互动可能不是我真正需要的.
更新,回应@Mark:澄清了activity
的用法.我用response
(它用activity
)试过,response
的值为零,但都不起作用.