6
votes

Comment l'application "Téléphone" affiche-t-elle les informations des contacts qui ne figurent pas dans le carnet d'adresses?

Contexte

Dans le " Téléphone < / strong> "de Google, il existe une option" Identification de l'appelant et spam ":

 entrez la description de l'image ici

Ainsi, si vous recevez un appel d'une personne ou d'une organisation qui ne figure pas dans le carnet d'adresses, mais qu'il est identifié d'une manière ou d'une autre, vous obtenez un nom pour lui, en tant que tel (appelé "+ 972-035283487"): / p>

 entrez la description de l'image ici

Depuis Android M (6.0 - API 23), les applications peuvent remplacer l'application téléphonique par défaut, puis fournir une interface utilisateur alternative lorsque vous appelez quelqu'un ou recevez un appel téléphonique, en étendant InCallService , comme démontré ici qui est basé sur ici .

Le problème

Je veux essayer d'afficher les mêmes informations que sur l'application Téléphone, c'est-à-dire le nom de la personne / société au cas où elle l'identifierait (et ce n'est pas dans le carnet d'adresses).

Ce que j'ai essayé

J'ai essayé de creuser les différentes choses que j'obtiens via l'API du composeur, mais j'ai échoué:

  1. Différents champs et fonctions de: android.telecom.Call < / strong> classe

  2. Il existe getDetails à l'intérieur de la classe Call, j'ai donc essayé de récupérer ce qu'il y avait à l'intérieur, et il y a aussi statusHints et" label " à l'intérieur de la " statusHints ". Aucun de ceux-ci ne contenait d'informations (retourné nul). La raison pour laquelle j'ai essayé de consulter "statusHints" est que c'est ce que je vois sur la documentation:

Contient une étiquette d'état et une icône affichées dans l'interface utilisateur en cours d'appel.

  1. Dans l'application "Téléphone", appuyez sur "En savoir plus" pour accéder à un site Web ( ici ) plein de liens qui, je pense, pourraient être des sources de données, mais je ne pense pas que l'application elle-même l'utilise. Au lieu de cela, je pense qu'il utilise quelque chose de Google.

Les questions

  1. Est-il possible d'obtenir ces informations CallerId? Si oui, comment?

  2. Comment fonctionne l'application Téléphone? Il est censé être open source, donc il doit y avoir quelque chose qui lui donne cette information, non? Le cloner obtiendrait-il d'une manière ou d'une autre cette information? Peut-être que Google a son propre service pour CallerID?

  3. À quoi servent les "callDetails" et "statusHints"? Que proposent-ils?


13 commentaires

Probablement à partir de la base de données des lieux de Google. Question similaire ici: stackoverflow.com / questions / 16463399 /…


avez-vous vérifié les données du fournisseur de contenu correspondant au numéro?


@ChristosThemelis Comment le savez-vous? L'avez-vous vérifié? Renvoie-t-il les mêmes informations?


@SarthakMittal Que voulez-vous dire? Quel fournisseur de contenu? Comment le vérifier?


@androiddeveloper Je remarque sur mon téléphone que le numéroteur indique que certains résultats que je vérifie, correspondent au nom qui apparaît sur Google. Je n'ai pas vérifié tous les résultats


@ChristosThemelis Mais pour tous les résultats que vous avez vérifiés, c'est pareil? De plus, l'utilisation de cette API coûte-t-elle de l'argent? Ou est-il disponible pour tous, gratuitement? Pouvez-vous s'il vous plaît partager votre projet sur Github (sauf pour la clé API, bien sûr)?


Non, ce n'est pas gratuit de demander l'API de lieux, je le sais car je l'utilise pour un autre projet. Quel code partager? Je parle du dailer Android par défaut sur Android 8 (téléphone avec chipset MTK)


@ChristosThemelis Peut-être que vous utilisez l'API qui nécessite de l'argent, et il y en a une qui est plus basique qui ne le fait pas (voir ici: Developers.google.com/places/web-service/usage-and-billing )? À propos du code, je veux dire le code de la façon dont vous l'avez testé, lorsque vous avez écrit "Je vérifie, correspond au nom qui apparaît sur Google Adresses"


