iOS 13后台位置更新权限说明

时间:2019-11-15 10:04:16

标签: c# ios xamarin ios13

我正在努力让我的应用通过iOS 13上的“使用时”权限设置来获取后台位置更新。使用Always权限可以很好地工作,但是我想要“使用时”。

有人告诉我,我所需要的只是在info plist中启用的后台模式。我启用了这些功能,下面是我的信息列表中的代码段。

<key>NSLocationAlwaysUsageDescription</key>
<string>Used for location services</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>Need Permission</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Need Permission</string>

<key>UIBackgroundModes</key>
<array>
    <string>location</string>
    <string>remote-notification</string>
</array>

因此,简而言之,在iOS 13中,是否可以使用临时的Always许可或使用中的许可来获取后台位置更新?

编辑:

以下是开始跟踪用户位置的功能:

 public static async Task StartJourneyTracking()
    {
        try
        {
            InitialiseJourney();
            if (Geolocator.IsListening) return;
            CLLocationManager manager = new CLLocationManager();
            manager.ShowsBackgroundLocationIndicator = true;
            Geolocator.DesiredAccuracy =                   
                  TrackingConstants.GeoLocatorDesiredAccuracy;
            await Geolocator.StartListeningAsync(TimeSpan.FromSeconds(
                TrackingConstants.GeoLocatorMinimumTime),
                TrackingConstants.GeoLocatorMinimumDistance, false, new 
                ListenerSettings()
                {
                    ActivityType = ActivityType.AutomotiveNavigation,
                    AllowBackgroundUpdates = true,
                    DeferLocationUpdates = false,
                    PauseLocationUpdatesAutomatically = false
                });
            IsLocationServiceRunning = true;

            Geolocator.PositionChanged += PositionChanged;
            Geolocator.PositionError += PositionError;
            ShowNotification();
        }
        catch (Exception e)
        {
            InstanceManager.LoggingHelper().TrackError(e);
        }
    }

更新18/11/2019

根据评论中的建议,我发现行为有所变化。

使用临时始终权限,当在后台最小化该应用程序时,旅程记录不会获得位置更新。如果我让旅程记录在后台运行(不获取位置更新),并等待第二个提示出现,请保持使用状态或更改为始终。选择使用时间将使背景位置指示条立即显示,并且旅途记录似乎能够在后台获取位置更新。

但是,如果我现在点击背景指示器栏,将应用程序带到前台并结束旅程记录(停止位置更新),然后在不更改权限的情况下重新启动(开始位置更新),则我将不再看到蓝色背景指示器酒吧和旅程记录将在后台停止接收位置更新。

有什么想法吗?

再次感谢

1 个答案:

答案 0 :(得分:0)

因此,事实证明,使用iOS 13权限似乎无法正确配置geolocator插件。我关闭了适用于iOS的CLLocationManager的geolocator,它第一次起作用。