为了试用Firebase的推送通知,我下面举了这个例子:https://github.com/firebase/quickstart-ios/blob/dc2cd2db6e82e5c475fa3f0efe75df8b54f04544/messaging/MessagingExampleSwift/AppDelegate.swift#L40-L55
我可以把它发挥到一定程度。
这是我的相关代码:
......
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
......
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
application.registerForRemoteNotifications()
FirebaseApp.configure()
......
return true
}
......
func userNotificationCenter(_ center: UNUserNotificationCenter,
didReceive response: UNNotificationResponse,
withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// Print message ID.
print(#function)
if let messageID = userInfo[gcmMessageIDKey] {
print("Message ID: (messageID)")
}
// Print full message.
print(userInfo)
completionHandler()
}
......
当我尝试测试它时,函数userNotificationCenter:didReceive:withCompletionHandler((是唯一被调用的函数(在示例提供的函数列表中(。还应该注意的是,我可以在调试器控制台上看到这一点,而设备上什么都没有发生。我想这是应该的(所以一切都很好(,但我有一个问题要问任何能回答的人。
如何使用completionHandler((?我想,由于它是一个参数,我可以以一种相当自由的方式使用它,但当我在网上寻找示例代码时,我只能看到它在参数列表中声明或调用,就像我正在处理的示例中的情况一样,但我从未见过它被定义。
有什么我应该看看的,或者有一个如何利用它的具体例子吗?
有关信息,我使用的是Xcode版本10.1、iOS 12.1和Swift 4.2。
如Apple文档中所述,此方法中的completionHandler
为:
当您处理完用户的回答您必须在处理后的某个时间点执行此块用户的响应,让系统知道您已完成。这个块没有返回值或参数。
因此,您应该在处理完通知后调用完成处理程序。你不能以任何其他方式使用它。一旦你调用它,系统就会知道你已经完成了通知,并可以执行任何需要的过程,例如将通知放入用户的通知中心。