Как приложение "Телефон" отображает информацию о контактах, которых нет в адресной книге?

Фон

В приложении Google " Телефон " есть опция "Идентификатор звонящего и спам":

Итак, если вам звонит кто-то, которого нет в адресной книге, но он каким-то образом идентифицирован, вы получите имя для него, как таковое:

Начиная с Android M (6.0 - API 23), приложения могут заменить телефонное приложение по умолчанию, а затем также предоставлять альтернативный пользовательский интерфейс при вызове кого-либо или телефонном звонке, расширяя класс InCallService, как показано здесь, который основан на этом.

Эта проблема

Я хочу попытаться отобразить ту же информацию, что и в приложении "Телефон", то есть имя человека / компании, если оно идентифицировало ее (и ее нет в адресной книге).

Что я пробовал

Я попытался покопаться в различных вещах, которые я получаю через API номеронабирателя, но не получилось:

  1. Различные поля и функции: android.telecom.Call класса

  2. Внутри класса Call есть getDetails, поэтому я попытался получить то, что внутри, а также есть statusHints и " label " внутри " statusHints ". Ни у одного из них не было никакой информации (возвращено ноль). Причина, по которой я попытался взглянуть на "statusHints", заключается в том, что именно это я вижу в документах:

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

Вопросы

  1. Можно ли получить эту информацию CallerId? Если так, то как?

  2. Как приложение "Телефон" делает это? Он должен быть с открытым исходным кодом, поэтому должно быть что-то, что дает ему эту информацию, верно? Будет ли клонирование это как-то получить эту информацию? Может быть, у Google есть собственный сервис для CallerID?

  3. Для чего используются "callDetails" и "statusHints"? Что они предоставляют?

0 ответов

Я считаю, что родное приложение Android для телефона использует API поиска мест от Google. Поскольку вы можете легко найти место по номеру телефона и получить информацию о месте, такую ​​как имя, идентификатор места, formatted_address и многие другие поля, которые вы можете найти в документации

URL запроса: https://maps.googleapis.com/maps/api/place/findplacefromtext/json

Метод запроса: GET

Параметры запроса запроса:

  • ключ: ключ API вашего приложения.
  • Ввод: текстовый ввод, указывающий место для поиска (например, имя или номер телефона).
  • inputtype: тип ввода. Это может быть один из текстовых запросов или номеров телефонов. Номера телефонов должны быть в международном формате (с префиксом "плюс" ("+"), после которого следует код страны, а затем сам номер телефона).

Пример запроса: https://maps.googleapis.com/maps/api/place/findplacefromtext/json?input=%2B972035283487&inputtype=phonenumber&fields=place_id,name&key=API_KEY_HERE

Пример ответа:

{
   "candidates" : [
      {
         "name" : "מלך העופות",
         "place_id" : "ChIJ78ko1zBKHRURpwbgUdWc4nU"
      },
      {
         "name" : "Of Yaakov",
         "place_id" : "ChIJv3myn4FMHRURUGffcXgxKuw"
      }
   ],
   "status" : "OK"
}

Примечание. Такой API в настоящее время недоступен в Google размещает SDK для Android, но вы можете использовать HTTP API непосредственно в своем приложении или создать API в бэкэнде в качестве прокси для API мест. Я предпочитаю более позднюю версию, поскольку в первом решении ключ API развернут в коде приложения, и хакеры могут декомпилировать APK и использовать его по злонамеренным причинам. Из соображений безопасности вы должны ограничить использование ключа API IP-адресом сервера, если вы используете бэкэнд-решение!

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

Но эта информация может быть полезной. Пожалуйста, проверь это.

В приложении Dialer есть классы SpamCallDatabase_Impl.smali SpamCallDatabase.smaliи в пакете com.google.android.gms работает служба, предоставляющая списки спама

com.google.android.gms/.telephonyspam.sync.SpamListSyncTaskService 

и для идентификатора вызывающего абонента проверьте этот коммит

https://gitlab.e.foundation/e/os/android_packages_apps_Dialer/commit/420eb901ed1d64fdaf055cde4cc46d7a5c0b42fc

Это выглядит как приложение для набора номера lineage os и использует разные сервисы для поиска номера телефона, например

https://auskunft.at/

https://www.dastelefonbuch.de/

Я полагаю, что у Google есть своя собственная база данных о спам-звонках, и приложение "Телефон" отправляет номер на свой сервер, и в случае совпадения показывает имя.

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

Для этого вы можете проверить работу таких приложений, как Truecaller. Truecaller действует по сценарию "давай и бери"... Вы хотите, чтобы эти неизвестные номера затем были разделены с контактами вашей телефонной книги. Теперь, очевидно, каждый, кто установил приложение, сдал свою телефонную книгу. Данные получены из миллионов пользователей, которые загрузили приложение truecaller на свои смартфоны. В рамках соглашения с конечным пользователем приложение truecaller просит пользователя разрешить доступ к адресной книге / контактам пользователя на смартфоне. Эти данные затем загружаются приложением на серверы компании. После прохождения нескольких алгоритмов сопоставления / уточнения данных, эти данные становятся доступными для поиска среди всех пользователей по-настоящему.

В приложении Google Phone по умолчанию предусмотрена функция Использовать идентификатор звонящего и защиту от спама. Некоторые из этих шагов работают только на Android 6.0 и выше.

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

Чтобы использовать идентификатор звонящего и защиту от спама, вашему телефону может потребоваться отправить информацию о ваших звонках в Google.

Выключите или снова включите идентификацию вызывающего абонента и защиту от спама

Идентификатор звонящего и защита от спама включены по умолчанию. Вы можете отключить его.

Чтобы использовать идентификатор звонящего и защиту от спама, вашему телефону может потребоваться отправить информацию о ваших звонках в Google. Он не контролирует, показывает ли ваш номер, когда вы звоните.

Идентификатор вызывающего абонента от Google показывает названия компаний и служб, перечисленных в Google My Business. Он также ищет совпадения в любом каталоге, в котором отображается информация о вызывающем абоненте для рабочих или школьных учетных записей.

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

Другие вопросы по тегам