Работа с международными телефонными номерами на iPhone - PullRequest
2 голосов
/ 23 июня 2010

У меня есть приложение, которое использует контактные данные следующими способами:

  1. Чтобы отправить смс с клиента
  2. Чтобы отправить смс с нашего сервера
  3. Чтобы загрузить номер телефона пользователя в базу данных, где другие могут сопоставить его

Это хорошо работает в США, но у интернационализации есть ряд проблем. Вот мои предположения, чтобы заставить его работать:

# 1 - Отправка SMS с клиента проста. Используйте номер в адресной книге дословно (без нормализации) и дайте ОС разобраться в этом. Скорее всего, если они могут позвонить по указанному номеру, они могут отправить SMS (верно?)

# 2 / # 3 - Отправка SMS с сервера более сложна. Большинство SMS API требуют международных обозначений (префикс «+» и код страны), в то время как пользователь будет иметь в своем списке контактов различные локальные и глобальные телефонные номера с различными префиксами (код города, код страны и т. Д.). Так что здесь потребуется нормализация. Сопоставление номера телефона пользователя в базе данных также требует нормализации.

Чтобы нормализовать телефонные номера, я должен сначала решить, хотел ли пользователь указать глобальный номер, ища префиксы "+", "011" и "00". Если это так, я удаляю префикс, заменяю его на «+» и использую этот номер.

Если я думаю, что номер является локальным, я могу попытаться добавить код страны самостоятельно (эвристический, ненадежный). Это требует знания кода страны пользователя по умолчанию. На iPhone я могу получить предпочтительный регион пользователя (который можно выбрать), а также MCC и MNC пользователя (в зависимости от местоположения?). Я склоняюсь к выбранному пользователем коду страны, потому что, скорее всего, большинство его местных телефонных номеров будут из этой страны.

Я считаю, что это лучшее, что я могу сделать, не разбирая весь номер и не выясняя код города и другие компоненты. Я предполагаю, что большинство стран разрешают использовать «0» в качестве префикса для кода своей страны.

Имеет смысл? Есть ли более простой / более разумный способ сделать это?

1 Ответ

0 голосов
/ 10 августа 2010

# 1 это справедливое предположение, за исключением случаев, когда пользователь отправляется за границу.

# 2 / # 3 Для более надежной нормализации вам необходимо указать грубое местоположение пользователя. Вот код psudeo:

  • если число начинается с «+», оставьте его как
  • иначе получите текущую страну пользователя (см. это сообщение ):
    • , если используется код выхода страны , замените его на "+"
    • если начинается с кода страны, добавьте «+»
    • если начинается с одного «0», заменить его на «+»
    • иначе, предположим, что это местный номер, добавьте код города и код страны. Учитывая сложность этого, может быть проще предложить пользователю ввести некоторые данные, например, их текущий код города и код страны или их местоположение.
...