Как сказал Пэт, хотя на SIM-карте есть API для доступа к слоту с "собственным номером", в моем опыте этот слот заполнен редко.
Обычная стратегия получения номера телефона для подключенного приложения - отправка SMS в процессе проверки. Или:
Программно отправляйте SMS с телефона на ваш сервер (множество хороших провайдеров межсетевых соединений для SMS-шлюзов). SMS придет на ваш сервер «с» номера телефона (или SIM-карты, если быть более точным). Конечно, SMS должно содержать некоторый токен, чтобы сервер мог связать его с данным сеансом / пользователем.
Преимущество этого заключается в том, что вам не нужно, чтобы пользователь вводил свой номер телефона (что сопряжено с небольшими трудностями, поскольку мало кто понимает, как форматировать числа в формате E.164). Одним из недостатков является то, что этот процесс может стоить вашим пользователям денег (одно SMS).
Попросите пользователя ввести свой номер телефона (веб-сайт или трубку) и подключиться к вашему серверу, передав этот номер телефона. Затем попросите трубку дождаться SMS-сообщения, отправленного с вашего сервера. Если это SMS действительно пришло, вы подтвердили правильность и действительность введенного ими номера телефона. Очевидным недостатком является то, что это зависит от того, правильно ли пользователь вводит свой номер - опять же, учитывая множество способов написания телефонных номеров по всему миру, это не так тривиально, как звучит для нормализации номеров в E.164 ....
Увы, ни один из этих методов не является пуленепробиваемым, особенно потому, что SMS - это не связанный транспорт. В зависимости от загрузки сети GSM, загрузка вашего провайдера шлюза, фазы луны и направления отправки SMS-сообщения может занять от секунды до месяца (да, у меня есть опыт последнего). Среднее время доставки часто указывается в секундах, но вам нужно поиграть с тайм-аутом операции и, возможно, придется настроить его на основе географической сети и сети GSM.
[И нет, не полагайтесь на отчеты о доставке - даже более ненадежные, чем доставка SMS]