Firebase, Swift: Send a push notification to specific user given device token

Viewed 2641

I have a Firebase Swift chat app where I'd like to send a push notification to a specific user. I have already captured and have access to the user's device token.

All the references mention having to have a 'web app' to manage this, but I haven't managed to find any specific examples of this.

  1. Is it necessary to have a web app to manage push notifications for Firebase?

  2. If so, are there any examples of how this can work?

Thank you.

2 Answers
  • First do the all configuration for Firebase Cloud Messaging. Can follow this link https://firebase.google.com/docs/cloud-messaging/ios/client
  • Now you need to access Firebase registration token for your associated user whom you want to send a push notification. You can get this token by following below steps:
    1. Add 'Firebase/Messaging' pod to your project.
    2. import FirebaseMessaging in your AppDelegate.swift file.
    3. Conform MessagingDelegate protocol to your AppDelegate class.
    4. Write didRefreshRegistrationToken delegate method and get your user's registration token:
  • Now you are ready to send push notification to your specific user. Send notification as below:

    func sendPushNotification(payloadDict: [String: Any]) {
       let url = URL(string: "https://fcm.googleapis.com/fcm/send")!
       var request = URLRequest(url: url)
       request.setValue("application/json", forHTTPHeaderField: "Content-Type")
       // get your **server key** from your Firebase project console under **Cloud Messaging** tab
       request.setValue("key=enter your server key", forHTTPHeaderField: "Authorization")
       request.httpMethod = "POST"
       request.httpBody = try? JSONSerialization.data(withJSONObject: payloadDict, options: [])
       let task = URLSession.shared.dataTask(with: request) { data, response, error in
          guard let data = data, error == nil else {
            print(error ?? "")
            return
          }
          if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {
            print("statusCode should be 200, but is \(httpStatus.statusCode)")
            print(response ?? "")
          }
          print("Notfication sent successfully.")
          let responseString = String(data: data, encoding: .utf8)
          print(responseString ?? "")
       }
       task.resume()
    }
    
  • Now call above function as:

    let userToken = "your specific user's firebase registration token"
    let notifPayload: [String: Any] = ["to": userToken,"notification": ["title":"You got a new meassage.","body":"This message is sent for you","badge":1,"sound":"default"]]
    self.sendPushNotification(payloadDict: notifPayload)
    

No, it is not necessary to have a web app to manage push notifications with Firebase

Look at the answer from Ashvini, it gives you a method to send messages directly from your iOS app, to other devices.

You can also use the Firebase Console to manually send push messages to multiple users at the same time.

Here is the documentation for sending messages through a web app/server. Firebase Documentation

Related