概览
小组件可以借助用户的位置来显示相关和有用的信息。因为小组件的扩展不会持续运行,所以在其中使用定位服务需要完成一些额外步骤。
在小组件中启用定位服务
要在小组件中使用定位服务:
-
将
NSWidget
键添加到小组件扩展的Wants Location Info
文件中。.plist -
将相关用途字符串添加到包含这个小组件的 App 的
Info
文件中。.plist
重要信息
你的 App 必须请求用户的授权,小组件才能接收位置信息。有关更多信息,请参阅“请求定位服务授权”。
如“选择要请求的定位服务授权”中所述,尽量请求“使用时”(When In Use) 授权。
从小组件访问位置信息
当用户添加使用位置的小组件时,系统会询问他们是否想要将 App 的位置授权扩展到这个小组件。使用 authorized
来确定这个小组件是否符合接收位置更新的条件。用户可以随时在“设置”>“隐私”>“定位服务”中更改其批准选择。
用户批准小组件使用位置信息后,系统会在小组件显示后的短时间内将其视为“正在使用”。如果系统在此使用期间刷新该小组件的视图,则该小组件可以访问位置信息。例如,在用户将小组件添加到主屏幕并批准扩展 App 的位置授权后,小组件立即可以获得用户的位置。
当小组件在一段时间内不显示时,系统将不再将其视为正在使用,并停止提供位置更新。当 WidgetKit 重新加载小组件的视图时,如果 authorized
为 true
,但小组件未获得位置更新,这是指示用户的位置当前不可用的一个不错的做法。注意,这不同于 authorized
为 false
的情况,后者表示用户尚未批准小组件接收位置更新。
在真实情景中测试小组件
由于小组件基于时间线进行更新,以及小组件正在使用状态的变化,因此在真实情景中测试使用位置的小组件非常重要。例如,创建以下测试情景:
-
添加小组件时扩展 App 的位置授权。
-
添加小组件时不扩展 App 的位置授权。
-
添加小组件后,在“设置”>“隐私”>“定位服务”中更改 App 的授权。
-
添加小组件后,在“设置”>“隐私”>“定位服务”中更改对小组件位置授权的批准。
-
将小组件添加到经常查看和不经常查看的主屏幕页面。
因为小组件每天接收的刷新次数有限,所以需要持续多日测试小组件。
使用多个小组件扩展来隔离定位服务的使用
如果你的 App 提供了多个小组件,并且只有部分小组件使用定位服务,请将小组件分成多个扩展。将 NSWidget
添加到包含使用位置的小组件的扩展中。这样可让系统仅对使用位置信息的小组件提示用户,并使其与用户的情境更加相关。
有关更多信息,请参阅“创建小组件扩展”中的“在你的 App 扩展中声明多个小组件”部分。