我正在尝试将消息应用程序与 iOS 联系人应用程序集成,以便用户可以直接从联系人通过应用程序发起消息。这在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)") } }
这类作品。该应用程序显示为联系人中一个收件人卡上的一个选项。在通讯录中点击它会启动我的应用程序,并带有NSUserActivity
. 这很好,但还不够。
WWDC 会议以 WhatsApp 为例。WhatsApp 显示为我所有联系人的选项,即使是没有 WhatsApp 帐户的联系人。我想也许 WhatsApp 已经为每个人创建并捐赠了交互。但是,如果我在 WhatsApp 未运行时创建了一个新联系人,它会立即成为该联系人的一个选项。我做了一些实验,将接收者参数设置为 nil 或空数组,但这没有任何效果。
那么我在这里错过了什么?我很接近,也许?但似乎捐赠互动可能不是我真正需要的。
更新,以回应@Mark:澄清了activity
. 我已经尝试过使用response
(which uses activity
) 并使用 nil 值response
但都没有工作。