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

use*_*008 6 ios ios10 callkit

我正在使用iOS 10的CallKit接收来电.我的应用程序中的呼叫不是来自"电话号码"或"电子邮件地址",而是来自我的协议中的内部标识符.因此,我报来电与CXHandleTypeCXHandleTypeGeneric(而不是CXHandleTypePhoneNumberCXHandleTypeEmailAddress),使用自定义字符串作为手柄的"价值".

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

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


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

nat*_*why 5

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

如何拦截:

  1. 运行意图扩展
  2. 处理handler(for intent:)


Stu*_*t M 0

iOS 10.1 Beta 1 已更改此行为,不再显示 CallKit VoIP 应用程序的“提醒我”或“消息”按钮,因此我鼓励您使用该 Beta 操作系统重新测试您的应用程序。

如果您希望应用程序的来电能够继续显示“消息”按钮,但您的应用程序而不是系统的本机消息应用程序接收消息请求,请向 Apple提交错误以请求此功能。