在应用程序生命周期的另一个时间请求远程通知授权?
Posted
技术标签:
【中文标题】在应用程序生命周期的另一个时间请求远程通知授权?【英文标题】:Asking for Remote Notifications Authorization at another time in app's life cycle? 【发布时间】:2017-09-26 13:18:43 【问题描述】:我遇到了一个奇怪的问题。当我使用以下代码在 didFinishLaunchingWithOptions 中请求远程通知授权时,我能够从我的服务器(Firebase 消息传递)获得推送远程通知,但是当我稍后尝试请求授权时 不在 didFinishLaunchingWithOptions 内 我无法收到任何通知。
我不想在发布时要求授权。例如,我想在用户登录后请求授权。
Apple 文档说:
在安排任何本地通知和 在注册 Apple 推送通知服务之前。 通常,您在配置您的启动时调用此方法 应用程序的通知支持。但是,您可以在其他时间调用它 在您的应用程序的生命周期中,前提是您在执行之前调用它 任何其他与通知相关的任务。
// For ios 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: _, _ in )
UIApplication.shared.registerForRemoteNotifications()
对这个问题有什么建议/解决方案吗?
应用信息: 部署目标:iOS 10.3 iOS 设备:装有 iOS 10 的 iPhone 6 / 装有 iOS 11 的 iPhone 7
【问题讨论】:
你叫它的另一点在哪里? 什么意思?! 您在哪里再次请求授权?也只是好奇为什么您需要在以后再次注册它?或者想稍后再注册 另外,也许试试看application(_:didFailToRegisterForRemoteNotificationsWithError:)
是否也能帮助你
@TPN1994 我从用户操作处理程序内部请求。我不再要求了!我只是不想在发布时要求授权。 didRegisterForRemoteNotificationsWithDeviceToken 调用成功
【参考方案1】:
所以我是这样解决的:
在我的didFinishLaunchingWithOptions
中,我像这样注册远程通知:
UNUserNotificationCenter.current().delegate = self
UIApplication.shared.registerForRemoteNotifications()
然后在以后,例如用户登录后,我通过调用下面的方法请求授权;
func reqeust()
// For iOS 10 display notification (sent via APNS)
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: _, _ in
)
【讨论】:
所以你实际上在registerForRemoteNotifications
之后调用了requestAuthorization
,尽管文档说了什么。你是这样拿到代币的吗?
我正在使用 Firebase 远程通知,所以即使用户没有请求授权,我还是得到了它。如果您不使用 Firebase,那么我认为一旦您请求授权,您就会得到它。以上是关于在应用程序生命周期的另一个时间请求远程通知授权?的主要内容,如果未能解决你的问题,请参考以下文章