2017-08-29 4 views
0

Le cœur de l'application que je construis est qu'il envoie une notification push à l'utilisateur deux fois par semaine avec un numéro d'un site Web, à un moment précis deux fois par semaine (exemple du code Swift que j'utilise pour cela ci-dessous). J'ai fait quelques recherches sur l'exécution de l'arrière-plan, mais je pense que je ne serai pas capable de l'utiliser parce que c'est si limité (seulement pour l'emplacement, le temps limité, etc.). L'utilisation d'un serveur est une autre option. Je n'ai pas l'intention de faire de l'argent avec cette application, donc il doit être une option gratuite. C'est pourquoi je regardais Firebase. J'apprenais Swift maintenant, c'est le premier langage de programmation que j'apprends.Comment envoyer une notification push lorsque le contenu d'un site Web change

Est-ce que quelqu'un a une opinion sur la façon de s'y prendre?

import UIKit 

class ViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view, typically from a nib. 



    let url = URL(string: "https://store.nike.com/be/nl_nl/pd/air-vapormax-flyknit-hardloopschoen-heren/pid-11384993/pgid-12169774")! 

    let request = NSMutableURLRequest(url: url) 

    let task = URLSession.shared.dataTask(with: request as URLRequest) { 
     data, response, error in 

     var message = "" 

     if error != nil { 

      print(error) 

     } else { 

      if let unwrappedData = data { 

       let dataString = NSString(data: unwrappedData, encoding: String.Encoding.utf8.rawValue) 

       var stringSeperator = "exp-pdp-local-price js-pdpLocalPrice" 

       if let contentArray = dataString?.components(separatedBy: stringSeperator) { 

        if contentArray.count > 0 { 

         stringSeperator = "€" 

         let newContentArray = contentArray[1].components(separatedBy: stringSeperator) 

         if newContentArray.count > 0 { 

          message = newContentArray[0] 

          print(message) 


         } 



        } 

       } 

      } 

     } 

     if message == "" { 

      message = "The jackpot couldn't be found. Please try again." 

     } 

     DispatchQueue.main.sync(execute: { 

      //De text in het label van de weer app = message 
      //Gebruik 'self.' om naar de viewcontroller te verwijzen, want hier zit je in een closure en niet in de viewcontroller zelf. 

     }) 

    } 

    task.resume() 


} 

override func didReceiveMemoryWarning() { 
    super.didReceiveMemoryWarning() 
    // Dispose of any resources that can be recreated. 
} 


} 
+1

Ce n'est certainement pas une tâche côté client. Sondage d'un autre site fréquemment que vous n'avez pas accès pour recevoir des changements sur ce site ASAP est une tâche qui devrait être effectuée sur le côté serveur. –

+0

Merci pour votre contribution !! Quelle langue est nécessaire pour laisser le serveur faire ce que j'ai écrit dans le code Swift ci-dessus? Je cherchais dans les nouvelles 'Fonctions Cloud' pour Firebase. – Maxim

+0

Pour savoir comment envoyer une notification push depuis Cloud Functions for Firebase, voir [cet exemple] (https://firebase.google.com/docs/functions/use-cases#notify_users_when_something_interesting_happens). Ensuite, pour apprendre à déclencher une fonction Cloud sur un planning, voir [ce blog] (https://firebase.googleblog.com/2017/03/how-to-schedule-cron-jobs-with-cloud.html) ou regardez [cette vidéo] (https://www.youtube.com/watch?v=CbE2PzvAMxA). –

Répondre

1

Les notifications push ne sont pas compliquées. Fondamentalement, vous devez enregistrer votre appareil sur APNS (Apple Push notification system), une fois enregistré, APNS vous renverra un jeton (chaque jeton est unique). Lorsque vous recevez le jeton d'APNS, vous devez envoyer le jeton au serveur, qui fournira à vos appareils des notifications push. Une fois que l'application serveur reçoit un jeton de l'appareil, vous pouvez l'enregistrer dans la base de données. Par exemple:

nom_utilisateur1 mobile_token1, mobile_token2.

Maintenant, vous pouvez obtenir des jetons de la base de données pour un nom d'utilisateur spécifique et envoyer des notifications push du serveur vers les périphériques. Lorsque vous envoyez des notifications push du serveur vers des périphériques, vous devez envoyer le jeton et le contenu de données à APNS, APNS envoie alors une notification à un périphérique spécifique. Donc, la réponse à votre question est la suivante: si vous voulez envoyer des notifications push, vous devez les envoyer du backend aux périphériques, le moment où vous enverrez des notifications push est lorsque le contenu web change, vous obtenez les jetons de la base de données et envoyer des notifications à APNS.

La logique est la même lorsque vous utilisez Firebase à la place APNS.

Voici un tutoriel agréable pour le côté client

https://www.raywenderlich.com/156966/push-notifications-tutorial-getting-started

0

Il vous semble ne pas besoin d'une notification push (également appelé notification à distance), mais un local (see apple documentation).

Vous pouvez configurer quand, pendant la semaine, vous souhaitez que cette notification locale soit envoyée.

Modifier: Je n'ai pas compris que le contenu des notifications dépend de votre morceau de code précédent. Vous pouvez toujours utiliser une notification locale. Il sera déclenché par ce qu'on appelle une extraction d'arrière-plan. Voir this tutorial par exemple (recherchez 'Background fetch' sur la page).

+0

Le fait est que la notification doit seulement être déclenchée après que le morceau de code que j'ai écrit ci-dessus soit exécuté. Après cette exécution, il y aura un nombre qui est retourné, en fonction de ce nombre, il faut envoyer une notification push ou non. La notification push peut donc être locale, mais le problème est toujours l'exécution en arrière-plan du code, ai-je raison? Désolé si ce n'est pas clair. – Maxim

+0

Ok, votre cas d'utilisation est plus clair maintenant. J'ai édité ma réponse. – Gl0ub1l

+0

Merci pour le montage. J'ai regardé dans le tutoriel que vous avez recommandé. J'ai quelques soucis avec l'arrière-plan. Cela fonctionne-t-il lorsque l'application est complètement supprimée en arrière-plan? Et si cela est possible, est-il possible de définir l'intervalle de temps à 3 jours? – Maxim