如何拦截CallKit来电界面发送的“消息”?

7
我正在使用iOS 10的CallKit来接收来电。 我的应用程序中的通话不是来自“电话号码”或“电子邮件地址”,而是来自于我协议中的内部标识符。 因此,我使用CXHandleTypeGenericCXHandleType(而不是CXHandleTypePhoneNumberCXHandleTypeEmailAddress),并使用自定义字符串作为句柄的“值”来报告传入的呼叫。
当我报告传入的呼叫时,如果手机没有锁定,用户会看到一个来电屏幕,上面有“提醒我”,“信息”,“拒绝”和“接受”按钮。 如果用户按下“信息”按钮,并在以下菜单中选择其中一条消息字符串,则尝试通过Messages应用程序将该字符串发送为短信消息,并将目的地设置为我用作呼叫句柄“值”的自定义字符串,就像它是电话号码或电子邮件地址一样,即使它不是。 这通常会导致消息发送失败,因为目的地无效,但是,根据字符串,它可能实际上发送到用户不想发送到的有效目的地;两种结果都不好。
我正在寻找一种方法,以便消息不会通过Messages应用程序发送(在我的情况下始终不正确),而是被传递到我的应用程序中,以便我可以通过我的内部协议正确地将消息发送给呼叫者。
更新:IOS 10.1上不再出现“提醒我”和“信息”按钮。

你解决了这个问题吗?否则我们该如何隐藏消息/提醒按钮。 - Madhu
我能在接听电话时打开我的自定义应用程序吗?请注意,我没有iOS开发经验。但是很想知道这个。 - Choxx
如果支持SiriKit,则会出现“消息”按钮。(在扩展中的info.plist中添加INSendMessageIntent) - nathanwhy
2个回答

5
如果在iOS 12中支持SiriKit,会出现“消息”按钮。(将INSendMessageIntent添加到意图的info.plist)
拦截方法如下:
  1. 运行Intent Extension
  2. 处理handler(for intent:)

0

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

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


我能否在原生屏幕接听电话时打开我的自定义应用程序?请知道,我没有iOS开发经验。但是很想了解这个。 - Choxx
如果设备在 CallKit 应用程序通过来电到达时被锁定并且用户接听了电话,则由于设备仍处于锁定状态,iOS 无法在前台启动应用程序,因此设备将保留本机来电 UI。但是,如果设备在来电到达时已经解锁,则用户在接听电话后将直接进入应用程序。 - Stuart M
用户一旦接听电话,将直接进入应用程序。你是指我的VoIP应用程序正在调用呼叫屏幕吗?我已经检查了Facebook Messenger。当点击视频按钮时,呼叫屏幕出现,用户会被带到Facebook Messenger视频通话屏幕。这意味着我们可以覆盖呼叫屏幕上的按钮吗?我不是iOS背景,所以请告诉我这些问题的答案。 - Choxx
你能回答我在这个问题上的疑问吗?http://stackoverflow.com/q/41740139/4512651 - Choxx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接