Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // AppDelegate.swift
- //
- import UIKit
- import UserNotifications
- import Firebase
- import FirebaseInstanceID
- import FirebaseMessaging
- @UIApplicationMain
- class AppDelegate: UIResponder, UIApplicationDelegate {
- var window: UIWindow?
- let gcmMessageIDKey = "gcm.message_id"
- func application(_ application: UIApplication,
- didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
- if UserDefaults.standard.bool(forKey: "launched_before") == false {
- self.window = UIWindow(frame: UIScreen.main.bounds)
- let storyboard = UIStoryboard(name: "Settings", bundle: nil)
- let initialViewController = storyboard.instantiateViewController(withIdentifier: "welcomeViewController") as! WelcomeViewController
- self.window?.rootViewController = initialViewController
- self.window?.makeKeyAndVisible()
- } else {
- // Register for remote notifications. This shows a permission dialog on first run, to
- // show the dialog at a more appropriate time move this registration accordingly.
- // [START register_for_notifications]
- if #available(iOS 10.0, *) {
- // For iOS 10 display notification (sent via APNS)
- UNUserNotificationCenter.current().delegate = self
- // For iOS 10 data message (sent via FCM)
- FIRMessaging.messaging().remoteMessageDelegate = self
- } else {
- let settings: UIUserNotificationSettings =
- UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
- application.registerUserNotificationSettings(settings)
- }
- application.registerForRemoteNotifications()
- // [END register_for_notifications]
- FIRApp.configure()
- // Add observer for InstanceID token refresh callback.
- NotificationCenter.default.addObserver(self,
- selector: #selector(self.tokenRefreshNotification),
- name: .firInstanceIDTokenRefresh,
- object: nil)
- }
- return true
- }
- // [START receive_message]
- func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
- fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
- // If you are receiving a notification message while your app is in the background,
- // this callback will not be fired till the user taps on the notification launching the application.
- // TODO: Handle data of notification
- // Print message ID.
- if let messageID = userInfo[gcmMessageIDKey] {
- print("Message ID: (messageID)")
- }
- // Print full message.
- print(userInfo)
- print("METHOD 2")
- completionHandler(.newData)
- }
- // [END receive_message]
- // [START refresh_token]
- func tokenRefreshNotification(_ notification: Notification) {
- if let refreshedToken = FIRInstanceID.instanceID().token() {
- print("InstanceID token: (refreshedToken)")
- }
- // Connect to FCM since connection may have failed when attempted before having a token.
- connectToFcm()
- }
- // [END refresh_token]
- // [START connect_to_fcm]
- func connectToFcm() {
- // Won't connect since there is no token
- guard FIRInstanceID.instanceID().token() != nil else {
- return;
- }
- // Disconnect previous FCM connection if it exists.
- FIRMessaging.messaging().disconnect()
- FIRMessaging.messaging().connect { (error) in
- if error != nil {
- print("Unable to connect with FCM. (error)")
- } else {
- print("Connected to FCM.")
- }
- }
- }
- // [END connect_to_fcm]
- func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
- print("Unable to register for remote notifications: (error.localizedDescription)")
- }
- // This function is added here only for debugging purposes, and can be removed if swizzling is enabled.
- // If swizzling is disabled then this function must be implemented so that the APNs token can be paired to
- // the InstanceID token.
- func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
- print("APNs token retrieved: (deviceToken)")
- // With swizzling disabled you must set the APNs token here.
- FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.unknown)
- FIRMessaging.messaging().subscribe(toTopic: "/topics/substitutions")
- FIRMessaging.messaging().subscribe(toTopic: "/topics/debug")
- }
- // [START connect_on_active]
- func applicationDidBecomeActive(_ application: UIApplication) {
- connectToFcm()
- }
- // [END connect_on_active]
- // [START disconnect_from_fcm]
- func applicationDidEnterBackground(_ application: UIApplication) {
- FIRMessaging.messaging().disconnect()
- print("Disconnected from FCM.")
- }
- // [END disconnect_from_fcm]
- func evaluateRecievedData (remoteMessage: FIRMessagingRemoteMessage) {
- // Evaluate the data...
- }
- }
- // [START ios_10_message_handling]
- @available(iOS 10, *)
- extension AppDelegate : UNUserNotificationCenterDelegate {
- // Receive displayed notifications for iOS 10 devices.
- func userNotificationCenter(_ center: UNUserNotificationCenter,
- willPresent notification: UNNotification,
- withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
- let userInfo = notification.request.content.userInfo
- // Print message ID.
- if let messageID = userInfo[gcmMessageIDKey] {
- print("Message ID: (messageID)")
- }
- // Change this to your preferred presentation option
- completionHandler(.alert)
- }
- func userNotificationCenter(_ center: UNUserNotificationCenter,
- didReceive response: UNNotificationResponse,
- withCompletionHandler completionHandler: @escaping () -> Void) {
- let userInfo = response.notification.request.content.userInfo
- // Print message ID.
- if let messageID = userInfo[gcmMessageIDKey] {
- print("Message ID: (messageID)")
- }
- print("USER HAS PRESSED BANNER")
- // Do some stuff...
- completionHandler()
- }
- }
- // [END ios_10_message_handling]
- // [START ios_10_data_message_handling]
- extension AppDelegate : FIRMessagingDelegate {
- // Receive data message on iOS 10 devices while app is in the foreground.
- func applicationReceivedRemoteMessage(_ remoteMessage: FIRMessagingRemoteMessage) {
- print(remoteMessage.appData)
- self.evaluateRecievedData(remoteMessage: remoteMessage)
- print("RECIEVED MESSAGE (FOREGROUND)")
- }
- }
- // [END ios_10_data_message_handling]
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement