3

我遇到了一个奇怪的问题。当我使用以下代码在 didFinishLaunchingWithOptions 中请求远程通知授权时,我能够从我的服务器(Firebase 消息传递)获得推送远程通知,但是当我稍后尝试在NOT INSIDE didFinishLaunchingWithOptions中请求授权时,我不是能够得到任何通知。

我不想在发布时要求授权。例如,我想在用户登录后请求授权。

苹果文档说:

在安排任何本地通知之前以及向 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

4

1 回答 1

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



        })

    }
于 2017-09-27T11:08:12.440 回答