4

当“暂停”事件被捕获时,我的 PhoneGap 应用程序需要向服务器发出一个 websocket(以更新连接状态)消息。

安卓

对于 Android 设备,使用这段代码没有问题:

document.addEventListener("deviceready",function(){
    document.addEventListener("pause", function() {
        socket.emit('changeStatus', 'incative');
    });
    document.addEventListener("resume", function() {
        socket.emit('changeStatus', 'active');
    });
}, false);

IOS

在 iOs 中,这是一个不同的鱼锅。事实上,这里是关于“暂停”事件的官方 PhoneGap 文档:

iOS 怪癖

在暂停处理程序中,任何通过 Objective-C 的调用都将不起作用,任何交互式调用(如警报)也不起作用。这意味着您不能调用 console.log(及其变体),或任何来自插件或 PhoneGap API 的调用。这些只会在应用程序恢复时处理(在下一个运行循环中处理)。

当他们说“通过 Objective-C 的调用将不起作用”时,他们是在谈论使用网络访问吗?事实上,当我在 iOs 上测试我的应用程序时,当我恢复我的应用程序时,我会发送值为“inactive”的“changeStatus”消息。

这是我的第二个问题:在 phonegap iOs 应用程序中是否可以在捕获“暂停”事件后访问服务器?

谢谢你的帮助

4

1 回答 1

0

我认为这是不可能的,因为 iOS 上有几个安全问题。作为替代解决方案,您可以在套接字服务器端运行 echo 函数,它将以特定的时间间隔连续向该特定用户发出消息。如果用户响应该消息,您可以将该用户视为活动用户,否则将他视为非活动用户。

用户发送他的活动状态也不是一个好习惯。考虑如果用户失去连接会发生什么?你永远不会知道他是在活动还是在睡觉。因此最好在服务器端通过 ping 来检查它。

于 2013-11-08T16:52:07.710 回答