@androiddeveloper Le test est simple. Le téléphone sonne, le numéro ne figure pas dans votre liste de contacts mais un nom s'affiche. Vérifiez le nom non payé s'il est égal chez Google. 5 chèques, 5 exactement les mêmes noms


@ChristosThemelis Mais quel est le code que vous avez utilisé pour vérifier sur Google Places sur l'application Android que vous avez créée?


@androiddeveloper L'autre projet n'est pas pertinent. Il recherche des lieux par catégorie près de chez vous, comme l'application Google "maps". Lorsque vous obtenez des informations sur un lieu, vous obtenez également le téléphone (s'il existe)


Cette application est-elle la même que TrueCaller?


@ManojPerumarath TrueCaller ne remplace actuellement pas l'interface utilisateur du numéroteur, la dernière fois que j'ai vérifié.


5 Réponses :


2
votes

Je pense que l'application téléphonique native d'Android utilise l'API de recherche de lieu de Google. Comme vous pouvez facilement rechercher un lieu par son numéro de téléphone et obtenir des détails sur le lieu comme le nom, l'identifiant du lieu, l'adresse_formatée et de nombreux autres champs que vous pouvez trouver dans la documentation

URL de requête : https://maps.googleapis.com/maps/api/place/findplacefromtext/ json

Méthode de requête : GET

Paramètres de requête de requête :

  • clé : clé API de votre application.
  • entrée : la saisie de texte spécifiant le lieu à rechercher (par exemple un nom ou un numéro de téléphone ).
  • inputtype : le type d'entrée. Cela peut être l'un des textquery ou phonenumber . Les numéros de téléphone doivent être en format international (préfixé par un signe plus ("+"), suivi du code du pays, puis le numéro de téléphone lui-même).

Exemple de demande : https: // maps .googleapis.com / maps / api / place / findplacefromtext / json? input =% 2B972035283487 & inputtype = phonenumber & fields = place_id, name & key = API_KEY_HERE

Exemple de réponse : p>

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

Remarque: Une telle API n'est pas disponible pour le moment dans le SDK Google places pour Android, mais vous pouvez utiliser l'API HTTP directement dans votre application ou vous pouvez créer une API dans le backend en tant que proxy vers l'API places. Je préfère la version ultérieure car dans la première solution, la clé API est déployée dans le code de l'application et les pirates pourraient décompiler l'APK et l'utiliser pour des raisons malveillantes. Pour des raisons de sécurité, vous devez limiter l'utilisation de la clé API à l'adresse IP du serveur au cas où vous utilisez la solution backend!


14 commentaires

L'avez-vous testé? Si je recherche le numéro de téléphone que j'ai indiqué sur la capture d'écran (écrit le numéro de téléphone au-dessus), affichera-t-il les mêmes informations? J'ai remarqué qu'il est disponible à la fois côté serveur et côté client, et qu'il peut coûter de l'argent, mais il semble que pour une utilisation de base, cela ne coûte rien: Developers.google.com/places/web-service/usage-and-billing . Je ne sais pas si c'est le bon site Web. Pouvez-vous s'il vous plaît expliquer à ce sujet (cela ne dit pas la différence sur le site Web, et ne montre pas combien cela coûte, peut-être différent pour le client vs le serveur ...) ...


Et à quoi servent "callDetails" et "statusHints"?


@androiddeveloper oui, j'ai pu obtenir les mêmes informations que vous avez à l'écran. Il vous suffit de créer un nouveau projet dans la console cloud Google et d'activer la facturation pour utiliser l'API, vous obtenez 300 $ pour l'essai afin que vous puissiez tester librement pendant un certain temps, puis après que la facturation s'applique, ce qui est vraiment compliqué en fonction des données. dont vous avez besoin de l'API. Vous pouvez trouver plus d'informations dans le même lien que vous avez partagé developer.google.com / places / service-web / utilisation-et-facturation


Je ne sais pas à quoi servent les variables "callDetails" et "statusHints"!


