【问题标题】:React native Webview blocked after Screen Lock (IOS)屏幕锁定(IOS)后反应本机Webview被阻止
【发布时间】:2020-05-06 22:51:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 根据这个post你可以检测到iPhone的锁定或解锁状态。我认为你应该为这两种状态调用你的方法。

标签: ios react-native webview


【解决方案1】:

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

与名为 wake-lock 的主题密切相关 - 如文章中所述 - 有时会使用播放隐藏视频的方法来避免 CPU 休眠。

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

引用自github post的方法:

...这似乎对我有用:

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

  2. 在您希望后台计时器处于活动状态时播放静音。这可以是类似 react-native-sound 文件的东西,它正在重复播放

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

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

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

(*) 请注意,这需要使用 react-native-background-timerreact-native-sound 包。它的逻辑和上面wake-lock的文章很相似。此外,最好仔细考虑您所做的是否符合 IOS 政策。

【讨论】:

  • 我已经在后台播放视频了,这个问题仍然存在,我认为这个问题与 webview 中的 javascript 执行有关,当 safari 浏览器中的屏幕锁定时它会被阻塞跨度>
  • 我知道一个愚蠢的问题,但让我问一下,手机可以处于振动模式吗? (一旦我的音频在 iOS 中因为它而失败)
  • 你是在回调之后调用状态更改还是诸如此类?我在调用其他函数后使用 setState 时遇到了类似的问题,这有时会导致应用程序挂起,并且没有任何反馈,例如崩溃或其他什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-09-25
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 2022-01-01
相关资源
最近更新 更多