【问题标题】:How to receiving data when the iOS app is in background modeiOS应用程序处于后台模式时如何接收数据
【发布时间】:2020-07-08 00:45:15
【问题描述】:

我在 Xamarin.Forms 中有 iOS 应用程序开发人员。我想接收请求(来自服务器)并想在 iOS 应用程序中执行它,当它处于最小化/后台模式时。我已经玩过 Info.plist 中提供的背景模式选项,例如“音频、Airplay 和画中画”、“IP 语音”、“后台获取”、“后台处理”,但它对我不起作用。

如果有人对此有上述想法,请帮我解决。

提前致谢,

维韦克

【问题讨论】:

  • 为了让任何人能够帮助您,您需要提供更多信息,例如您想要实现什么?你需要给出确切的例子,并可能展示你到目前为止所做的尝试
  • 我的实际问题是,当应用程序处于后台时,iOS 应用程序无法运行代码,它进入暂停状态,当我将应用程序引导到前台时,它会恢复代码执行。所以我不想在应用程序处于最小化模式时中断我的传入请求(来自服务器)及其执行。

标签: ios iphone xamarin.forms xamarin.ios background-process


【解决方案1】:

看看Performing Tasks During DidEnterBackground

除了使长期运行的任务在后台安全之外,注册还可用于在将应用程序置于后台时启动任务。 iOS 在 AppDelegate 类中提供了一个名为DidEnterBackground 的事件方法,可用于在应用程序进入后台之前保存应用程序状态、保存用户数据以及对敏感内容进行加密。应用程序有大约五秒钟的时间从这个方法返回,否则它将被终止。因此,可以从DidEnterBackground 方法内部调用可能需要超过 5 秒才能完成的清理任务。这些任务必须在单独的线程上调用。

该过程几乎与注册一个长时间运行的任务的过程相同。以下代码 sn-p 说明了这一点:

public override void DidEnterBackground (UIApplication application) {
  nint taskID = UIApplication.SharedApplication.BeginBackgroundTask( () => {});
  new Task ( () => {
    DoWork();
    UIApplication.SharedApplication.EndBackgroundTask(taskID);
  }).Start();
}

你可以在DoWork 方法中做一些事情。顺便说一句,我认为苹果不建议将其作为服务接收数据。一般来说,这个后台任务是用来处理未完成传输数据的,比如下载或上传数据。

【讨论】:

  • Jiang:感谢您的意见,但我不想在应用程序最小化时处理任何数据。我的应用程序已经最小化,我想处理来自服务器的请求。例如,我的应用程序已经最小化,服务器正在向应用程序发送请求消息,我想接收并执行该请求。
  • @VivekPatel Okey ,我认为应用程序从安装到最小化,它应该至少首先调用DidEnterBackground
  • 我的应用具有消息和通话功能。当应用程序处于后台模式并且有人发送消息或进行呼叫时,我想将该消息/呼叫请求从我的云服务器发送到 iOS 应用程序,并希望通过本地通知通知用户。那么我该如何实现呢?你有什么想法吗?
  • @VivekPatel 这取决于消息服务器是否与移动应用程序保持连接。前提是你需要这样一个消息服务器来保持与移动应用程序的通信,这不仅仅是客户端自己做的。只是建议您可以先与消息服务器建立长时间连接。然后在后台不关闭连接。当消息到来时,应用程序将收到消息。从我的共享代码中,您可以在进入后台后保持连接处于活动状态。
猜你喜欢
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 2013-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-04
  • 1970-01-01
相关资源
最近更新 更多