一种使最小化的应用程序在颤动中置于前台的方法

Maj*_* DH 10 mobile android ios flutter

我有一个包含 WebRTC 视频通话的 Flutter 应用程序。Flutter 有没有办法让应用程序在接到电话时显示自己或最大化自己?

Maj*_* DH 8

所以最后我能够解决它,通常有两种情况,如果应用程序在后台,如果它被终止。

IOS

当应用程序进入后台时,iOS 会在几秒钟后立即将其杀死,因此 Flutter 已断开连接,我们必须使用推送通知。

在 iOS 中,您只是无法将违反 Apple 政策的应用程序置于前台,并且没有公开的 api。 见这里

唯一的例外是电话,这就是我的情况。我不得不使用苹果 VoIP 通知,有两个单独的 flutter 包来处理 flutter_voip_push_notificationflutter_call_kit

安卓:

对于终止的应用程序,我必须分叉 fire_flutter 代码才能添加我的代码。 见这里 当与呼叫相关的通知到达时,它通过调用应用程序的相同启动意图来显示主要活动

如果应用程序在后台,flutter 将连接到信令服务,因此我不使用 FCM。我发送一个 FCM 消息来颤振接收呼叫。在颤振方面,我写了一个包,只是为了在从颤振调用时将应用程序带到前台,请在此处查看

这真的很简单。你从 dart 调用一个静态函数,它会被带到前台

关于实现的旁注:

  • 响应 voip 通知时,您应该在收到通知的那一刻显示 callkit, 请参见此处。无论出于何种原因(即使是异常情况,或停止调试器几秒钟)未能使用呼叫工具包 3 次,客户端设备上的 iOS 将开始忽略您的 voip 通知,这应该是非常即时的。Apple 支持在某处说(我不记得在哪里):如果您想从服务器获取一些数据,只需显示一个虚拟呼叫工具包,然后当响应到达时,您可以使用呼叫者信息更新它。当系统禁止应用程序接收 VoIP 通知时,我不得不在我的 iPhone 6 上恢复出厂设置以取消我的应用程序(如果你找到其他方法请分享!)如果你被禁止,你可以使用你的控制台Mac 以确保

  • 我无法将 firebase 用于 voip 通知,因为它需要客户端证书。我不得不使用相同的 WebRtc 信令 NodeJS 服务器

  • 在 iPhone 上接听会打开你的 Flutter 应用程序 所以你必须尽快处理电话 否则用户会看到你的主屏幕而不是来电者的声音

  • 小米之类的一些安卓厂商会阻止你的应用程序的服务将活动带到前台,所以你必须告诉用户:转到设置,启用一些设置,这因供应商而异

  • Android 10 (Q) 对从后台服务运行 Activity 也有一些限制。

  • 启动从后台的Android相同的启动意图将重新启动活动,而不是仅仅把它,我必须发挥与一点点launchModeAndroidManifest.xml,以使其正常工作