PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → Mise en arrière-plan iOs
Mise en arrière-plan iOs
Débuté par Chris, 22 juil. 2016 19:40 - 18 réponses
Membre enregistré
55 messages
Posté le 22 juillet 2016 - 19:40
Bonjour,

Je tente depuis plusieurs jours de comprendre comment fonctionne iOs pour que mon application continu de transmettre des informations en tâche de fond (revenir sur Home ou mettre en veille l'iPhone).

J'ai ce code.

Mise en arrière plan DU PROJET
Trace("En arriere plan")
gnNumTimerBackground = TimerSys(ArrierePlan,100)


Mise au premier plan DU PROJET
Trace("En premier plan")
FinTimerSys(gnNumTimerBackground)


Procedure ArrierePlan()

Trace("On passe par là")


Extrait d'une trace :
// Retour via le bouton Home
2016-07-22 19:32:54.703 TestBack[850:359745] En arriere plan
2016-07-22 19:32:55.762 TestBack[850:359745] On passe par

// Clic sur l'icône de l'application
2016-07-22 19:33:03.058 TestBack[850:359745] On passe par
2016-07-22 19:33:03.079 TestBack[850:359745] En premier plan

En fait il ne se passe pas grand chose dès qu'on sort de l'application.

Sur Xcode j'ai activé les "Capabilities" pour la partie "Background Modes" mais ça change pas grand chose.

Mon but final est de mettre à jour un enregistrement dans la base de données HFSQL client serveur.

Merci d'avance.
Membre enregistré
637 messages
Popularité : +36 (36 votes)
Posté le 23 juillet 2016 - 11:45
Bonjour Chris,

Je ne pense pas que l'utilisation de TimerSys soit la bonne voie pour un traitement en tâche de fond.
Cette fonction n'est pas du tout dédiée, ni ne peut être dérivée, pour cela.

La fin de l'exécution de l'application (pour iOS l'arrêt d'une application étant interdite, il s'agit donc de la mise en arrière plan) arrête le timer !
Donc, c'est normal que cela ne fonctionne pas.

La seule solution pour réaliser ce que tu veux faire est d'utiliser les notifications persistantes.

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Message modifié, 23 juillet 2016 - 11:46
Membre enregistré
55 messages
Posté le 23 juillet 2016 - 18:28
Quand tu dis "notifications persistantes" tu penses au badge sur iOs ?
Parce que sur android j'utilise bien un thread persistant mais ça n'existe pas sur iOs.
Membre enregistré
637 messages
Popularité : +36 (36 votes)
Posté le 25 juillet 2016 - 07:23
Bonjour,

Désolé je m'étais concentré sur le code sans prêter attention que c'était pour iOS.
En effet, les notifications persistantes ne peuvent pas fonctionner sur iOS...

Peut-être loufoque comme idée mais je sais qu'il est possible d'utiliser le GPS en background avec iOS. Je le sais car Apple m'avait refusé une application à cause de cela, du fait que je n'avais pas mis les avertissements ad hoc.

Donc, je me demande s'il ne serait pas possible de dériver une procédure de la partie code GPS, qui ne sert à rien certes dans ton application mais juste là pour dériver une procédure pour faire ce que tu veux. C'est peut-être une piste...

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Membre enregistré
55 messages
Posté le 25 juillet 2016 - 16:53
Je trouve assez baclé de rajouter une couche GPS pour réaliser des traitements.
S'il y a un bloc "mise en avant plan" et "mise en arrière plan" c'est bien qu'on doit pouvoir s'en servir ?

Personne n'a réussi à réaliser ce genre de traitement dans son appli iOs ?
Posté le 04 octobre 2016 - 21:29
Intéressé à avoir une réponse aussi à ce problème... Je bloque totalement!

Merci!
Posté le 05 octobre 2016 - 09:47
Moi aussi j'aimerais avoir la solution.
Malheureusement, cela fait plus de 2 semaines que j'ai envoyé un projet test à Pc Soft mais je n'ai reçu aucune réponse.
J'attends...

(Et j'ai rien vu de mieux avec la nouvelle version 22 qui va arriver ; Un peu plus d'effort sur l'intégration des fonctions iOs serait bienvenue dans WM)
Posté le 05 octobre 2016 - 14:04
Pour ma part, je dois laissé un timer ouvert pour mettre à jour le badge de mon application périodiquement, dépendant des nouvelles avec SysIconeBadge.

Mais le timer s'arrête lorsque je passe mon application en arrière plan.

Si J'utilise le thread principal avec une boucle, je bloque le thread alors quand on reviens dans l'application, elle est gelée.
Posté le 05 octobre 2016 - 14:43
En fait la solution serait d'utiliser ThreadPersistant, mais c'est seulement disponible pour Android...
Posté le 05 octobre 2016 - 15:20
C'est bien ça qu'on attends de Pc Soft : la fonction ThreadPersistant() pour iOs !
Membre enregistré
173 messages
Popularité : +7 (7 votes)
Posté le 27 février 2017 - 13:46
Très intéressant comme échange.
Et alors, vous avez fait comment ?

--
Cordialement
Olivier DUCTEIL
Membre enregistré
519 messages
Popularité : +7 (7 votes)
Posté le 27 février 2017 - 18:35
Même ThreadPersistant() ne marche pas ni pour android, .. une notification reste affiché sur l'écran sûrement elle dérangera l'utilisateur final et finira par la désinstaller !! Andicapdev
Membre enregistré
173 messages
Popularité : +7 (7 votes)
Posté le 27 février 2017 - 23:47
(re) Bonjour

Si je vous suis bien, il n'est possible d'exécuter sur WinDev Mobile, en iOS, une procedure récurrente en tâche de fond, que l'application soit ouverte ou pas.
Les notifications en locale ne peuvent donc se faire que si l'appli est en focus ?

J'ai du mal à croire ça ...

--
Cordialement
Olivier DUCTEIL
Membre enregistré
519 messages
Popularité : +7 (7 votes)
Posté le 28 février 2017 - 11:10
Welcome to the wonderful world !!
There is so many thing that will surprise you be sur !! when it s so easy in other worlds !!
Membre enregistré
637 messages
Popularité : +36 (36 votes)
Posté le 28 février 2017 - 23:11
Bonjour,

Dans certains cas - je dis bien dans certains cas - il est possible de contourner ce problème par l'utilisation de push transparents.

Certes, si le besoin est de récupérer des infos GPS toutes les x secondes cela ne sera pas possible. Mais s'il s'agit de surveiller l'arriver ponctuelle de news pour mettre à jour un badge par exemple, c'est tout à fait possible.

Un cas concret, une news arrive et est enregistrée dans un fichier (en C/S). L'écriture dans ce fichier déclenche un trigger. La procédure associée transmet le push transparent. L'application concernée se réveille, même si elle était complètement fermée, met à jour le badge....

Cela permettra peut-être de dépanner certains d'entres vous.

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Membre enregistré
173 messages
Popularité : +7 (7 votes)
Posté le 01 mars 2017 - 10:14
Bonjour,

C'est brillant.

Les notifications push me posent un seul problème : comment identifier le device de l'utilisateur ?
Je n'ai pas compris comment récupérer automatiquement l'ID du mobile, et comment l'associer à un utilisateur utilisant ma solution.

Je m'explique :
J'ai une base distante avec des utilisateurs.
Je souhaite que la routine ( le cron ) cherche les prochains rendez-vous des utilisateurs , leurs renvoie une notification (et une seule), application ouverte ou pas.

Est-ce possible de le faire avec une appli mobile WinDev ? Si oui, comment ?

--
Cordialement
Olivier DUCTEIL
Membre enregistré
637 messages
Popularité : +36 (36 votes)
Posté le 01 mars 2017 - 19:09
Bonjour,

Si tu as une base distante avec un fichier utilisateur, c'est d'autant plus facile.
Il faut un champ "token" dans ce fichier. Ce champ sera automatiquement renseigné par la fonction NotifPushActive. L'application reçoit alors un identifiant (token) qu'il suffit d'enregistrer dans le fichier client.

Le cron (ton web service), peut donc récupérer ce token pour adresser un push au bon utilisateur.

C'est ta procédure définie par NotifPushProcédure qui te permettra de réveiller l'application. A partir de là, tu fais ce que tu veux...

Cdlt - Eric.

--
Eric DELATTRE
http://www.yoosite.fr
Posté le 02 mars 2017 - 11:43
Meme en utilisant une procédure en objective C, ça serait pas possible d'utiliser les thread persistants ?

Et d'ailleurs, pourquoi windev utilise toujours objective C alors que swift existe ?
Posté le 02 mars 2017 - 17:10
Bonjour,

Parce que c'est comme ça }:(