简体   繁体   中英

how to setting up AppDelegate for push notification in swift

I am trying to setup a push notification system for my application. I have a server and a developer license to setup the push notification service.

I am currently running my app in Swift4 Xcode 9

here are my questions :

1_ is that possible that I set the title and body of notification massage ??

2_ what is the func of receiving massage ? I'm using didReceiveRemoteNotification but this is called when I touch the notification I need a func which is called before showing notification that I can set my massage on it

3_ I'm generating device token in appDelegate and also in my login page for my server which are different from each other. this is not correct right ?

this is my app delegate :

          func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
                // Override point for customization after application launch.

                print("lunch",launchOptions?.description,launchOptions?.first)

                 application.registerForRemoteNotifications()
                FirebaseApp.configure()
                GMSPlacesClient.provideAPIKey("AIzaSyAXGsvzqyN3ArpWuycvQ5GS5weLtptWt14")

                UserDefaults.standard.set(["fa_IR"], forKey: "AppleLanguages")
                UserDefaults.standard.synchronize()


                  registerForPushNotifications()
                return true
            }


       func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {

            print("test : ",messaging.apnsToken)
        }

        func application(application: UIApplication,  didReceiveRemoteNotification userInfo: [NSObject : AnyObject],  fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {

            print("Recived: \(userInfo)")
            print()
           // completionHandler(.newData)

        }


    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {
        print("userInfo : ",userInfo)
        if application.applicationState == .active {
            print("active")
            //write your code here when app is in foreground
        } else {
            print("inactive")

            //write your code here for other state
        }
    }


   func getNotificationSettings() {
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().getNotificationSettings { (settings) in
                print("Notification settings: \(settings)")
                guard settings.authorizationStatus == .authorized else { return }
                DispatchQueue.main.async {
                UIApplication.shared.registerForRemoteNotifications()
                }
            }
        } else {


        }
    }


    func registerForPushNotifications() {
        if #available(iOS 10.0, *) {
            UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {
                (granted, error) in
                print("Permission granted: \(granted)")
                guard granted else { return }
                self.getNotificationSettings()
            }
        } else {

            let settings = UIUserNotificationSettings(types: [.alert, .sound, .badge], categories: nil)
            UIApplication.shared.registerUserNotificationSettings(settings)
            UIApplication.shared.registerForRemoteNotifications()


           // self.getNotificationSettings()
        }
    }
  1. Yes, you can manage the content of notification by sending an appropriate payload in the notification. Sending the payload in the following pattern would show title and body in the notification
 { "aps" : { "alert" : { "title" : "Game Request", "body" : "Bob wants to play poker", }, "badge" : 5 } } 
  1. Display the notification is handled by the system depending upon the app state. If the app is the foreground state you will get the call in the didReceiveRemoteNotification , otherwise, the system handles the displaying part and get control in the app when the user taps on the notification.

You cannot edit the content of notification from the app side.

  1. According to the document

APNs can issue a new device token for a variety of reasons:

User installs your app on a new device

User restores device from a backup

User reinstalls the operating system

Other system-defined events

So its recommended requesting device token at launch time.

You can send the token in login page rather than requesting a new token in the login.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM