La fin des appels fantômes sur iPhone grâce à Flexisip 2.2 !

Primary tabs

Cet article ne discute pas des spams téléphoniques, ou d'un comportement anormal de Flexisip, mais de la résolution d'un problème apparu il y a quelques années suite à une évolution des plateformes Apple. 

Quel est le problème rencontré avec les appareils mobiles ?

L'essentiel des proxy SIP ont débuté leur développement en ciblant principalement les appareils dits “fixes”. C'est-à-dire, des appareils toujours reliés à internet et surtout n'ayant pas de problème de consommation électrique sur lesquels l’application Linphone restait allumée en permanence. Ainsi, lors d’un appel en direction d’un utilisateur, le proxy pouvait essayer de router l’appel vers toutes les adresses de contacts connues de l’utilisateur. S'il ne répondait pas, on pouvait en conclure que l’utilisateur était hors ligne. 

Cependant, ce système n’est pas compatible avec les appareils mobiles. Pourquoi ? Il est d’usage qu’un utilisateur soit “en ligne” mais ne lance pas l’application sur son téléphone. En effet, les smartphones coupent, voire n’autorisent pas, les applications en arrière-plan (à des fins d’économie d’énergie). Le problème est alors que l’utilisateur est identifié comme « hors ligne » par le proxy qui va devoir trouver une autre solution pour lui transmettre l’appel.

L’arrivée des push notifications, une solution pour les appareils mobiles

Les concepteurs d’OS mobiles ont alors offert aux développeurs des API web qui permettent d’envoyer des pushs notification sur le smartphone d’un utilisateur, soit pour afficher des messages à l’utilisateur (push de message), soit pour réveiller l’application et lui transmettre de l’information (background push ou push silencieuse).

Ce sont les pushs notifications qui ont permis de résoudre notre problème du mobile non joignable. Lors d’un appel, Flexisip va essayer de contacter les différents appareils du contact, mais s'il voit que l’utilisateur possède un appareil mobile il va, via un service de push notification, lui envoyer une push (de background/silencieuse) afin que l’appareil mobile se reconnecte. Donc, même si tous les appareils semblent hors ligne, le proxy va maintenir l’appel quelques instants afin d’attendre la reconnexion de l’appareil lors de la réception de la push pour lui transmettre l’appel.

Si l’appel a été décroché/raccroché/annulé par un autre appareil avant la réception de la push par l’appareil mobile, ce dernier va se reconnecter mais aucun appel ne lui sera transmis et aucune notification ne sera affichée. Nous avons envoyé une push notification silencieuse, seule la réception de l’appel par l’application déclenchera une sonnerie/notification.

Limitation des “push silencieuses” par Apple

Afin de réduire l’utilisation en arrière-plan des applications, Apple a limité le nombre de push notifications silencieuses. Cela nous a contraint d’envoyer des pushs VoIP lors des appels. L’inconvénient de ce type de push est qu’elle déclenche la sonnerie du téléphone. Dans le cas où l’utilisateur décroche l’appel sur son téléphone, il n’y a aucun problème. Mais, dans le cas où l’utilisateur va décrocher/raccrocher/annuler l’appel depuis un autre appareil, la push notification va tout de même déclencher la sonnerie et Linphone ne va recevoir aucun INVITE et/ou CANCEL car l’appel aura déjà été détruit par le proxy.

Pour les utilisateurs de smartphone Apple cela pouvait être assez dérangeant car leur appareil sonnait malgré le fait qu’ils aient déjà refusé l’appel ailleurs ou que leur correspondant ait annulé l’appel.

Sauvegarde du contexte de l’appel lors de push Apple

Pour pallier à cela, dorénavant, Flexisip proxy garde en mémoire les informations de l’appel (requête INVITE et CANCEL) même une fois l’appel terminé, afin d’attendre la reconnexion des différents appareils de l’utilisateur. Contrairement à ce qui était fait au préalable : la suppression automatique de l’appel dans le proxy une fois que celui-ci ait été décroché/raccroché/annulé via un autre appareil. 

Ainsi, dès la réception de la push VoIP qui fait sonner l’appareil, il pourra se réenregistrer et recevoir directement un INVITE+CANCEL qui va avoir pour effet de stopper la sonnerie et d’ajouter une entrée dans le journal des appels. 

Le temps des appels fantômes, dû à une push qui arrive après la fin de l’appel, est révolu (résolu aussi) !