Application basée sous Site ecommerced avec Push

romnattromnatt Membre
04:21 modifié dans Vos applications #1
Bonjour,

Je suis entrain de réaliser une application permettant de présenter mes nouveaux produits de mon site e-commerce (pas de commande)
Cette application est un lecteur de flux xml  (nouveau produits/ actualités)
J'aimerai installé un systeme de PUSH/NOTIFICATION des la mise en ligne d'un nouveau produit. PAr contre apres plusieurs recherche, on me dit qu'un serveur dédié est obligatoire?
Puis je donc faire des notification via serveur mutualisé? si oui comment procéder?

Cordialement

Réponses

  • AliGatorAliGator Membre, Modérateur
    04:21 modifié #2
    Il suffit d'un serveur web (celui où tu héberges ton flux et ta base de données peut tout à  fait faire l'affaire) et d'implémenter tout ce qui est indiqué dans la documentation Apple sur les Push Notifications (genre quelques fichiers de code PHP, un certificat, et hop)
    Je te conseille de regarder easyapns sur le net, c'est un bout de code PHP qui facilite grandement les choses, si ton hébergeur est en PHP.
  • Eddy58Eddy58 Membre
    04:21 modifié #3
    Ou alors un WebService+UILocalNotification
  • AliGatorAliGator Membre, Modérateur
    04:21 modifié #4
    dans 1305625256:

    Ou alors un WebService+UILocalNotification
    Heu non ça c'est pas possible.

    Si tu pars sur cette solution, cela veut dire que tu vas faire du pulling, donc demander régulièrement à  ton WebService s'il y a des nouveaux flux. Pour pouvoir faire cela (intérroger ton WebService), il faut que l'application soit lancée (donc il faut que l'utilisateur lance régulièrement l'application). Et une fois que la réponse au WebService est récupérée, si cette réponse indique qu'on a des nouveaux flux... bah mettre une pastille sur l'application ou créer une UILocalNotification n'a plus grand intérêt, puisqu'on est forcément déjà  dans l'application quand on reçoit la réponse, donc autant afficher directement une UIAlertView ou même directement le nouveau flux.

    Là  ce qui est souhaité c'est d'avoir du push, pas du pull, donc de pas avoir à  demander régulièrement au WebService s'il y a des nouveaux flux, mais que le serveur informe automatiquement, en faisant du push de l'information sans attendre qu'on lui demande, donc, quand il y a un nouveau flux.

    C'est comme quand tu reçois un SMS, heureusement que tu n'es pas obligé régulièrement d'ouvrir ton application SMS pour que l'application fasse une requête à  ton opérateur pour savoir si tu as des nouveaux messages, mais que les nouveaux messages te sont directement poussés sur ton téléphone sans attendre que tu aies fait la demande de vérifier les nouveaux SMS arrivés.

    Et ça UILocalNotification est d'aucune aide pour ça, les notifications locales ne peuvent servir qu'à  réveiller ton application (si l'utilisateur accepte le message qui lui est affiché) à  des heures données (et je vois mal demander toutes les heures à  l'utilisateur de réveiller son appli juste pour qu'il vérifie s'il y a des nouveaux flux, surtout si dans la plupart des cas la réponse sera "non désolé on t'a fait te réveiller pour rien"...
  • Eddy58Eddy58 Membre
    04:21 modifié #5
    Pourtant ce snippet, provenant de la doc Apple, montre comment ça fonctionne hors-appli en background multitâche, mais il est vrai que cela nécessite que l'application soit en background.

    Listing 2-2  Presenting a local notification immediately while running in the background

    - (void)applicationDidEnterBackground:(UIApplication *)application {<br />&nbsp; &nbsp; NSLog(@&quot;Application entered background state.&quot;);<br />&nbsp; &nbsp; // bgTask is instance variable<br />&nbsp; &nbsp; NSAssert(self-&gt;bgTask == UIInvalidBackgroundTask, nil);<br /> <br />&nbsp; &nbsp; bgTask = [application beginBackgroundTaskWithExpirationHandler: ^{<br />&nbsp; &nbsp; &nbsp; &nbsp; dispatch_async(dispatch_get_main_queue(), ^{<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [application endBackgroundTask:self-&gt;bgTask];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; self-&gt;bgTask = UIInvalidBackgroundTask;<br />&nbsp; &nbsp; &nbsp; &nbsp; });<br />&nbsp; &nbsp; }];<br /> <br />&nbsp; &nbsp; dispatch_async(dispatch_get_main_queue(), ^{<br />&nbsp; &nbsp; &nbsp; &nbsp; while ([application backgroundTimeRemaining] &gt; 1.0) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSString *friend = [self checkForIncomingChat];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (friend) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UILocalNotification *localNotif = [[UILocalNotification alloc] init];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (localNotif) {<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localNotif.alertBody = [NSString stringWithFormat:<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; NSLocalizedString(@&quot;%@ has a message for you.&quot;, nil), friend];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localNotif.alertAction = NSLocalizedString(@&quot;Read Message&quot;, nil);<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localNotif.soundName = @&quot;alarmsound.caf&quot;;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; localNotif.applicationIconBadgeNumber = 1;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [application presentLocalNotificationNow:localNotif];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; [localNotif release];<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; friend = nil;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; break;<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; }<br />&nbsp; &nbsp; &nbsp; &nbsp; [application endBackgroundTask:self-&gt;bgTask];<br />&nbsp; &nbsp; &nbsp; &nbsp; self-&gt;bgTask = UIInvalidBackgroundTask;<br />&nbsp; &nbsp; });<br /> <br />}
    
  • AliGatorAliGator Membre, Modérateur
    04:21 modifié #6
    Non car ça ne marche que pour le temps autorisé pour l'application à  effectuer des tâches en background, qui est un temps assez limité (juste pour te laisser le temps de terminer un upload ou un download typiquement, pas pendant 3h). Une fois que le temps a expiré, le ExpirationHandler est exécuté et ton application en background est en veille comme toutes les autres (et ne peux pas exécuter de code)

    Donc leur code ça marche si tu reçois un message de checkForIncomingChat peu de temps après le passage de ton appli en background, mais pas 3 plombes après.
    This method lets your application continue to run for a period of time after it transitions to the background. [...] You should not use this method simply to keep your application running after it moves to the background.
    [...]
    Applications running background tasks have a finite amount of time in which to run them. (You can find out how much time is available using the backgroundTimeRemaining property.) If you do not call endBackgroundTask: for each task before time expires, the system kills the application.
  • Eddy58Eddy58 Membre
    04:21 modifié #7
    Ok, le multitâche ne permet en effet pas autant de libertés, et le système de notifications locales en est donc limité, dommage car ça serait bien moins lourd à  gérer. Peut-être pour une future version d'iOS.....  :o
  • romnattromnatt Membre
    04:21 modifié #8
    Bon.. l'application est en ligne mais sans pushhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

    Je vais me pencher dessus pour la prochaine mise à  jour...
  • 04:21 modifié #9
    Tu pushhhhhhhhhhhhhhhhhhhh le h un peu trop loin romnatt  :P
Connectez-vous ou Inscrivez-vous pour répondre.