Tutoriel Android : Changer la limite d’envoi de sms grâce à ADB

Par défaut, le système Android met une limite au nombre de sms que peut envoyer une application de manière automatique.

Et c’est plutôt normal, car cela évite que des applis se mettent à envoyer du spam sms à l’insu de l’utilisateur.

Cependant, il y a des situations où l’on aimerai bien pouvoir changer ce comportement, de préférence sans avoir à « rooter » le téléphone…

C’est là qu’intervient ADB : Android Debug Bridge.

ADB est un ensemble de commandes en mode texte qui permettent de communiquer avec un device Android. ADB est disponible pour MS Windows, Apple MacOS et GNU Linux.

Attention, cela nécessite que votre device Android soit directement branché à l’ordinateur qui exécute ADB.

Installation d’ADB

Là, je ne vais détailler que la procédure que Mac, car je n’ai pas testé sous Windows et Linux. Installation est d’ailleurs un bien grand mot, puisqu’il suffit de :

Lancer ADB

Branchez votre device (déverrouillé) à votre ordinateur, puis dans le dossier où se trouvent les outils ADB, lancez la commande : « adb device« .

Cette commande lance le daemon adb. Si votre device n’a jamais été utilisé pour faire du développement Android, une fenêtre demandant d’autoriser l’usb debuging va s’ouvrir. C’est normal, dites « ok ».

Si tout s’est bien passé, vous pouvez maintenant lancer un shell sur votre device avec la commande « adb shell » (vous remarquerez que le shell est lancé en root 🙂 ):

Et pour mes sms alors ?

Comme je l’ai dit, depuis sa versions 5 (Lollipop), Android limite le nombre de sms envoyé à des destinataires différents à 30 sms maximum en 30 minutes.

Au delà, une fenêtre de confirmation d’envoi s’ouvre pour chaque nouveau sms.

Mais cela se règle avec 2 lignes de commandes ADB. Par exemple, si mon application doit pouvoir envoyer 50 sms en 15 minutes, je vais changer les clés « sms_outgoing_check_max_count » et « sms_outgoing_check-interval_ms » :

Bon, dans ce cas là, j’aurai pu me passer de changer la limite de temps, mais c’était pour vous montrer comment faire. Attention, le temps est exprimé en millisecondes.

Il faut rebooter le device pour que les paramètres soient pris en compte.

Et pour connaitre les valeurs des clés sur le divise, c’est la commande « settings list global« .

C’est évident mais je précise, il faut taper « exit » pour sortir du shell…

Bien entendu, ce n’est pas la seule chose que l’on peut faire avec ADB ! Pour vous en rendre compte, jetez un oeil ici : https://adbinstaller.com/commands/

Voilà pour cette introduction à ADB, comme quoi il n’y pas que iOS dans la (ma) vie…

Si la mise en page de mes articles vous paraît changeante ces derniers temps, c’est parce qu’il faut que je m’habitue à Gutenberg 😦 …

Et pour toute question / suggestions, comme d’habitude, commentez !

Tutoriel Swift : envoyer des sms / iMessages

des sms en swift

Suite à la demande d’un client, j’ai pas mal bossé en janvier sur les envois de sms via une application, que cela soit en utilisant les api’s natives (comme ici), ou en utilisant des sms proxys comme Twilio.

C’est donc l’occasion de faire un petit récapitulatif de ce que j’ai découvert et de faire un petit tutoriel sur l’envoi de sms en Swift sur iOS.

Mais d’abord, voici ce que j’ai « découvert » sur la gestion des sms / iMessages par iOS12

D’abord, la différence fondamentale entre un sms et un message type iMessage / mms / rcs… est que le sms ne nécessite pas de réseau « data » pour fonctionner, alors que les 3 autres types de messages nécessitent une connexion avec des données mobiles (3G, 4G…).

De plus, iOS semble « savoir » si votre correspondant.e possède un téléphone iOS, donc la possibilité de recevoir des iMessages, ou si votre le téléphone de votre correspondant.e est sur un autre OS, et donc utilise le format sms. Je précise que cela fonctionne que votre correspondant.e soit enregistré.e dans vos contacts ou non.

It’s a mirical !!!

Et bien non. Il fallait y penser, mais en fait avant d’envoyer votre message, le système vérifie si le numéro de téléphone de votre destinataire se trouve dans la bas de donnée iCloud d’Apple. Et oui. Par contre, en tant que développeur.se, n’espérez pas accéder à cette fonctionnalité… j’ai testé pour vous.

Autre comportement inattendu d’iOS 12, le rendu d’un sms est différent si le numéro de téléphone émetteur est enregistré dans vos contact ou non. Par exemple, si vous envoyez un lien, dans le premier cas, votre destinataire aura un petit carré gris affichant « Touchez pour voir le contenu », et dans le second cas, seule l’url sera visible.

Enfin, iOS, contrairement à Android, impose une confirmation manuelle avant l’envoi d’un message (en fait, on comme vous le verrez, on se contente de faire passer un numéro de téléphone et un message à l’api d’iMessage).

