Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending push notifications from iOS device using OneSignal/Firebase

I'm developing an app and am trying to work out how I can notify a specific user when a different user performs a specific action. I'm trying to avoid setting up my own backend server, as I believe that what I want to do can be accomplished by OneSignal/Firebase.

I haven't tried it yet, but I figure with each user I could get their own OneSignal player_id (which is basically the OneSignal device_id), upload that to my firebase database, then when I want to send a push notification I simply pull the user's player_id from firebase and then use it to create a notification with OneSignals send to specific device, where using player_ids does not require the API Auth Key.

Though after looking through the documentation I'm not sure how a user can find (so they can then upload to firebase) their player_id, so if anyone could point me in that direction it would be appreciated.

Reading through other questions, it seems like this would work. I just wanted to see if there were any like potential issues with this method or if there were any safer or easier ways to go about it.

like image 854
Philip Vasseur Avatar asked Dec 06 '25 17:12

Philip Vasseur


1 Answers

Yes this is possible, what you need to do is:

  • Create an OneSignal and Firebase Account for API-Keys

  • Add One Signal (just an example)

    OneSignal.initWithLaunchOptions(launchOptions, appId: "your app id", handleNotificationReceived: { (notification) in
    
        }, handleNotificationAction: { (result) in
            let payload: OSNotificationPayload? = result?.notification.payload
            print(payload ?? "")
    
        }, settings: [kOSSettingsKeyAutoPrompt : false, kOSSettingsKeyInFocusDisplayOption: OSNotificationDisplayType.notification.rawValue])
    
  • save the push token/playerId to firebase (in users.id.onesignal for example)

    OneSignal.promptForPushNotifications(userResponse: nil)
    OneSignal.idsAvailable({(_ userId, _ pushToken) in
    print("UserId:\(userId!)")
    if let pushToken = pushToken {
        print("pushToken:\(pushToken)")
        FIRDatabase.database().reference().child("users").child(User.sharedInstance.uid).child("onesignal").setValue([userId!: pushToken])
    
    }
    })
    
  • When you have for every user an pushToken, you can send a notification to that playerId

    FIRDatabase.database().reference().child("users").child(friendId).child("onesignal").observeSingleEvent(of: .value, with: {snapshot in
        if snapshot.exists() {
    
            for (playerId, _) in snapshot.value as! Dictionary<String, String> {
    
                OneSignal.postNotification(["headings": ["en": title], "contents": ["en": message], "include_player_ids": [playerId]])
            }
        }
    })
    

This is not the full implementation and how to do it, but it will give you the right way I think.

like image 133
Retterdesdialogs Avatar answered Dec 09 '25 16:12

Retterdesdialogs



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!