当前位置: 首页 > 知识库问答 >
问题:

当收到来自websocket的来电时,如何处理Voip Push?

诸修伟
2023-03-14

问题从这里开始,似乎还没有人给出正确的答案。

==================================

嗨,德夫斯,

我正在开发一个社交网络应用程序,其中包括音频通话功能。我与插座IO网络对话器集成了这个音频呼叫。我通过两种方式接收音频呼叫。连接套接字时的套接字呼叫

仅供参考,为什么我有两种接听电话的方式,如上所述,

    < li >默认情况下启用VoIP,因为有时套接字调用没有响应,并且在那时从不显示调用。 < li >当应用程序在前台时启用套接字,以确保在VoIP推送出现MissingDeviceToken/BadDeviceToken错误时收到呼叫。

考虑到iOS 13对VoIP使用的指导,我遵循了以下集成步骤。

> < li>

当应用程序被终止或套接字未连接时,将获取VoIP呼叫并使用provider.reportNewIncomingCall()进行响应。所以这里没有VoIP使用的问题。

当套接字连接时,将得到两个套接字呼叫

  1. 使用provider.reportNewIncomingCall()响应套接字调用。
  2. 稍有延迟后,将收到已由套接字调用的同一呼叫的VoIP推送。在这里,我应该使用CallKit响应此VoIP推送。但我已经调用了呼叫。所以,我使用以下代码来处理。

<code>提供程序。reportCall(with:call.uuid,updated:updated)使用相同的uuid

问题1:这是处理上述问题的正确方式吗?

===========================================================================================================

根据我的应用程序要求,我的应用程序应该一次有一个活动呼叫。

考虑一下,我正在进行通话,通过VoIP又接收了一个进线量。所以在这里,我不想显示额外的通话。所以我忽略了额外通话的VoIP推送。但是它会导致崩溃“杀死应用程序,因为它在收到PushKit VoIP推送回调后从未向系统发布进线量。”

问题2:如何处理上述场景?

===========================================================================================================

对于问题2,我试着从这个问题中回答。

尽管它在某些情况下不起作用,例如当用户恰好足够快地接听一个电话时,第二个来自推送的来电将导致“呼叫堆叠”屏幕。

这种方法还在最近的呼叫列表中创建附加呼叫条和进线量,用于表示呼叫在第一次进入屏幕期间结束,这是糟糕的用户体验事件。

我也发现这个看起来很有希望,但很早就知道这会很好。

有人对此有什么解决办法吗?谢谢。

共有1个答案

柳镜
2023-03-14

正如一位苹果工程师在技术支持请求中确认我的那样,我的答案在理论上是正确的。但是,在实践中,由于PushKit和CallKit的异步性质,如果不不必要地报告呼叫或因未能报告呼叫而崩溃,基本上不可能做到这一点。因此,这是非常令人沮丧的。

因此,对于问题2,如果对你来说这个答案是不可接受的,我能看到的唯一解决方案是让服务器为你处理它。因此,服务器应该有一个正在进行的呼叫列表,并避免向已经参与呼叫的用户发送VoIP推送。

对于问题1,您实现的解决方案并不真正可靠:您不能对异步环境中的事件顺序做任何假设。有可能在socket呼叫之前收到VoIP推送,在这种情况下,您无法报告新的来电,因为您只是报告了呼叫更新。或者,另一个更微妙的例子:您大致同时接收到push和socket调用,作为socket调用的结果,您报告新的传入调用,但是(记住CallKit是异步的)当系统正在处理新的调用请求时,您处理您的VoIP push,而不报告新的传入调用。

我认为处理这种情况的更简单的方法是只有一种方法来处理新来电,那就是通过VoIP推送。这样,您的应用程序应该在任何情况下都能工作,并且您不必在应用程序终止或已经运行时为收到的呼叫实现两个不同的代码路径。

 类似资料:
  • 有点棘手的问题。我正在与一个应用程序,通过它,用户可以设置来电,自定义铃声和不同的振动水平不同的联系人。 我一直坚持振动水平设置。我们可以使用, 我希望有人能在这个问题上提供一些意见。欢迎提出建议。

  • 问题内容: 我正在尝试使用正则表达式搜索网页,但出现以下错误: TypeError:无法在类似字节的对象上使用字符串模式 我知道为什么urllib.request.urlopen()返回一个字节流,因此,至少在我看来,re不知道要使用的编码。在这种情况下我该怎么办?有没有办法在urlrequest中指定编码方法,或者我需要自己重新编码字符串?如果是这样,我想做什么,我假设我应该从标题信息中读取编码

  • 这是凯文帮助后的代码。

  • 问题内容: 我的网络服务返回一个JSON对象,如下所示 即,当我将此地址放入chrome浏览器中时,我可以到达上面。 我正在尝试在浏览器中阅读此内容,以便可以创建一个下拉选项…但是从以下代码开始我一无所获: 我总是在警报框中。我用fiddler2再次检查了Web服务请求/响应是否正常,我什至可以拦截Web服务和浏览器之间的json对象。 我也试过 我又得到了空。 我已经看过Ajax要求的json响

  • 我一直在研究Spring集成文件支持,在这里我需要将文件从输入目录移动到输出目录。成功地将其移动到输出目录后,应该将其归档,然后从输入目录中删除。我正在使用下面的配置来实现这一点。 请纠正我,如果我的配置可以更好的方式。 Spring集成配置: 我在服务激活器中有代码,如果归档目录不可用,它应该终止应用程序。因此,在运行应用程序时,在第一次移动文件后,我已经删除了归档目录。然后,我将新文件放置在i

  • 我有一个OpenVBX/Twilio设置,在那里我使用它的拨号小程序给我公司的特定人员打电话。然而,当我在电话上查看来电时,我无法知道主叫者是否通过OpenVBX进行呼叫。 有没有一种方法可以定制OpenVBX/Twilio,以便在我的手机上查看主叫用户的来电显示时,我可以看到主叫用户的来电显示信息和一些通过Twilio进行呼叫的指示器?