À propos des prix, si je regarde "SKU: Basic Data", cela semble gratuit, et les données me semblent plus que suffisantes pour ce qui est affiché sur l'application Téléphone, non? Pouvez-vous s'il vous plaît partager le code que vous avez utilisé pour le tester (sans la vraie clé API bien sûr)?


Je pense que vous avez raison à propos de la facturation, mais juste au cas où j'aurais mis en place un projet et le surveillerais et mettrais à jour la réponse une fois que j'en suis sûr! À propos de l'exemple de code, que pensez-vous exactement? car il s'agit d'une simple requête get et de quelques paramètres de requête! Si vous venez de cliquer sur la requête dans un navigateur fournissant une clé API valide, cela fonctionnera! Je ne veux pas écrire de code spécifique à la bibliothèque HTTP tbh


Je vois, donc cela pourrait être bien pour ceci: developer.android.com/training/volley/simple , non? Je ne savais pas que c'était une simple requête HTTP GET ... Je pensais qu'il y avait plus dedans ...


ouais, c'est une simple requête HTTP GET, soulignera davantage cela dans la réponse! Je conseille de ne pas mettre l'API directement dans l'application en code de production cependant pour des raisons de sécurité!


Attendez, je vois que vous avez mis à jour votre réponse: "Une telle API n'est pas disponible pour le moment dans le SDK Google places pour Android, mais vous pouvez créer une API dans le backend en tant que proxy". Que voulez-vous dire? J'ai besoin d'un proxy?! Pourquoi ? Pourquoi ne puis-je pas l'utiliser directement sur l'application? Et que voulez-vous dire qu'il n'est pas disponible pour le SDK?


Je veux dire qu'il existe déjà des méthodes implémentées dans le SDK comme la saisie semi-automatique et obtenir une place par id développeurs.google.com/places/android-sdk/intro mais cette méthode n'est pas implémentée dans le SDK, vous devez donc la gérer vous-même (faites la demande vous-même et gérez les problèmes de sécurité)!


Je vois. Je vous accorde la prime. Vous le méritez. Je vous donnerai +1 si vous découvrez quelles sont les fonctions sur lesquelles j'ai écrit. :)


À propos de la partie sécurité de la clé API, puisqu'il s'agit d'accéder via un simple GET, je ne pense pas qu'il soit possible de protéger en utilisant les méthodes que vous avez écrites si l'utilisation est directement dans l'application ("nom du package et votre keystore SHA- 1 signature ou l'adresse API "). Mais que se passerait-il si un hacker le prenait? Que pourraient-ils en faire, si c'est gratuit de toute façon? Ils pourraient utiliser ceux qui déclenchent la tarification? N'est-il pas possible de verrouiller le package gratuit?


oui, vous avez raison, je suppose que ce n'était pas clair si c'était en cas d'utilisation de la bibliothèque Android qui n'appartient pas à cette question de toute façon. J'ai édité la réponse pour être plus claire! À propos de la clé API, elle est attachée à votre carte de crédit et personne ne sait comment la facturation changerait à l'avenir, vous avez également des quotas que vous ne voulez pas dépasser même dans le niveau gratuit!


continuons cette discussion dans le chat .



0
votes

Je pense que Google a sa propre base de données d'appels de spam, et l'application Téléphone envoie le numéro à son serveur, et s'il y a une correspondance, elle affiche le nom.

Peut-être , si votre application peut lire les notifications, il est possible de récupérer ce nom. Essayez cet exemple et modifiez-le en fonction de vos besoins


4 commentaires

Je ne suis pas intéressé par de telles solutions de contournement. De plus, je veux savoir comment le faire lorsque l'application actuelle est le numéroteur par défaut, donc cela ne fonctionnera pas de toute façon ...


Et à quoi servent "callDetails" et "statusHints"?


Si c'est le composeur par défaut et que votre application peut lire les notifications, il devrait être possible d'obtenir le texte de cette notification. Je n'ai aucune idée de la deuxième partie que vous demandez


