iphone锁屏之后会将应用的socket断开。当然这样的好处能够更好的省电。

所以当我们解锁之后要么重新登录游戏 要么做短线重连。有时候我们想要使应用在锁屏的状态下也能接收服务端的消息,那么我们可以直接调用as3的一个api

NativeApplication.nativeApplication.executeInBackground = true;

但是这种方式只能让app在锁屏状态下执行3分钟或者其他什么时间 亲测 iphone6 ios9 锁屏下3分多钟 socket照样断开。

好在iphone 允许音频不受此限制 当然还有其他方式 笔者 也是通过网上得知。

于是选择最简单的方式 采用播放无声音频来达到在锁屏状态下永久的socket链接

在xx-app.xml中的InfoAdditions标签里面 加上以下键值对


<key>UIBackgroundModes</key> 
 <array> 
 <string>audio</string> 
 </array> 


</pre>
private function onDeactivateHandler( e:Event ):void{

//监听到锁屏 便播放无声音频

}

NativeApplication.nativeApplication.addEventListener(Event.DEACTIVATE, onDeactivateHandler);

当然了 还得监听Event.ACTIVATE事件 即当解锁的时候 咱们得把音频给清除掉。这样就能实现锁屏状态下 也不会断开socket了

——————————————————分割线————————————————————–

遗憾的是 以上方法 在starling中有很大的问题 虽然同样能够达到预防socket 立马断开的问题,但是会出现游戏内表现异常 以至于难以恢复正常的问题

而目前 还未找到方案。(具体异常 是 图层混乱)

测试机型 iphone 5c

//starling中 目前的方案是在DEACTIVATE的时候 将Starling stop掉  ACTIVATE的时候恢复即可解决上诉的问题。不过此时可能会出现的问题就是游戏不同步的情况,所以解决同步就是关键了— 更新于2018/4/8

发表评论

电子邮件地址不会被公开。 必填项已用*标注