如何拦截从CallKit来电屏幕发送的“消息”?

时间:2016-09-23 20:55:56

标签: ios ios10 callkit

我正在使用iOS 10的CallKit接收来电。我的应用程序中的呼叫不是来自“电话号码”或“电子邮件地址”,而是来自我的协议中的内部标识符。因此,我使用CXHandleType CXHandleTypeGeneric(而非CXHandleTypePhoneNumberCXHandleTypeEmailAddress)报告来电,使用自定义字符串作为句柄的“值”。

当我报告来电并且电话未锁定时,用户会看到来电屏幕,其中包含“提醒我”,“消息”,“拒绝”和“接受”按钮。如果用户按下“消息”按钮,并选择以下菜单中的一个消息字符串,它会尝试通过消息应用程序将该字符串作为文本消息发送,目标是我用作“值”的自定义字符串“电话的句柄,好像是电话号码或电子邮件地址,即使它不是。这通常会导致邮件由于目标无效而无法发送,但是,根据字符串,它实际上可能会发送到用户不想发送到的有效目标;两种结果都很糟糕。

我正在寻找是否有办法让消息不通过消息应用程序发送(在我的情况下总是不正确),而是传递到我的应用程序,以便我可以将消息发送给调用者正确地通过我的内部协议。

更新: iOS 10.1中不再显示“提醒我”和“消息”按钮

2 个答案:

答案 0 :(得分:1)

iOS 10.1 Beta 1已将此行为更改为不再显示“提醒我”。或者'消息' CallKit VoIP应用程序的按钮,因此我建议您使用该Beta OS重新测试您的应用程序。

如果您希望来自应用的来电功能能够继续显示“消息”。按钮,但是为了您的应用程序接收消息请求而不是系统的本机消息应用程序,请{和{3}}与Apple一起请求此功能。

答案 1 :(得分:1)

如果在iOS 12中支持SiriKit,则出现“消息”按钮。 (将INSendMessageIntent添加到Intent的info.plist)

如何拦截:

  1. 运行意图扩展
  2. handler(for intent:)
  3. 交易