У меня есть приложение, которое использует контактные данные следующими способами:
- Чтобы отправить смс с клиента
- Чтобы отправить смс с нашего сервера
- Чтобы загрузить номер телефона пользователя в базу данных, где другие могут сопоставить его
Это хорошо работает в США, но у интернационализации есть ряд проблем. Вот мои предположения, чтобы заставить его работать:
# 1 - Отправка SMS с клиента проста. Используйте номер в адресной книге дословно (без нормализации) и дайте ОС разобраться в этом. Скорее всего, если они могут позвонить по указанному номеру, они могут отправить SMS (верно?)
# 2 / # 3 - Отправка SMS с сервера более сложна. Большинство SMS API требуют международных обозначений (префикс «+» и код страны), в то время как пользователь будет иметь в своем списке контактов различные локальные и глобальные телефонные номера с различными префиксами (код города, код страны и т. Д.). Так что здесь потребуется нормализация. Сопоставление номера телефона пользователя в базе данных также требует нормализации.
Чтобы нормализовать телефонные номера, я должен сначала решить, хотел ли пользователь указать глобальный номер, ища префиксы "+", "011" и "00". Если это так, я удаляю префикс, заменяю его на «+» и использую этот номер.
Если я думаю, что номер является локальным, я могу попытаться добавить код страны самостоятельно (эвристический, ненадежный). Это требует знания кода страны пользователя по умолчанию. На iPhone я могу получить предпочтительный регион пользователя (который можно выбрать), а также MCC и MNC пользователя (в зависимости от местоположения?). Я склоняюсь к выбранному пользователем коду страны, потому что, скорее всего, большинство его местных телефонных номеров будут из этой страны.
Я считаю, что это лучшее, что я могу сделать, не разбирая весь номер и не выясняя код города и другие компоненты. Я предполагаю, что большинство стран разрешают использовать «0» в качестве префикса для кода своей страны.
Имеет смысл? Есть ли более простой / более разумный способ сделать это?