我的问题是,我在安装应用程序时有2个用户权限请求。
第一:位置许可
第二:推送通知
问题:当用户安装应用程序时,它将首先显示位置通知,然后在小数字后,它将显示推送通知预设。在我们从推送通知中选择选项后,它将显示位置通知。
如何延迟显示推送通知权限,以便用户可以先选择位置权限请求?
示例伪代码
- >正常位置请求[CLLocationManager]没有if / else
- >正常推送通知请求
我希望它像
if (**user selects option in location request**) //either allow or not
show push notification request
答案 0 :(得分:0)
"等待"对于用户响应位置权限请求是非常棘手的,因为API结构非常糟糕。而不是这种事(伪代码):
requestAuthorization { status in
if status == .authorized
...你被迫只是在没有任何结果或完成处理程序的情况下调用requestAuthorization
。
摆脱困境的方法是实现委托方法locationManager(_:didChangeAuthorization:)
。这是您了解自己已获得授权的地方(如果您还没有获得授权)。因此,在您实施该方法时,您可以在此处请求推送通知授权(在适当的情况下)。
除此之外,我建议您重新考虑您的体系结构,以便在应用程序的生命周期中完全不同的位置请求位置授权和推送授权,以便它们不会以这种不确定的方式重叠。
答案 1 :(得分:0)
您必须在plist文件中添加一个键才能访问位置服务 image
答案 2 :(得分:0)
如果您的应用程序使用推送通知,则首先会提示用户。您可以随时等待获得用户按位访问权限。当您需要获得用户的许可时,您可以使用此 - [locationManager requestWhenInUseAuthorization]; [locationManager requestAlwaysAuthorization];