iOS
Send Push Notifications
Notifications push avec Cloud Code et Swift pour iOS
28 min
envoi de notifications push en utilisant le code cloud avec swift introduction cette section explique comment vous pouvez envoyer des notifications push en utilisant le code cloud via back4app voici à quoi cela ressemblera à tout moment, vous pouvez accéder au projet complet construit avec ce tutoriel sur notre dépôt github pour compléter ce guide de démarrage rapide, vous avez besoin de xcode une application créée sur back4app suivez le tutoriel de nouvelle application parse pour apprendre à créer une application parse sur back4app une application ios connectée à back4app remarque suivez le tutoriel d'installation du sdk parse (swift) pour créer un projet xcode connecté à back4app une application ios configurée via tutoriel des notifications push back4app via le tableau de bord un appareil ios, iphone ou ipad, fonctionnant sous ios 10 ou version ultérieure un compte développeur apple payant 1 configurez votre application ios pour recevoir des notifications push chaque application parse installée sur un appareil enregistré pour les notifications push a un objet associé installation installation l'objet installation installation est l'endroit où vous stockez toutes les données nécessaires pour cibler les notifications push par exemple, dans votre application, vous pourriez stocker les équipes qui intéressent l'un de vos utilisateurs pour envoyer des mises à jour sur leurs performances enregistrer l'objet installation installation est également nécessaire pour suivre les événements d'ouverture d'application liés aux notifications push la façon la plus simple de commencer à envoyer des notifications est d'utiliser des canaux cela vous permet d'utiliser un modèle de publication abonnement pour envoyer des notifications push les appareils commencent par s'abonner à un ou plusieurs canaux, et les notifications peuvent ensuite être envoyées à ces abonnés les canaux auxquels un donné installation installation sont stockés dans le canaux canaux champ de l' installation installation objet après cela, nous passerons à l'envoi de notifications push ciblées à un utilisateur unique ou à un groupe d'utilisateurs en fonction d'une requête à partir de maintenant, nous allons supposer que vous avez complété toutes les étapes du tutoriel back4app push notifications via dashboard , même si vous utilisez le projet ios construit avec ce tutoriel qui est disponible sur notre dépôt github vous devriez avoir des notifications push de base fonctionnant et également être en mesure d'envoyer des notifications via la console d'administration 2 abonnez votre appareil au canal news tout d'abord, nous allons ajouter un canal à votre objet d'installation nous allons faire cela en modifiant la méthode createinstallationonparse createinstallationonparse dans notre fichier app delegate ouvrez le fichier appdelegate m fichier appdelegate m , et assurez vous que votre version de createinstallationonparse createinstallationonparse est la même que le code ci dessous appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 installation saveinbackground { 6 (success bool, error error?) in 7 if (success) { 8 print("you have successfully saved your push installation to back4app!") 9 } else { 10 if let myerror = error{ 11 print("error saving parse installation \\(myerror localizeddescription)") 12 }else{ 13 print("uknown error") 14 } 15 } 16 } 17 } 18 } nous ajoutons une nouvelle ligne de code ‘installation setobject(\[“news”], forkey “channels”)’ qui définira le tableau de canaux de l'objet d'installation pour contenir un canal appelé ‘news’ cela nous permettra d'envoyer un message à tous ceux qui s'abonnent au canal appelé news news via le code cloud 2\ testez le en exécutant votre application sur un appareil physique vous ne pouvez pas exécuter cela sur un simulateur vous aurez besoin d'un véritable jeton de notification pour mettre à jour votre enregistrement d'installation, donc un appareil physique est indispensable 3\ après qu'il s'exécute avec succès, vous devriez voir quelque chose de similaire à l'image ci dessous dans le installation installation section de votre tableau de bord vous pouvez le vérifier en allant sur le tableau de bord de votre application à site web de back4app puis en vérifiant le tableau des installations sous la colonne des canaux, vous devriez voir news news , vous montrant que vous êtes maintenant abonné au news news canal de notification 3 créez votre cloud code pour en savoir plus sur la façon de commencer avec cloud code regardez le tutoriel cloud code pour ios créez un js js fichier pour mettre votre cloud code vous devez l'appeler main js main js afin que back4app sache que c'est ici que vous stockez votre code cloud définissez une fonction cloud, en utilisant parse cloud define parse cloud define , pour appeler la notification push à l'intérieur de la fonction, nous appellerons parse push send parse push send pour envoyer des notifications au canal ‘ news news ’ il est nécessaire d'utiliser la clé maître dans cette opération le code suivant exécute ces étapes parse server 3 x // main js 1 parse cloud define("pushsample", (request) => { 2 3 return parse push send({ 4 channels \["news"], 5 data { 6 title "hello from the cloud code", 7 alert "back4app rocks!", 8 } 9 }, { usemasterkey true }); 10 }); parse server 2 x //main js 1 parse cloud define("pushsample", function (request, response) { 2 parse push send({ 3 channels \["news"], 4 data { 5 title "hello from the cloud code", 6 alert "back4app rocks!", 7 } 8 }, { 9 success function () { 10 // push was successful 11 response success("push sent"); 12 console log("success push sent"); 13 }, 14 error function (error) { 15 // push was unsucessful 16 response error("error with push " + error); 17 console log("error " + error); 18 }, 19 usemasterkey true 20 }); 21 }) 4 télécharger vers cloud code allez à votre application sur site web back4app et cliquez sur tableau de bord tableau de bord trouvez le cloud code cloud code et cliquez sur fonctions et hébergement web fonctions et hébergement web cela ressemble à ceci 3\ téléchargez ou créez un nouveau fichier (vous pouvez également modifier le fichier main js main js directement dans le navigateur) ensuite, cliquez sur déployer déployer comme montré ici 5 appeler le code cloud depuis votre application ios maintenant, nous allons écrire du code pour appeler cette fonction cloud depuis votre application vous aurez besoin à la fois du simulateur et d'un appareil physique pour accomplir cette tâche vous appellerez la fonction cloud depuis votre application exécutée dans le simulateur et vous verrez la notification apparaître sur votre appareil physique votre appareil physique doit en fait être verrouillé avec l'écran de verrouillage activé pour voir la notification une notification n'apparaîtra pas à l'écran si vous êtes à l'intérieur de l'application qui l'envoie lorsque vous recevez la notification 2\ ouvrez le fichier viewcontroller swift viewcontroller swift de votre projet nous devons inclure parse dans le contrôleur de vue en ajoutant le code suivant ‘import parse’ en haut du fichier viewcontroller swift 3\ ensuite, dans le viewcontroller swift viewcontroller swift fichier, nous appellerons une fonction d'alerte depuis la méthode viewdidappear l'alerte vous permettra de déclencher le code cloud code qui enverra une notification push à votre appareil assurez vous d'inclure le bloc de code suivant après la viewdidload viewdidload fonction viewcontroller swift viewcontroller swift 1 override func viewdidappear( animated bool) { 2 asktosendpushnotifications() 3 } 4 5 func asktosendpushnotifications() { 6 let alertview = uialertcontroller(title "send a push to the news channel", message nil, preferredstyle alert) 7 let okaction = uialertaction(title "ok", style default) { (action\ uialertaction) in 8 self sendpushnotifications() 9 } 10 alertview\ addaction(okaction) 11 let cancelaction = uialertaction(title "cancel", style cancel) { (action\ uialertaction) in 12 } 13 alertview\ addaction(cancelaction) 14 if let presenter = alertview\ popoverpresentationcontroller { 15 presenter sourceview = self view 16 presenter sourcerect = self view\ bounds 17 } 18 self present(alertview, animated true, completion\ nil) 19 } 20 21 func sendpushnotifications() { 22 let cloudparams \[anyhashable\ string] = \[ ] 23 pfcloud callfunction(inbackground "pushsample", withparameters cloudparams, block { 24 (result any?, error error?) > void in 25 if error != nil { 26 if let descrip = error? localizeddescription{ 27 print(descrip) 28 } 29 }else{ 30 print(result as! string) 31 } 32 }) 33 } 4\ exécutez votre application dans le simulateur et lorsque l'alerte demande d'envoyer la notification push, appuyez sur “ok” sur votre appareil physique, vous devriez voir la notification apparaître sur l'écran de verrouillage, comme ceci 6 appeler le code cloud depuis l'api rest l'api rest fournit un moyen rapide et facile de tester si votre fonction cloud fonctionne utilisez simplement le code ci dessous dans votre terminal ou invite de commande cliquez sur pour en savoir plus sur la façon de commencer avec la ligne de commande dans linux , macos ou windows pour tester les notifications push, utilisez simplement le code rest pendant que l'appareil est fermé 7 envoyer des notifications push ciblées en utilisant un objet utilisateur à l'avenir, nous utiliserons un projet ios différent qui a déjà des fonctionnalités de base d'inscription et de connexion intégrées nous allons utiliser ce projet ios pour vous montrer comment détecter si un utilisateur est connecté, et si c'est le cas, enregistrer son installation avec un lien vers son identifiant d'objet pour les requêtes dans le code cloud vous pouvez télécharger le projet ios complet construit avec le tutoriel de cette section sur notre dépôt github mais vous devrez toujours effectuer toute la configuration du tutoriel précédent qui explique comment envoyer des notifications depuis le tableau de bord back4app vous pouvez télécharger le projet ios complet construit avec le tutoriel de cette section sur notre dépôt github mais vous devrez toujours effectuer toute la configuration du tutoriel précédent qui explique comment envoyer des notifications depuis le tableau de bord back4app obtenez la nouvelle version de l'application, configurez et inscrivez vous ou connectez vous à l'application tout d'abord, assurez vous de télécharger le modèle fonctionnel depuis notre dépôt github nous n'allons pas passer en revue toutes les étapes de la construction de cette application, mais nous allons nous concentrer sur la configuration du code cloud et pourquoi cela fonctionne une fois que vous ouvrez cette nouvelle application, assurez vous de mettre les identifiants de votre propre application dans le fichier appdelegate swift appdelegate swift 1 func application( application uiapplication, didfinishlaunchingwithoptions launchoptions \[uiapplicationlaunchoptionskey any]?) > bool { 2 let configuration = parseclientconfiguration { 3 $0 applicationid = "paste your application id here" 4 $0 clientkey = "paste your client id here" 5 $0 server = "https //parseapi back4app com" 6 } 7 parse initialize(with configuration) 8 return true 9 } 2\ cette application présente des différences majeures par rapport à l'application précédente elle comporte 2 sections, l'une pour être connecté à votre application et une section lorsque vous n'êtes pas connecté à votre application le prochain grand changement est la fonction ‘createinstallationonparse’ du fichier appdelegate swift nous avons ajouté 1 ligne qui stocke l'identifiant de l'objet utilisateur comme partie de l'objet d'installation de cette façon, nous pouvons savoir quel utilisateur est associé à quel objet d'installation et pouvons les cibler individuellement pour des notifications appdelegate swift 1 func createinstallationonparse(devicetokendata\ data){ 2 if let installation = pfinstallation current(){ 3 installation setdevicetokenfrom(devicetokendata) 4 installation setobject(\["news"], forkey "channels") 5 if let userid = pfuser current()? objectid { 6 installation setobject(userid, forkey "userid") 7 } 8 installation saveinbackground { 9 (success bool, error error?) in 10 if (success) { 11 print("you have successfully saved your push installation to back4app!") 12 } else { 13 if let myerror = error{ 14 print("error saving parse installation \\(myerror localizeddescription)") 15 }else{ 16 print("uknown error") 17 } 18 } 19 } 20 } 21 } 3\ puisque nous stockons maintenant l'identifiant de l'objet utilisateur comme partie de l'objet d'installation, nous ne voulons pas demander un nouveau jeton push tant que l'utilisateur n'est pas connecté nous ne voulons pas demander un jeton directement à partir de la fonction ‘application didfinishlaunchingwithoptions’ du fichier appdelegate swift, mais nous voulons l'appeler à partir de la fonction ‘viewdidappear’ du loggedinviewcontroller dans ‘viewdidappear’, nous appelons une fonction sur l'appdelegate pour demander l'accès à un jeton de notification push d'apple puisque vous ne pouvez voir cette section qu'une fois connecté, nous pouvons supposer que l'utilisateur est connecté lorsque nous créons l'objet d'installation, mais juste pour être sûr, nous avons utilisé une ‘instruction if let’ pour déballer l'objet parse currentuser() et récupérer l'identifiant de l'objet loggedinviewcontroller swift 1 override func viewdidappear( animated bool) { 2 appdelegate? startpushnotifications() 3 } appdelegate swift 1 if let userid = pfuser current()? objectid { 2 installation setobject(userid, forkey "userid") 3 } 4\ d'accord, maintenant, pour s'inscrire ou se connecter sur votre appareil physique (iphone ou ipad) démarrez l'application vous devriez voir l'image ci dessous vous devez vous inscrire pour créer un nouvel utilisateur ou vous connecter si vous avez déjà créé un utilisateur sur votre application voici à quoi cela ressemblera vous devriez maintenant être en mesure de voir le loggedinviewcontroller cela devrait ressembler à ceci si vous essayez d'envoyer des notifications à vous même, cela ne fonctionnera pas encore car nous n'avons pas ajouté ces méthodes au code cloud c'est donc ce que nous allons faire ensuite 8 ajouter les méthodes de notification ciblées au code cloud ouvrez votre main js main js fichier que vous avez créé précédemment et ajoutez les fonctions suivantes pour cibler les installations par identifiant utilisateur il est nécessaire d'utiliser la clé maître pour cette opération parse server 3 x // main js 1 parse cloud define('sendpushtoyourself', (request) => { 2 let userid = request user id; 3 4 let query = new parse query(parse installation); 5 query equalto("userid", userid); 6 query descending("updatedat"); 7 return parse push send({ 8 where query, 9 data { 10 title "hello from the cloud code", 11 alert "back4app rocks! single message!", 12 } 13 }, { usemasterkey true }); 14 }); 15 16 parse cloud define('sendpushtoallusers', (request) => { 17 let currentuser = request user; 18 let userids = \[currentuser id]; 19 20 let query = new parse query(parse installation); 21 query containedin('userid', userids); 22 return parse push send({ 23 where query, 24 data { 25 title "hello from the cloud code", 26 alert "back4app rocks! group message!", 27 } 28 }, { usemasterkey true }); 29 }); parse server 2 x //main js 1 parse cloud define('sendpushtoyourself', function (request, response) { 2 var currentuser = request user; 3 var userid = currentuser id; 4 5 var query = new parse query("installation"); 6 query equalto("userid", userid); 7 query descending("updatedat"); 8 parse push send({ 9 where query, 10 data { 11 title "hello from the cloud code", 12 alert "back4app rocks! single message!", 13 } 14 }, { 15 usemasterkey true, 16 success function () { 17 response success("success sending a single push!"); 18 }, 19 error function (error) { 20 response error(error code + " " + error description); 21 } 22 }); 23 }); 24 25 parse cloud define('sendpushtoallusers', function (request, response) { 26 var currentuser = request user; 27 var userids = \[currentuser id]; 28 29 var query = new parse query(parse installation); 30 query containedin('userid', userids); 31 parse push send({ 32 where query, 33 data { 34 title "hello from the cloud code", 35 alert "back4app rocks! group message!", 36 } 37 }, { 38 usemasterkey true, 39 success function () { 40 response success('success sending a group push!'); 41 }, 42 error function (message) { 43 response error(error code + " " + error description); 44 } 45 }); 46 }); 9 télécharger vers cloud code allez à votre application sur site web back4app et cliquez sur tableau de bord tableau de bord trouvez le cloud code cloud code et cliquez sur fonctions et hébergement web fonctions et hébergement web cela ressemble à ceci 3\ téléchargez ou créez un nouveau fichier (vous pouvez également modifier le fichier main js main js directement dans le navigateur) ensuite, cliquez sur déployer déployer comme montré ici 10 testez que vous pouvez envoyer des notifications push ciblées à vous même ouvrez votre application depuis le simulateur tout en laissant votre appareil physique fermé avec l'écran de verrouillage activé vous pouvez tester que les deux fonctions de push fonctionnent en appuyant sur le bouton ‘envoyer un push à vous même’ et le bouton ‘envoyer un push à un groupe de personnes’ vous devriez voir les notifications apparaître sur l'écran de verrouillage de vos appareils réflexions finales maintenant, vous devriez avoir une compréhension solide de la façon d'envoyer des notifications push en fonction du canal d'un utilisateur ou de l'identifiant d'objet d'un utilisateur ou de toute autre requête impliquant l'obtention de l'identifiant d'objet de l'utilisateur n'oubliez pas que pour stocker l'identifiant d'objet de l'utilisateur, vous devez l'ajouter à l'installation de push et ne demander un jeton de push que lorsque l'utilisateur est connecté lors de l'envoi de push via requête, sachez que cela est limité par défaut à 100 résultats et que certains utilisateurs peuvent avoir plus d'un objet d'installation il n'est également pas recommandé d'envoyer des push à un tableau d'objets d'installation qui contient plus de 100 résultats cela pourrait entraîner l'absence d'envoi de certaines notifications si vous traitez avec de grands groupes de personnes, il est préférable d'utiliser des canaux ou d'envoyer les notifications en plusieurs requêtes c'est fait! à ce stade, vous pouvez envoyer des notifications push en utilisant cloud code via back4app ! félicitations !