我正在尝试使用与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
(使用activity
)并使用response
的nil值尝试了此操作,但都没有效果。
答案 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-可能与所示的完全不同。我没有尝试过,因为我没有使用正确的应用程序。