如何将应用程序与iOS Contacts应用程序集成?

Tom*_*ton 40 ios swift sirikit ios-contacts

我正在尝试使用与iOS Contacts应用程序集成的消息传递应用程序,以便用户可以直接从"联系人"通过应用程序发起消息.这在WWDC 2016会议240中有所涉及,但显然省略了一些细节.

在WWDC示例之后,我有:

  • 将活动类型添加到应用程序Info.plist:

    <key>NSUserActivityTypes</key>
    <array>
            <string>INSendMessageIntent</string>
    </array>
    
    Run Code Online (Sandbox Code Playgroud)
  • 实现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)")  
        }  
    }  
    
    Run Code Online (Sandbox Code Playgroud)

这个排序的作品.该应用程序在"联系人"中的一个收件人卡上显示为一个选项.在联系人中点击它会启动我的应用程序NSUserActivity.这很好,但还不够.

WWDC会议以WhatsApp为例.WhatsApp显示为我所有联系人的选项,即使是那些没有Wha​​tsApp帐户的联系人.我想也许WhatsApp已经为每个人创建并捐赠了互动.但是,如果我在WhatsApp未运行时创建新联系人,则会立即选择该联系人.我试验了一下,将接收者参数设置为nil或空数组,但这没有任何效果.

那我在这里错过了什么?我很亲密,也许吧?但似乎捐赠互动可能不是我真正需要的.

更新,回应@Mark:澄清了使用activity.我已尝试使用response(使用activity)和使用零值,response但都没有工作.

Tom*_*ton 1

我在 WWDC 2019 上询问过这个问题,并被告知这种大规模捐赠仅适用于 VOIP 应用程序,不适用于消息应用程序。这个问题中的代码理论上适用于 VOIP——可能也可能不完全如所呈现的那样。我没有尝试过,因为我没有开发合适的应用程序。