40

我正在尝试将消息应用程序与 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但都没有工作。

4

2 回答 2

1

只需使用 UIActivityViewController。您可以使用文本或任何对象对其进行实例化。如果您想要的话,您还可以排除除消息之外的所有类型。

let objectsToShare = [textToShare, otherObject] as [Any]
let activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
        
//New Excluded Activities Code
activityVC.excludedActivityTypes = [UIActivityType.addToReadingList]
activityVC.popoverPresentationController?.sourceView = sender as? UIView
present(activityVC, animated: true, completion: nil)
于 2019-03-11T18:26:34.927 回答
1

我在 WWDC 2019 上询问了这个问题,并被告知这种大规模捐赠仅适用于 VOIP 应用程序,不适用于消息传递应用程序。这个问题中的代码在理论上适用于 VOIP——可能或可能不完全如所介绍的那样。我没有尝试过,因为我没有在正确的应用程序上工作。

于 2019-06-21T17:48:05.737 回答