我正在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的值为零,但都不起作用.

推荐答案

我在2019年WWDC上问过这件事,他们告诉我,这种大规模捐赠只适用于VOIP应用,不适用于短信apply.这个问题中的代码在理论上适用于VOIP——可能或可能不完全如本文所述.我没有try ,因为我没有开发正确的应用程序.

Swift相关问答推荐

解析SON数据的API调用有什么问题?

如何将泛型函数存储到变量中?

SwiftUI map 旋转

我可以为UIMenu设定一个固定的订单吗?

如何使泡泡上的箭头直达封闭矩形

如何使用AsyncTimerSequence获取初始时钟,然后在指定的时间间隔内开始迭代?

在SwiftUI中,我如何确保带有符号的单词不会被拆分为两行?

类型擦除`AsyncMapSequence, Element>`

防止带有背景的文本扩展到 maxWidth

Swift 包管理器 Package.resolved 文件末尾的版本是什么意思?

在 struct 中的序列和非序列泛型函数之间进行 Select

为 SwiftUI 中的属性提供默认值

展开 List 中的 HStack 以端到端但不是从上到下,因此看起来项目之间有更宽的空间

如何仅将 SwiftUI 不透明度应用于父视图?

无法从自定义动态框架(Swift)访问类

Swift 中 NSFetchRequest 的多个 NSPredicates?

如何在 Swift 中遍历 struct 属性?

Swift中字节数组的NSData

Swift 2.0 最低系统版本要求(部署目标)

通过单击表格视图中的单元格打开新的视图控制器 - Swift iOS