web-dev-qa-db-fra.com

Notification Push d'un périphérique spécifique à un périphérique spécifique à l'aide de Firebase iOS Swift

Je serais très reconnaissant de l'aide avec les notifications push. Mon application propose un chat où les utilisateurs peuvent envoyer des messages texte directement les uns aux autres. Mais sans notifications push, cela n'a pas beaucoup de sens. Tout est configuré sur Firebase. Comment puis-je envoyer des notifications push d'un périphérique spécifique à un périphérique spécifique? J'ai essayé Firebase Notifications et OneSignal en raison d'une recommandation sur Stackoverflow. Mais je ne peux que déclencher les notifications de Firebase ou OneSignal directement et non d'un périphérique spécifique à un périphérique spécifique. 

Est-ce que quelqu'un a de l'expérience avec ça? 

6
NilsBerni

Si vos données sont stockées dans Firebease, j'utiliserais également les notifications Cloud Messaging pour Push. Il existe de nombreuses façons d’atteindre ces fonctions de notification de messagerie. Je vais reprendre celle qui me semble la plus facile.

En supposant que vous utilisez FCM et que vous avez configuré votre application pour cela.

Tout d’abord, vous devez stocker le jeton du périphérique de l’utilisateur, qui sera stocké sous forme de chaîne avec chacune des informations relatives à l’utilisateur:

let token = Messaging.messaging().fcmToken

Ainsi, dans votre base de données Firebase, dans chacune de vos données d'objet utilisateur, vous aurez une clé stockant une chaîne avec le jeton. Si vous souhaitez que l'utilisateur reçoive des notifications sur plusieurs périphériques, vous devez stocker ses différents jetons à l'aide d'un tableau de chaînes, ou même un tableau d'objets et stocker le type de périphérique, etc. C'est votre choix et vos besoins.

L’environnement de notification Push idéal est généralement composé d’un serveur intermédiaire qui reçoit la demande, gère et envoie la notification aux utilisateurs correspondants; dans ce cas, vous pouvez ignorer cette option et envoyer le message non directement à partir de votre application, à l’aide de FCM POST service de demande :

Exemple de création d'un FCM POST demande d'envoi d'une notification:

let url = URL(string: "https://fcm.googleapis.com/fcm/send")!
var request = URLRequest(url: url)
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.setValue("key=--HERE-GOES-YOUR-API-KEY--", forHTTPHeaderField: "Authorization")
request.httpMethod = "POST"

Ici, vous mettez toutes les données non, lisez le docs pour comprendre toutes les clés et les variables que vous pouvez envoyer, vous devrez faire une requête Firebase précédente dans laquelle vous obtiendrez les jetons de périphérique.

var notData: [String: Any] = [
    "to" : "HERE YOU PUT THE DEVICE TOKEN(s)",
        "notification": [
          title : "not title",
          body  : "not body",
          icon  : "not icon"
        ],
        "data": [
          //More notification data.
      ]
]

Et puis vous envoyez la demande de publication, Il retournera un objet si la notification a abouti et plus de données.

request.httpBody = notData.data(using: .utf8)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    guard let data = data, error == nil else {                                                 // check for fundamental networking error
        print("error=\(error)")
        return
    }

    if let httpStatus = response as? HTTPURLResponse, httpStatus.statusCode != 200 {           // check for http errors
        print("statusCode should be 200, but is \(httpStatus.statusCode)")
        print("response = \(response)")
    }

    let responseString = String(data: data, encoding: .utf8)
    print("responseString = \(responseString)")
}
task.resume() 

J'utilise cette même solution pour une application mobile native et une application Web de réaction et cela fonctionne à merveille.

9
Karlo A. López

Dans Swift 4, tout ce que Karlo a écrit ci-dessus fonctionne bien, à l'exception des données (la fonction :) n'est plus disponible.

Cela devra ressembler à ceci:

request.httpBody = try? JSONSerialization.data(withJSONObject: notData, options: [])

Une fois que j'ai fait ce changement, tout compilé et fonctionné à merveille.

4
Kyle Stewart

Vous pouvez facilement cibler les notifications Push sur un périphérique spécifique. Un tutoriel est fourni ici dans ce but spécifique ( https://firebase.google.com/docs/cloud-messaging/ios/first-message ). 

Maintenant, vous pouvez suivre les étapes ci-dessous:

  1. Lorsque "l'utilisateur" envoie un message à "autre utilisateur", vous pouvez envoyer les informations relatives à "autre utilisateur" au serveur. 
  2. Depuis le serveur, vous pouvez envoyer la notification Push à "l'autre utilisateur".
0
KrishnaCA