# Push Notifications

**Referd** uses Firebase to deliver maximum experience in your app. This includes push notifications, interactive in-app messaging and referrals support.

![](https://983627972-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F1bAQ4IvAKNqrQlsRN5b4%2Fuploads%2Fgit-blob-f1b68e583e5af1affdb33c31e69eef37f6324682%2Fin-App-notifications-Mobile\(2\).png?alt=media)

### Configure Referd With Your Firebase

Before you start, you must configure your Firebase on your Referd account. Follow the steps in [Configure your Firebase account on Referd for mobile push notifications](https://help.tryreferd.com/en/articles/8668480-get-your-referd-integration-details) article from our Help Center related to push notifications.

### Handling Push Notifications Integration

Configure notifications as usual and add two more methods using our SDK. This is normal integration for general firebase notifications configuration, so here is a how-to guide.

1\. Add the below to the **AppDelegate** class

```swift
Inherit :UNUserNotificationCenterDelegate, MessagingDelegate
Add var gameballApp: Gameball?
```

2\. Then put these lines **didFinishLaunchingWithOptions()** in **AppDelegate**

```swift
FirebaseApp.configure()
registerForPushNotifications()
```

3\. Add these stack of lines to the **AppDelegate** class

```swift
    func registerForPushNotifications() {
        UNUserNotificationCenter.current()
            .requestAuthorization(options: [.alert, .sound, .badge]) {
                [weak self] granted, error in
                UNUserNotificationCenter.current().delegate = self
                Messaging.messaging().delegate = self
                guard granted else { return }
                self?.getNotificationSettings()
        }
    }

    func getNotificationSettings() {
        UNUserNotificationCenter.current().getNotificationSettings { settings in
            guard settings.authorizationStatus == .authorized else { return }
            DispatchQueue.main.async {
                UIApplication.shared.registerForRemoteNotifications()
            }
        }
    }
```

4\. Here we need to add this method to register token to **Referd** in this method

```swift
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
                let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) }
                let token = tokenParts.joined()
        if let refreshedToken = InstanceID.instanceID().token() {
            print("InstanceID token: (refreshedToken)")
            self.gameballApp?.registerDevice(withToken: refreshedToken)
        }
    }
```

5\. Here we need to add this method to let **Referd** handle everything related to Referd Widget

```swift
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        gameballApp?.notificationPopUP(notification: notification)
    }
```

Your users can now receive push notifications from **Referd**.