Si l'application est le numéroteur par défaut et affiche sa propre interface utilisateur, c'est celle qui est chargée d'afficher la notification, il n'est donc pas nécessaire de lire la notification car je suis celui qui la créera. Il n'y a pas non plus de données à lire, car c'est moi qui dois y mettre le texte.



1
votes

J'ai essayé de décompiler l'application Dialer, mais je n'ai pas trouvé les informations spécifiques sur la façon dont l'application le fait.

Mais cette information pourrait être utile. Veuillez le vérifier.

Dans l'application Dialer, il existe des classes SpamCallDatabase_Impl.smali SpamCallDatabase.smali et il existe un service en cours d'exécution dans le package com.google.android.gms app, qui fournit des listes de spam

https://auskunft.at/

https://www.dastelefonbuch.de/

et pour l'identifiant de l'appelant, vérifiez ce commit

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

Cela ressemble à une application de numérotation de lineage os et il utilise différents services pour la recherche de numéros de téléphone comme

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


2 commentaires

Donc, ce que vous dites, c'est que cela est caché aux développeurs et que ceux qui ont créé leur propre composeur utilisent un ensemble de services différent pour déterminer qui se cache derrière le numéro de téléphone? Étant donné que "lineage os" est assez gratuit, cela signifie-t-il que ces services sont également gratuits?


Et à quoi servent "callDetails" et "statusHints"?



0
votes

Google Application pour téléphone est fourni une fonctionnalité de Utiliser l'identifiant de l'appelant et la protection anti-spam par défaut. Certaines de ces étapes ne fonctionnent que sur Android 6.0 et versions ultérieures.

Lorsque vous passez ou recevez un appel avec l'identification de l'appelant et la protection anti-spam activées, vous pouvez voir des informations sur les appelants ou les entreprises qui ne figurent pas dans vos contacts ou des avertissements concernant les appels potentiels de spam.

Pour utiliser l'identification de l'appelant et la protection anti-spam, votre téléphone peut avoir besoin d'envoyer des informations sur vos appels à Google.

Désactiver ou réactiver l'identification de l'appelant et la protection anti-spam

L'identification de l'appelant et la protection anti-spam sont activées par défaut. Vous pouvez choisir de le désactiver.

Pour utiliser l'identification de l'appelant et la protection anti-spam, votre téléphone devra peut-être envoyer des informations sur vos appels à Google. Il ne contrôle pas si votre numéro s'affiche lorsque vous passez des appels.

L'identification de l'appelant par Google indique les noms des entreprises et des services avec une fiche Google My Business. Il recherche également des correspondances dans tous les répertoires contenant des informations sur l'appelant pour les comptes professionnels ou scolaires.

Selon votre solution, Google ne fournit pas ce type d'assistance comme vous le souhaitez. vous devez créer votre propre fonction et enregistrer les spams et autres coordonnées à vos côtés.


2 commentaires

Vous l'avez écrit comme si je demandais en tant qu'utilisateur comment l'utiliser. J'ai demandé comment utiliser l'API pour obtenir ces informations, pas comment l'activer sur le smartphone ... Je sais déjà comment activer un paramètre ...


comme je l'ai dit, Google ne fournit pas d'API pour obtenir ces informations



2
votes

Vous pouvez vérifier le fonctionnement d'applications telles que Truecaller pour cela. Truecaller agit sur un scénario de concessions mutuelles ... Vous voulez ces numéros inconnus, alors vous devez vous séparer des contacts de votre répertoire téléphonique. Les données proviennent des millions d'utilisateurs qui ont téléchargé l'application truecaller sur leurs téléphones intelligents. Dans le cadre du contrat d'utilisateur final, l'application truecaller demande à l'utilisateur d'autoriser l'accès au carnet d'adresses / aux contacts de l'utilisateur sur le téléphone intelligent. Ces données sont ensuite téléchargées par l'application sur les serveurs de l'entreprise. Après avoir parcouru plusieurs algorithmes de correspondance / affinage des données, ces données sont mises à la disposition de tous les utilisateurs de vrais appelants pour y effectuer des recherches.


1 commentaires

J'en suis conscient. J'ai posé des questions sur l'application de numérotation de Google.