屏幕锁定 (IOS) 后,React 本机 Webview 被阻止

kaw*_*man 5 webview ios react-native

我正在开发一个 ios react 本机应用程序,我使用 webview 定期获取数据,并在我的应用程序中使用它,但是当我锁定我的 iphone 设备时,webview 停止发送数据以响应本机。

onWebViewLoad() {
   setInterval(function(){
      this.refs.webview.injectJavaScript('window.ReactNativeWebView.postMessage(window.getData());');
   }, 10000);
}

handleMessage(event) {
   // receive data
   //doSomething(event.nativeEvent.data)
}
Run Code Online (Sandbox Code Playgroud)
<WebView
  source={{ uri: this.state.myPage }}
  javaScriptEnabled={true}
  startInLoadingState={true}
  onLoad={this.onWebViewLoad}
  ref="webview"
  onMessage={this.handleMessage}
  />
Run Code Online (Sandbox Code Playgroud)

注意:当应用程序在前台或后台时代码工作正常,但是当我打开应用程序并锁定屏幕时,webview 停止发送数据。

有没有办法让 webview 在屏幕锁定后发送数据。

Meh*_*lan 0

不应该只有 WebView 被阻止。我认为当屏幕锁定时计时器也会被阻止。

与称为唤醒锁定的主题密切相关,正如文章中提到的,有时使用播放隐藏视频的方法来避免 CPU 睡眠。

使用类似的解决方法,您可以尝试此github 帖子中的方法,以在屏幕锁定时使用计时器。(*)

该方法引用自github帖子:

...这似乎对我有用:

  1. 在 componentWillMount() 中启动后台计时器

  2. 当您希望后台计时器处于活动状态时,播放无声声音。这可能类似于重复播放的react-native-sound 文件

  3. 将以下内容添加到您的info.plist文件中:

<key>UIBackgroundModes</key>
<array>
 <string>audio</string>
</array>
Run Code Online (Sandbox Code Playgroud)

请注意,您仍然应该遵守苹果的服务条款,并且仅当您处于其接受的后台播放用例之一时才执行上述操作。

(*) 请注意,这需要使用react-native-background-timerreact-native-sound包。它的逻辑与上面的唤醒锁文章非常相似。另外,最好仔细考虑一下您所做的事情是否符合 IOS 政策。