首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >创建iOS服务以保持在后台工作

创建iOS服务以保持在后台工作
EN

Stack Overflow用户
提问于 2020-09-09 17:25:02
回答 1查看 632关注 0票数 0

我正在开发一个GPS车辆地理定位应用程序..如果用户在应用程序设置中激活通知,则必须每X分钟开始检查服务器,以验证是否有新的车辆警报。为此,我需要一个服务,当应用程序在前台工作,并继续工作,即使用户把应用程序在后台继续搜索通知。

所以我试着这样做(AppDelegate):

代码语言:javascript
复制
public override void DidEnterBackground(UIApplication application)
    {
        if (Preferences.Get(nameof(App.IsNotificationsServiceRunning), false))
        {
            nint taskID = UIApplication.SharedApplication.BeginBackgroundTask(() => { });
            new Task(() => {
                DoWork();
                UIApplication.SharedApplication.EndBackgroundTask(taskID);
            }).Start();
        }
        else
        {
            return;
        }
    }

//TIMER
public void DoWork()
    {

        var minutes = TimeSpan.FromMinutes(2);

        Device.StartTimer(minutes, () => {

            //check for notifications
            checkNotificationsFromServer();

            // Returning true means repeat this timer
            return true;
        });
    }

public void checkNotificationsFromServer(){
   //Some code here...
}

这段代码的问题是..首先,应用程序永远不会检查通知,直到它被放在后台!第二(有点奇怪),但是这个解决方案在iOS模拟器上有效,但在物理设备(IPhone11)上不起作用!这意味着当应用程序在后台时,永远不会调用checkNotificationsFromServer()!

有什么建议吗?

EN

回答 1

Stack Overflow用户

发布于 2020-09-09 21:00:39

有几种方法可以实现你想要的。

这里有Background Modes (deprecated in iOS 13.0)

这里有Background Tasks (iOS 13.0+)

  1. 您可以将工作委托给您的后端,并利用传统的远程通知(或静默通知)

  1. 您可以人为地强制系统保持应用程序运行。既然你正在开发一个GPS应用程序,那么保持读取用户的位置是完全合理的。它应该在后台延长应用程序的生命周期。但请注意,如果你过度使用这一功能,苹果将拒绝该应用程序。但如果您使用的是用户定位功能,它应该会让您的应用程序保持运行。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63808669

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档