La « Google Experience » telle qu’elle s’invite dans la rumeur depuis quelques jours devrait être confirmée d’ici peu par Mountain View. Dès à présent pourtant, Scott Main et David Braun, chez Google, indiquent aux développeurs comment « préparer leur application SMS pour KitKat« .

Android KitKat

La team de Google s’adresse aujourd’hui aux développeurs qui utilisent des API (Application Programmation Interface) cachées pour construire leur propre application SMS (ex : le ContentProvider content://sms/sent). Le risque est multiple : pour chaque nouvelle version du système ou pour chaque constructeur venant modifier la base Android, la compatibilité n’est pas assurée.

Scott Main et David Braun confirment dans leur post sur le blog android-developers non pas l’intégration des SMS dans Hangouts à proprement parler, mais celle d’une application SMS par défaut que l’utilisateur pourra modifier dans les paramètres de son appareil. En parallèle, Google clarifiera la situation en mettant à disposition des APIs publiques utilisables par tous. Des modifications s’imposent par conséquent « pour que les applications continuent à fonctionner lorsque Android 4.4 sera déployé plus tard dans l’année« .

Concrètement, une seule et unique application pourra recevoir les nouveaux Intent (= message) SMS_DELIVER_ACTION et WAP_PUSH_DELIVER_ACTION, car désormais une seule application pourra être sélectionnée par l’utilisateur pour répondre à chacune de ces actions. Les autres applications devront, quant à elles, se contenter de l’Intent SMS_RECEIVED_ACTION qui permet uniquement de recevoir les messages, mais pas d’en rédiger. Google met en garde les développeurs afin qu’ils mettent rapidement à jour leurs applications, sans quoi elles ne pourront plus envoyer des SMS. L’utilisateur ne sera toutefois pas perturbé, car l’ancienne méthode affichera simplement une erreur.

Concrètement, les développeurs devront implémenter dans leur application :

  • Dans un BroadcastReceiver, ajouter un Intent-Filter pour SMS_DELIVER_ACTION, sans oublier la permission BROADCAST_SMS dans l’AndroidManifest pour recevoir les SMS.
  • Toujours dans un BroadcastReceiver, ajouter un Intent_filter pour WAP_PUSH_DELIVER_ACTION (android.provider.Telephony.WAP_PUSH_DELIVER) avec le MIME-type (application/vnd.wap.mms-message). La permission BROADCAST_WAP_PUSH sera également requise, ici dans le but de recevoir des MMS.
  • Dans votre Activity, un Intent-Filter pour ACTION_SENDTO (android.intent.action.SENDTO) avec les schémas sms:, smsto:, mms: et mmsto: sera nécessaire afin qu’elle reçoive les Intents des autres applications qui veulent envoyer un message.
  • Dans un service, ajouter l’Intent-Filter ACTION_RESPONSE_VIA_MESSAGE (android.intent.action.RESPOND_VIA_MESSAGE) avec les mêmes schémas. La permission SEND_RESPIND_VIA_MESSAGE suivra. Cela permettra ainsi de répondre aux appels avec un SMS (fonctionnalité d’Ice Cream Sandwich).

D’autres conseils peuvent être utiles aux développeurs, notamment la désactivation de certaines fonctionnalités lorsque l’application n’est pas utilisée comme messagerie par défaut. L’application ne disposant plus de la capacité à écrire au SMS Provider, elle devra masquer cette possibilité en fonction de la réponse renvoyée par la méthode Telephony.Sms.getDefaultSmsPackage(). Ces modifications concernent également les applications de type Sauvegarde et Restauration de SMS qui devront demander temporairement les droits, avant de les retourner à l’application par défaut.

Un tel billet, s’il a le mérite de rappeler des notions de développement utiles aux créateurs d’applications de messagerie, rappelle surtout un fait : l’Experience telle que l’aura définie Google dans son Android 4.4 KitKat promet de revoir une partie des fonctionnements auxquels l’utilisateur final était habitué, mais aussi et surtout de donner du fil à retordre aux concepteurs d’applications indépendantes venant concurrencer les applications créées par Google.

Google conclut son billet en indiquant qu’un SDK sera proposé très prochainement pour tester ces nouveautés. Aura-t-on droit à une sortie avant l’annonce officielle sur les terminaux comme ce fut le cas pour Honeycomb ou Cupcake ?