Xamarin iOS App 在已最小化时无法执行代码
Posted
技术标签:
【中文标题】Xamarin iOS App 在已最小化时无法执行代码【英文标题】:Xamarin iOS App is not able to execute code when it is already minimized 【发布时间】:2020-07-05 22:25:02 【问题描述】:我有一个在 Xamarin.Forms 平台上开发的聊天应用程序,用户可以在其中互相聊天。我在共享项目中管理了 c# 代码和 UI。
长期以来,我一直在 ios 平台上遇到问题。当 iOS 应用程序在屏幕上运行时,具有前台模式,则应用程序可以成功接收另一个用户发送的消息。当应用程序在后台模式下运行并且有人发送消息时,我想通过使用本地通知来通知用户(无推送远程通知 - 因为我认为我的应用程序已经在最小化模式下运行,因此无需唤醒应用程序通过实现推送通知)。即使我已经成功实现了本地通知,但问题是,
当 iOS 应用程序进入后台模式时,主线程(任务)被暂停,所以当一些用户发送消息时应用程序无法执行代码(当应用程序被最小化时),因此它将无法显示本地通知。但是当应用程序回到前台时,线程/任务会恢复,然后即显示本地通知和消息。
我已经在 Info.plist 中的 Background Modes 下选择了“Background fetch”属性。我还在 FinishedLaunching 方法的行下方添加了
UIApplication.SharedApplication.SetMinimumBackgroundFetchInterval(UIApplication.BackgroundFetchIntervalMinimum);
我已经通过以下链接工作并实现了代码,但对我不起作用。
https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/ios-backgrounding-techniques/
https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/ios-backgrounding-techniques/ios-backgrounding-with-tasks#performing-tasks-during-didenterbackground
Xamarin forms background tasks run only when app is open on ios
https://arteksoftware.com/backgrounding-with-xamarin-forms/
When an iOS application goes to the background, are lengthy tasks paused?
How to perform a simple background task on Xamarin iOS
https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/ios-backgrounding-techniques/ios-backgrounding-with-tasks#creating-background-safe-tasks
https://docs.microsoft.com/en-us/xamarin/ios/app-fundamentals/backgrounding/
我认为我的问题与 iOS 后台处理有关,那么,有没有人知道如何在应用程序已经处于最小化模式时执行代码?
【问题讨论】:
【参考方案1】:一般来说,后台设置在 iOS 上受到非常限制。 如果您的应用属于某个类别(例如导航、音乐),您将获得扩展的后台功能,但我认为聊天应用不会。更具体地说,Background Fetch 并不真正适合您的问题。它会不定期地调用以获取要在您的应用程序中缓存的内容,以便更快地向您的用户显示内容。后台获取间隔可能从 15 分钟到几个小时不等(不确定后者)。
您需要的是remote notifications。
远程通知(也称为推送通知)可让您将少量数据推送到安装了您的应用的设备,即使您的应用未运行。
远程通知通过特权服务(Apple 推送通知服务 - APNs)传递到 Apple 设备,并及时(几秒钟而不是几分钟或几小时)传递。通常,您希望尽可能少地保留有效负载(例如,只需发送聊天 ID)并让应用程序在收到通知时获取其数据。
就聊天应用而言,只要用户向聊天发送消息,您的聊天服务器就会向 APN 发送远程通知。该应用程序将收到通知,获取其他数据,然后将通知显示给用户。如果点击通知,用户将被带到相应聊天的聊天窗口。
请注意您的app has to be registered with APNs,否则远程通知将不起作用。
【讨论】:
感谢您的回答。我的应用程序还具有音频-视频通话功能,因此我还想在应用程序最小化时在来电请求期间播放铃声。对于 info.plist 中的背景模式,我选择了“音频、Airplay 和画中画”、“IP 语音”和“后台获取”选项。那么在选择这些选项后,我的问题有什么解决方案吗?应用程序已经在后台运行,所以我想在应用程序在后台时执行代码并显示不需要推送的本地通知。对于 android 平台,它可以正常工作。以上是关于Xamarin iOS App 在已最小化时无法执行代码的主要内容,如果未能解决你的问题,请参考以下文章
Xamarin.Forms 无法更改本地设备上 Xamarin.iOS 中的应用程序图标
在Xamarin iOS的Visual Studio App Center中构建失败:只有在使用/ unsafe进行编译时才会出现不安全的代码
在xamarin上写好的android程序可以直接用在iOS上吗?