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

时间:2017-08-02 21:06:19

标签: ios swift sirikit ios-contacts

我正在尝试使用与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显示为所有我的联系人的选项,即使是没有Wha​​tsApp帐户的人。我想也许WhatsApp已经为每个人创建并捐赠了互动。但是如果我在WhatsApp没有运行的情况下创建一个新的联系人,它立即成为该联系人的一个选项。我试验了一下,将接收者参数设置为nil或空数组,但这没有效果。

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

更新,以回应@Mark:澄清了activity的使用。我使用response(使用activity)并使用response的nil值尝试了此操作,但都没有效果。

2 个答案:

答案 0 :(得分:1)

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

int main()
{
    int x=4,y=0;
    while(x>=0)
    {
        if(x==y)
            break;
        else
            printf("x is: %d\n", x);
            printf("y is: %d\n", y);
        x--;
        y++;
    }
}

答案 1 :(得分:0)

我在WWDC 2019上问了这个问题,并被告知这种大规模捐赠仅适用于VOIP应用程序,不适用于消息传递应用程序。从理论上讲,该问题中的代码将适用于VOIP-可能与所示的完全不同。我没有尝试过,因为我没有使用正确的应用程序。