我有一个包含WebRTC视频通话的Flutter应用程序。 Flutter中是否有一种方法可以让应用程序在收到呼叫时展示自己或最大化自身?
答案 0 :(得分:8)
所以最终我能够解决它,通常有两种情况,即后台应用程序和终止应用程序。
当应用程序进入后台运行时,iOS会在几秒钟后立即将其杀死,因此颤振已断开,我们必须使用推送通知。
在iOS中,您只是无法将违反Apple规定的应用程序置于前台,因此没有公共api。 See here。
唯一的例外是通话,这就是我的情况。我不得不使用苹果VoIP通知,有两个单独的flutter软件包来处理 flutter_voip_push_notification和flutter_call_kit
对于终止的应用程序,我必须派生fire_flutter代码以添加我的代码。 see here 通过与来电相关的通知到达时,通过调用应用程序的相同启动意图来显示主要活动
如果应用程序在后台运行,则将被连接到信令服务,因此我不使用FCM。我发送FCM消息以振铃以接听电话。在flutter方面,我编写了一个packge,目的是将应用从fl see it here
这很简单。您从dart调用了一个静态函数,它将被带到前台
在响应voip通知时,应在收到通知see here的那一刻显示呼叫包。 无论出于何种原因(即使是例外情况,也可能是停止调试器几秒钟)都无法使用呼叫工具包3次,并且客户端设备上的iOS会开始忽略您的voip通知,这应该是非常即时的。 Apple支持人员在某处(我不记得在哪里)说:如果要从服务器中获取一些数据,只需显示一个虚拟呼叫工具,然后在响应到达时就可以使用呼叫者信息对其进行更新 。当系统禁止应用程序来回接收Voip通知时,我不得不在iPhone 6上进行出厂重置以取消我的应用程序的权限(如果您找到其他方式,请共享!) 如果被禁止,则可以使用Mac上的控制台来确保
我无法将firebase用于voip通知,因为它需要客户端证书。我不得不使用相同的WebRtc信令NodeJS服务器
在iPhone上应答将打开您的Flutter应用,因此您必须尽快处理呼叫,否则用户将看到主屏幕而不是呼叫者的声音
某些Xiaomi等Android供应商会阻止您的应用服务将活动置于前台,因此您必须告诉用户:转到设置,启用某些设置,这因供应商而异
Android 10(Q)在通过后台服务运行活动方面也有一些限制。
从后台在android中启动相同的启动意图将重新启动活动,而不仅仅是带来活动,我必须在launchMode
中使用AndroidManifest.xml
进行一些操作才能使其工作