2017-08-12 2 views
0

J'essaie de faire une application qui est exactement comme WhatsApp, jusqu'à présent la plus grande limite est que lorsqu'un utilisateur rouvre l'application après un certain temps, et va à un Conversation View, nouveaux Message s qui ont été envoyés pendant la L'application était en arrière-plan/suspendue ou terminée Les états doivent être récupérés à partir d'un serveur (API), ce qui entraîne un retard potentiel pour les nouveaux messages apparaissant dans le Conversation View.Existe-t-il un moyen de conserver CoreData en synchronisation avec une API serveur même lorsque l'application est en état Arrière-plan/Suspendu/Terminé?

Comment puis-je atteindre en permanence Sync d'une application avec une API de serveur? Je suis un peu sûr que les applications comme WhatsApp parviennent à le faire, car Message ne semblent jamais être téléchargés lorsque vous ré-ouvrir l'application après un certain temps, non?

Quelle est la bonne façon d'imiter ce type de comportement? Je veux vraiment apprendre comment effectuer ce type de synchronisation "avancée" et je ne sais pas par où commencer. Encore une fois, mon objectif est d'essayer d'éviter les téléchargements de serveur de nouveaux Message quand un utilisateur rentre un Conversation View par exemple (parce que ce serait mauvais UX)

Merci d'avance!

+0

Vous ne pouvez pas vraiment ** parfaite synchronisation **. Vous pouvez vous rapprocher. Utilisez les notifications push pour indiquer à votre application qu'il existe des messages à récupérer. Vous pouvez également faire un peu de traitement en arrière-plan pour obtenir des mises à jour. – ryantxr

+0

Oui, je commence à réaliser que ça ne peut pas être parfait. Mais, est-il prévu que vous deviez télécharger quelques données (Messages) en entrant dans le ViewController auquel ils appartiennent? Ou devrait-il se produire avant comme dans un rappel AppDelegate? – jlstr

+0

Vous pouvez charger tous les messages pour toutes les conversations lorsque l'application est mise au premier plan. Ensuite, ils sont déjà chargés lors de la saisie de la conversation. – ryantxr

Répondre

1

Votre application aura besoin de notifications push. Ceci est un doit avoir pour les applications comme celle-ci.

Sur le serveur, lorsque vous savez qu'il y a de nouveaux messages, envoyez une notification push à l'application. Cela permettra à l'application de savoir qu'il y a des messages à lire. À ce stade, l'application peut arborer l'icône de l'application, afficher une alerte et afficher sur l'écran de notification. L'utilisateur contrôle la façon dont les notifications apparaissent.

Détails sur les notifications ici: https://developer.apple.com/notifications/

Votre application peut charger tous les messages quand il reçoit la notification.

applications iOS ont des options limitées pour les processus d'arrière-plan: https://developer.apple.com/library/content/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html

+0

Bonjour, cela semble être exactement ce que je cherche. Les sections sur: «Utiliser les notifications Push pour lancer un téléchargement» et «Récupérer de petites quantités de contenu de manière opportuniste» semblent prometteuses. Vous n'avez pas d'échantillons Swift par hasard? Merci beaucoup monsieur. – jlstr

+1

Désolé. Je n'ai aucun code qui serait utile pour cela. Il existe de nombreux exemples de notifications push. Écris du code. Si vous êtes bloqué, ouvrez une nouvelle question. – ryantxr