2010-06-23 6 views
2

J'ai une application qui utilise des données de contact de la manière suivante:Traiter avec les numéros de téléphone internationaux sur iPhone

  1. Pour envoyer un SMS à partir du client
  2. Pour envoyer un SMS à partir de notre serveur
  3. Pour télécharger le numéro de téléphone d'un utilisateur vers une base de données où les autres peuvent s'y opposer

Cela fonctionne très bien aux États-Unis, mais l'internationalisation a un certain nombre de problèmes. Voici mes hypothèses pour le faire fonctionner:

# 1 - Envoyer un SMS du client est simple. Utilisez le numéro dans le carnet d'adresses verbatim (sans normalisation) et laissez le système d'exploitation le comprendre. Les chances sont que s'ils peuvent passer un appel via un numéro donné, ils peuvent envoyer un SMS (non?)

# 2/# 3 - Envoyer un SMS depuis le serveur est plus compliqué. La plupart des API SMS requièrent une notation internationale (le préfixe "+" et le code du pays) tandis que l'utilisateur aura dans sa liste de contacts divers numéros de téléphone locaux et globaux avec différents préfixes (indicatif régional, code pays, etc.). Donc, la normalisation serait nécessaire ici. La correspondance du numéro de téléphone d'un utilisateur dans une base de données nécessite également une normalisation.

Pour normaliser les numéros de téléphone, je dois d'abord décider si l'utilisateur a voulu spécifier un numéro global en recherchant les préfixes "+" "011" et "00". Si c'est le cas, j'enlève le préfixe, le remplace par "+" et utilise ce numéro.

Si je pense que le nombre est local, je peux essayer de virer sur le code de pays moi-même (heuristique, pas fiable). Cela nécessite de connaître le code de pays par défaut de l'utilisateur. Sur l'iPhone, je peux obtenir la région préférée de l'utilisateur (qui est sélectionnable) et le MCC et MNC de l'utilisateur (en fonction de l'emplacement?). Je me penche vers le code de pays choisi par l'utilisateur car il est probable que la plupart de ses numéros de téléphone locaux seront de ce pays.

Je crois que c'est le meilleur que je peux faire sans analyser le nombre entier et comprendre l'indicatif régional et d'autres composants. Je suppose que la plupart des pays autorisent "0" comme préfixe pour leur propre code de pays.

Avez-vous du sens? Y a-t-il une façon plus simple/plus saine de faire cela?

Répondre

0

# 1 c'est une hypothèse juste, sauf lorsque l'utilisateur va outre-mer.

# 2/# 3 Pour une normalisation plus fiable, vous devez obtenir l'emplacement approximatif de l'utilisateur. Voici le code psudeo:

  • si le numéro commence par « + », le laisser tel quel
  • autre obtenir pays actuel de l'utilisateur (voir this post):
    • si tartelettes avec country exit codes, remplacer par "+"
    • si commence avec le code pays, ajouter un "+"
    • si commence par un "0", le remplacer par "+"
    • autre, on suppose qu'il est numéro local, ajoutez un indicatif régional et un code de pays. Avec la complexité de celui-ci, il peut être plus facile de demander à l'utilisateur une entrée, par ex. leur indicatif régional actuel et leur code de pays, ou leur emplacement.
Questions connexes