53 votes

Détecter si l'application a été téléchargée depuis le Google Play Store

Je possède une bibliothèque Android qui envoie des données à un serveur de test et un serveur de production. J'aimerais que les développeurs utilisant cette bibliothèque utilisent le serveur de test lors du développement, et le serveur de production lorsque l'application est téléchargée depuis le marché Android.

Est-il possible pour une application de savoir d'où elle provient (Marché ou hors Marché) ? Je suppose que l'on pourrait détecter la présence du fichier JAR signé.

37voto

maximon Points 356

Oui, vous pourriez utiliser la signature pour cela. Si vous utilisez une clé de débogage pour signer votre application pendant le développement et une clé de sortie lorsque vous téléchargez votre application sur le marché, vous pouvez vérifier la signature avec laquelle l'application a été signée et en fonction de cela utiliser un serveur de test ou de production. Voici un petit bout de code pour lire la signature de votre application :

    try {
        PackageManager manager = context.getPackageManager(); 
        PackageInfo appInfo = manager.getPackageInfo(
            VOTRE_NOM_DE_PACKAGE, PackageManager.GET_SIGNATURES);

        // Maintenant, testez si la première signature correspond à votre clé de débogage.
        boolean shouldUseTestServer = 
            appInfo.signatures[0].toCharsString().equals(VOTRE_CLE_DE_DEBUG);

    } catch (NameNotFoundException e) {
        // Exception attendue qui se produit si le package n'est pas présent.
    }

VOTRE_NOM_DE_PACKAGE doit être quelque chose comme 'com.wsl.CardioTrainer'. Il doit s'agir du nom de package que vous avez utilisé dans votre AndroidManifest.xml. Bonne chance

marque

10voto

Phil Points 11964

À partir de l'API 5, vous pouvez utiliser PackageManager.getInstallerPackageName(String). À partir de la documentation :

Récupère le nom du package de l'application qui a installé un package. Cela identifie à partir de quel marché le package provient.

Pour obtenir le package du Google Play Store, cet article peut vous aider.

3voto

snctln Points 8687

De ce que je peux dire, il n'y a rien que l'application Market ne fasse pour "marquer" une application afin de dire qu'elle a été téléchargée depuis le marché.

J'ai vu cette question abordée d'une manière différente par une autre bibliothèque Android. Le SDK Android AdMob est gratuit à télécharger et à utiliser tel que décrit sur leur wiki. Cette bibliothèque sert des publicités, donc elles ont le même désir de pouvoir déterminer si l'application en cours d'exécution est testée par le développeur ou si elle est utilisée "dans la nature". Leur approche a été de demander au développeur de définir un attribut "testing" dans le XML ou d'appeler la fonction "setTesting(boolean)" de leurs bibliothèques pour indiquer à la bibliothèque quelles publicités servir. C'est évidemment une approche plus manuelle qui repose sur le développeur pour changer une ligne de code ou de XML avant de publier.

1voto

Josef Pfleger Points 37003

Vous pourriez définir par défaut votre configuration sur l'environnement de production et utiliser une Instrumentation personnalisée qui définit la configuration sur l'environnement de test. L'instrumentation devrait être supprimée avant la publication sur le marché Android.

0voto

davenpcj Points 3424

Peut-être pourriez-vous ajouter un paramètre à votre application pour le "mode développeur".

Une autre possibilité, serait de lui faire rechercher un fichier spécial ou un fichier de configuration sur la carte SD, et de s'appuyer dessus.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X