Cordova/Phonegap 在传入 webrtc 电话时唤醒应用程序

Sir*_*jik 5 javascript java webrtc cordova phonegap

我写了一个用cordova/phonegap编写的音频/视频通话混合应用程序。我用了

1) 用于实际音频或视频流的 webrtc

2)服务器发送事件(SSE)来监听来电。https://apifriends.com/api-streaming/server-sent-events/

3) 简单对等https://github.com/feross/simple-peer

当应用程序打开时,一切顺利,我可以接收来电信号等并连接。问题是当应用程序关闭时。我无法打开应用程序或获得任何类型的通话状态指示。

我决定进行一些挖掘,很快发现这在 webview 中是不可能的。我尝试了一些像https://github.com/katzer/cordova-plugin-background-mode这样的插件,它们在一段时间内运行良好,但会很快耗尽电池电量,并且您的应用程序可能会在应用商店通知中被拒绝。

当我的应用程序打开时,来电将被正确捕获。我只需要打开应用程序。我阅读了有关后台推送消息(无声)的信息,但未能让这些消息打开应用程序。推送消息处理程序仅在应用程序处于前台时调用。

所以我终于爱上了这个文档,它是我最接近这个答案的。Phonegap/Cordova 应用程序中没有对后台服务的直接支持。

原因是您的混合应用程序是用 JS 编写的,而您的 JS 代码运行在具有 webview 的 Activity 中。一旦您退出您的应用程序,该应用程序就会被暂停。

如果你真的想在android中拥有后台服务,你可以用Java(原生)编写你的Android服务并从你的JS代码中调用你的服务。(本机用于您的应用程序的后台服务和 JS)

https://forum.ionicframework.com/t/how-to-run-cordova-plugin-in-android-background-service/6677/3

从上面,我认为我必须执行检测来自 java 服务的传入调用的实际逻辑,如果我检测到任何内容,我可以强制打开我的应用程序。以下是我打开应用程序后执行的简单逻辑。

if (documentLoaded && isLoggedIn)
{
//url returns json only if there is an incoming call otherwise empty

var source = new EventSource("https://www.url.com/api/sse/incomingcall.php?userid=" + userid, {
        withCredentials: true
    });
source.addEventListener("incomingcalls", function (event) {
    var callSession = JSON.parse(event.data);
    // HandleIncomingCall();
}, false);
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我不是 Java 编码员,以前也没有写过插件。我将如何创建一个 android 服务,它会定期侦听上面的 url,如果检测到任何 json 打开我的应用程序。