Связывание телефонов по телефонным номерам в Android, вопрос архитектуры приложения - PullRequest
2 голосов
/ 02 апреля 2011

Я создаю это приложение, которое будет развивать отношения между пользователями в списке контактов телефона.Сейчас я нахожусь в точке, где, как только пользователь установит это приложение, он / она сможет отправить сообщение одному или нескольким людям из списка контактов.Если у человека из списка контактов не установлено мое приложение, он / она получит текстовое сообщение со ссылкой для просмотра сообщения, загрузите приложение, чтобы сообщения начали поступать в приложение, а не просто смс.Если они установили его, мне нужно, чтобы отправитель знал об этом и отправил уведомление C2DM о новом сообщении.У меня есть все функциональные возможности приложения, единственное, что осталось, это часть отношений ...

Я мог бы сделать это, зная, если пользователь с этим номером телефона запускает мое приложение, а затем свернуть ссылкус кем-то еще, список контактов ... но мне нужно иметь дело с международными номерами, пользователи, имеющие или не имеющие "1" перед своими номерами (в США), тогда у нас есть другая форма чисел в Европе и в других местах ...проблемы растут.Например, я нахожусь в США, и если у меня есть друг в моем списке контактов в Европе, его номер на моем телефоне будет включать некоторые коды стран, а номер, хранящийся на его телефоне, не будет.Я сталкиваюсь с проблемой проверки личности пользователя.Если я пойду по номеру телефона, который гарантирует уникальность, может возникнуть проблема с подделкой.Я могу проверить номер телефона, отправив текстовое сообщение из приложения на мой сервер, достаточно ли это безопасно?

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

Ваши мысли и рекомендации очень приветствуются и ценятся.

Спасибо и приятных выходных :) 1009 *

Ответы [ 2 ]

1 голос
/ 03 апреля 2011

Статистика и эвристика на помощь:

Идентификатор звонящего на многих телефонах (или на всех? - я не уверен) основан на последних 6 или 7 цифрах номера. Хотя он не является универсально уникальным в качестве полностью определенного номера (включая международные и региональные коды), он имеет чрезвычайно высокую вероятность быть достаточно уникальным для контактов конкретного человека. Это классический случай, когда в теории вы можете ошибаться, но на практике вы почти никогда не ошибаетесь. Количество ошибок на практике настолько исчезающе мало, что вы даже не подозреваете о том, что они могут произойти ...

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

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

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

Другая эвристика, которую вы можете использовать, основана на социальной диаграмме - мои контакты, вероятно, будут связаны между собой. Поэтому, если номер в моем списке контактов может принадлежать двум разным лицам в вашей базе данных, проверьте, есть ли у других людей в моем списке контактов, которые уже являются вашими пользователями, тот же номер в их списке контактов, и предпочитаете человека, который более тесно связан. для меня.

Наконец, в тех немногих случаях, когда вы не уверены, вы можете либо просто ошибиться в сторону безопасности (то есть проигнорировать это число), либо, возможно, ваше приложение попросит пользователя. Для каждого пользователя это может случиться в очень редких случаях, поэтому маловероятно, что ваши пользователи разозлятся на вас за то, что они их содержат.

0 голосов
/ 03 апреля 2011

Нормализуйте телефонные номера, чтобы они действовали на международном уровне.

В GSM международные телефонные номера начинаются с "+", за которым следует код страны.

Если вы найдете номер без «+», используйте информацию о стране, в которой находится человек, чтобы преобразовать номер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...