Voila pour la théorie, et maintenant, la pratique !

L’application d’exemple est très simple : un champ texte pour mettre le numéro de téléphone de votre destinataire, une zone de texte pour mettre votre message et un bouton « Envoyer « , et 2 ou 3 décorations 🙂

Sous iOS, pour envoyer un sms / iMessage, nous aurons besoin du framework « MessageUI« . C’est lui qui s’occupe de tout, via MFMessageComposeViewController.

Donc, tout se joue dans les 2 fonctions « sendMessage » et « messageComposeViewController » :

« sendMessage » récupère le contenu des champs « phoneNumber » et « message« . Puis, après avoir controlé que les capacités du device (il n’y à rien à rajouter dans Info.plist), envoie les données à « messageComposeViewController« . On récupère ensuite le résultat.

Comme d’habitude, le code complet de l’application présentée sur trouve sur Gitlab : https://gitlab.com/vinceBar/ios-sms-demo

Et si vous avez des questions, remarques… commentez !

La liste des APIs publiques

Il y a quelques temps, j’avais rédigé un article concernant la parfaite toolkit API pour développeur.se mobile. Cet article est bien sûr régulièrement mis à jour et vous le trouverez ici : https://vincent-barousse.blog/

Cette fois, je vous propose rien de moins que l’annuaire des APIs publiques !

A retrouver sur ce site : https://public-apis.xyz

Meetup Tours GDG : « Introduction à Redis »

Mardi dernier, j’était à un super Meetup organisé par le GDG de Tours.

Grâce à François Cerbelle, et à Redislabs, j’ai pu découvrir Rédis, mais je suis aussi repartie avec un petit cadeau :

ESP8622

Et oui, l’atelier avait pour but de nous présenter la base de donnée Redis, et de nous faire jouer avec une base de donnée distante et un ESP8266 offert par Redislab, un grand merci à eux !

Alors pour ce qui est de Redis, c’est une base de donnée clef-valeur, scalable, très haute performance, et dont l’une des particularités est de fonctionner en RAM. Cela évite donc les accès disques, donc augmente sensiblement la performance. Il est bien entendu possible de faire un backup sur disque pour éviter de mauvaises surprises en cas de reboot… Plus d’infos ici : https://fr.wikipedia.org/wiki/Système_de_gestion_de_base_de_données

L’idée de l’atelier était donc d’envoyer les données d’une photorésistance à une base de donnée Redis, par l’intermédiaire d’un ESP8266, programmé en environnement Arduino.

L’IDE Arduino ne gérant pas l’ESP8266 en natif, il a fallu bidouiller un peu… Sur Mac, il faut récupérer en plus le driver ici : https://github.com/adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver.

C’est donc assez acrobatique, mais au final, cela marche ! Je vous ferai un tutoriel dès que j’aurai 5 mn…

Nous avons pu ensuite constater les (très bonnes) performances de Redis.

Voilà, c’était juste un petit article pour faire taire les mauvaises langues qui prétendent que la scène informatique est inexistante en Touraine !

Comme d’habitude, n’hésitez pas à commenter si vous avez des questions, suggestions…

Tutoriel Swift : formatage de numéros de téléphones avec PhoneNumberKit

PhoneNumConverterExample

Dans le cadre de mon activité de freelance, j’ai récemment dû répondre à une offre dans laquelle il était demandé :

 

– De créer un champ texte intégrant un numéro de téléphone

 

– Ce champ texte devra formater le numéro de téléphone pour avoir le même affichage que dans l’appli « Contacts » d’Apple.

 

– Le formatage doit se faire dans les normes locales de chaque pays.

 

– Puis le numéro de téléphone doit, toujours en fonction de la localisation, être converti à la norme E164.

 

– L’utilisation de frameworks externes est autorisée.

 

– Forcément, il faut réaliser tout cela pour moins de 5 euros et en 5 mn 😦 …

 

Comme j’ai trouvé le challenge intéressant (et avec l’espoir de facturer à un tarif un peu plus décent…), je me suis penché sur la question.

La première option qui m’est venue à l’esprit est de partir d’une « page blanche », et de tout coder. Après tout, filtrer et formater des entrées utilisateur n’est pas bien compliqué.

Oui mais pour que cela fonctionne pour tous les pays, cela devient nettement plus gourmand en temps et en neurones…

C’est ainsi que j’ai découvert le génialissime framewok « PhoneNumberKit« 

Lire la suite

Initier enfants et ados à la programmation informatique…

learn-2706897_1920

Alors noël et le nouvel an sont passés, les cadeaux sont oubliés (cassés – rangés – revendus… rayer la mention inutile 🙂 ), mais les vacances ne sont pas terminées… En clair, ça commence un peu à tourner en rond à la maison…

 

Alors pourquoi ne pas profiter de ce moment privilégié pour se challenger un peu et essayer d’apprendre des rudiments (ou plus) de programmation informatique à sa progéniture ?

Toujours serviable 🙂 je vous ai trouvé quelques ressources en ligne intéressantes…

Lire la suite