文章

访问小组件中的位置信息

将位置信息加入你的小组件演示文稿中,使其具有更高的相关性和关联性。

概览

小组件可以借助用户的位置来显示相关和有用的信息。因为小组件的扩展不会持续运行,所以在其中使用定位服务需要完成一些额外步骤。

在小组件中启用定位服务

要在小组件中使用定位服务:

  • NSWidgetWantsLocation 键添加到小组件扩展的 Info.plist 文件中。

  • 将相关用途字符串添加到包含这个小组件的 App 的 Info.plist 文件中。

如“选择要请求的定位服务授权”中所述,尽量请求“使用时”(When In Use) 授权。

从小组件访问位置信息

当用户添加使用位置的小组件时,系统会询问他们是否想要将 App 的位置授权扩展到这个小组件。使用 authorizedForWidgetUpdates 来确定这个小组件是否符合接收位置更新的条件。用户可以随时在“设置”>“隐私”>“定位服务”中更改其批准选择。

用户批准小组件使用位置信息后,系统会在小组件显示后的短时间内将其视为“正在使用”。如果系统在此使用期间刷新该小组件的视图,则该小组件可以访问位置信息。例如,在用户将小组件添加到主屏幕并批准扩展 App 的位置授权后,小组件立即可以获得用户的位置。

当小组件在一段时间内不显示时,系统将不再将其视为正在使用,并停止提供位置更新。当 WidgetKit 重新加载小组件的视图时,如果 authorizedForWidgetUpdatestrue,但小组件未获得位置更新,这是指示用户的位置当前不可用的一个不错的做法。注意,这不同于 authorizedForWidgetUpdatesfalse 的情况,后者表示用户尚未批准小组件接收位置更新。

在真实情景中测试小组件

由于小组件基于时间线进行更新,以及小组件正在使用状态的变化,因此在真实情景中测试使用位置的小组件非常重要。例如,创建以下测试情景:

  • 添加小组件时扩展 App 的位置授权。

  • 添加小组件时不扩展 App 的位置授权。

  • 添加小组件后,在“设置”>“隐私”>“定位服务”中更改 App 的授权。

  • 添加小组件后,在“设置”>“隐私”>“定位服务”中更改对小组件位置授权的批准。

  • 将小组件添加到经常查看和不经常查看的主屏幕页面。

因为小组件每天接收的刷新次数有限,所以需要持续多日测试小组件。

使用多个小组件扩展来隔离定位服务的使用

如果你的 App 提供了多个小组件,并且只有部分小组件使用定位服务,请将小组件分成多个扩展。将 NSWidgetWantsLocation 添加到包含使用位置的小组件的扩展中。这样可让系统仅对使用位置信息的小组件提示用户,并使其与用户的情境更加相关。

有关更多信息,请参阅“创建小组件扩展”中的“在你的 App 扩展中声明多个小组件”部分。