Нужна помощь в создании динамического детектора телефонных номеров?

#database #contacts #phone-number

#База данных #Контакты #телефонный номер

Вопрос:

Вот ситуация: пользователи моего приложения собираются создать свою учетную запись, используя только свой номер телефона (например, WhatsApp). Итак, нет имени пользователя, пароля или чего-то подобного. Я сохраню эти телефонные номера в своей базе данных после проверки, поэтому я знаю, что все сохраненные номера будут в одном определенном формате.

Однако сложность заключается в том, что я хочу, чтобы мое приложение просматривало контакты моих пользователей, чтобы узнать, есть ли у их контактов учетная запись на сервере моего приложения. Теоретически, я просто хотел, чтобы приложение проверило номер телефона и посмотрело, существует ли он в моей базе данных, потому что я почти уверен, что номер телефона — это единственное (уникальное) свойство контакта, к которому у моего приложения будет доступ (пожалуйста, поправьте меня, если я ошибаюсь).

Чего я боюсь, так это того, что каждый владелец смартфона хранит номер телефона контакта по-своему. Я имею в виду, что, например, один человек может сохранить номер телефона контакта «чистым способом», с кодом страны и региона и всем остальным, что должно быть в номере телефона, вот так: 1 xxx xxx xxxx (я из Нидерландов и я просто предполагаю, поэтому мои извинения всем американским читателям, если американский номер телефона выглядит НЕ так). Какой-нибудь другой человек может сохранить номер телефона своего контакта «быстрым способом», без каких-либо кодов страны или региона, например: xxx xxx xxxx (без кода страны) или даже xxx xxxx (без кода города).

Это уже было бы проблемой в одной стране (например, в США), не говоря уже о ситуации, в которой у кого-то есть контакты из других стран (с их собственными правилами кода города) в его телефоне. Контакт в списке контактов пользователя все еще может использовать мое приложение со своим номером телефона, но если этот человек сохранит номер телефона своего контакта «быстрым способом», мое приложение не сможет найти его в базе данных. Прямо сейчас я либо ищу альтернативное уникальное значение контакта, которое я также могу сохранить в своей базе данных, чтобы использовать его в качестве идентификатора (хотя я сильно сомневаюсь, что оно существует), либо, предпочтительно, способ сделать поиск приложения немного более динамичным, чтобы оно идентифицировало соответствующий номер телефона, даже если номер, сохраненный в списке контактов, не идентичен номеру телефона, хранящемуся в моей базе данных.

Вместо каких-то технических советов я бы предпочел услышать от кого-то, кто кое-что знает о телефонных номерах по всему миру. Например: было бы разумно просто искать последние 8 цифр телефонного номера контакта вместо этого, или это было бы рискованно с точки зрения возможного дублирования телефонного номера в другом месте в мире? Просто интересно, какой самый безопасный способ сделать это…

Кстати: приложение, которое я создаю, написано на Swift 3, и я буду получать доступ к контактам пользователя через платформу контактов Apple.

Комментарии:

1. Пожалуйста, скажите мне, что вы предупреждаете своих пользователей о том, что выкачиваете контактную информацию их друзей / семьи / коллег, прежде чем делать это?

2. @ceejayoz Я ничего и никого не перекачиваю. Единственное, что получает доступ к номерам контактов, — это приложение (используя собственное разрешение Apple), чтобы сравнить его с сохраненными данными. Он больше ничего не делает с номерами, то есть не сохраняет их и не передает кому-либо еще. Проще говоря, ни один человек (включая меня) никогда не будет иметь доступа к контактной информации пользователя. Конечно, я позволю своим пользователям выбирать, могут ли их контакты видеть, использует ли пользователь мое приложение, но в остальном я ничем не отличаюсь от любого другого социального приложения, совместимого с приглашением в мире.

3. @ceejayoz Или вы хотите сказать, что вам пришлось дать разрешение WhatsApp, чтобы любой из ваших контактов мог просто отправить вам сообщение WhatsApp с того момента, как вы создали профиль в этом приложении? Если вы это сделали, возможно, вы загрузили не то приложение.

Ответ №1:

Уникальные коды — сложная штука, особенно когда они основаны на реальных данных (которые, как правило, довольно шумные и с большим количеством исключений, которые вы можете придумать).

Я согласен, что «последние 8 цифр» были бы очень рискованными. Вместо этого я бы выяснил (или угадал), из какой страны родом пользователь, и всегда сохранял это вместе с номером телефона (даже если пользователь не выбирает его отображение).

Итак, допустим, что если у них есть адрес с указанием страны — тогда используйте код страны этой страны. Если у них этого нет, тогда укажите страну по умолчанию (часто используется USA, хотя я действительно ненавижу это (я из Австралии).

Имейте в виду, что вы все равно будете получать ошибки и исключения, но это означает, что вы можете сделать обоснованное предположение, совпадает ли 9123 4567 с ( 61) 9123 4567.

Также имейте в виду такие вещи, как:

  1. иногда несколько человек используют один и тот же номер телефона
  2. иногда у человека есть более одного телефонного номера

Комментарии:

1. Да, извините, я забыл упомянуть об этом, но да, я прошу своих пользователей указать свою страну, и я даже прошу указать регион на случай, если они откажутся от страны, в которой есть несколько кодов городов внутри этой страны (большинство из них так и делают). Тем не менее, это не решает мою проблему, потому что мне по-прежнему приходится искать номера КОНТАКТОВ, а не номера моих ПОЛЬЗОВАТЕЛЕЙ. Даже если кто-то из Нью-Йорка зарегистрируется в моем приложении, у него все равно может быть контакт, который живет либо в Париже, либо в Мумбаи (у обоих совершенно разные номера)…

2. Видите ли, мое приложение не имеет возможности узнать, в какой стране проживает чей-либо контакт, поэтому оно не знает, к какой стране относится номер телефона, который оно сравнивает. Я просто использую метод 7 цифр (поскольку это минимальная сумма для любого телефонного номера по всему миру). Сначала найдите последние 7 цифр, а затем посмотрите, есть ли какие-либо префиксы перед этими 7 цифрами, чтобы убедиться, что они совпадают.

3. Кстати, в ответ на два предупреждения, которые вы мне дали: я также сохраняю устройство, на котором установлено мое приложение, поэтому общий номер может запускать мое приложение только на одном устройстве одновременно. И несколько телефонных номеров не имеют значения, поскольку на самом деле я просто ищу номер в своей базе данных, а не контакт. Если бы я нашел соответствующий номер, все остальные номера этого контакта можно было бы просто проигнорировать.

4. «мое приложение не имеет возможности узнать, в какой стране проживает чей-либо контакт» да… вы можете только догадываться, основываясь на предложениях, которые я сделал (и вы уже упомянули). Вы могли бы добавить экран подтверждения для пользователя, запустившего приложение… но помимо этого вы действительно больше ничего не можете сделать.