Découvrez par programme l'origine de l'installation de l'App Store?

8

Contexte

Dans mon application, j'ai un bouton «évaluez-moi». Il suit le chemin habituel - l'utilisateur clique dessus, il démarre une intention et ouvre la liste de l'application sur le Play Store. Très bien. Maintenant, je souhaite essayer de distribuer mon application via différents magasins d'applications (Amazon par exemple), donc évidemment, si l'utilisateur clique sur le bouton `` Évaluez-moi '', je ne veux pas qu'il amène l'utilisateur au Google Play Store mais à n'importe quoi magasin où ils l'ont obtenu.

APK pour chaque magasin

C'est possible, c'est vrai, mais je pense que ce serait un cauchemar complet à gérer (comme créer un nouvel APK pour chaque magasin chaque fois que j'émets une nouvelle mise à jour.

Je cherche donc quelque chose comme ce pseudo code:

if(rate-me button pressed){

    if (from Google Play Store){
        Go to Google Play Store
    }
    else if (from Amazon Store){
        Go to Amazon Store
    }
}

Etc.......

Je suppose qu'il existe un moyen (que certaines applications doivent sûrement utiliser) mais je n'ai aucune idée de la façon de procéder.

BungleBonce
la source
1
Alors ... pourquoi ne pas créer la même application, mais décider en fonction de certaines ressources? L'ajout de open_store.txt et d'un commutateur basé sur le contenu ne fonctionnerait-il pas?
wondra
Salut @wondra, je ne suis pas sûr de comprendre ce que tu veux dire? Voulez-vous dire créer un fichier texte, puis y écrire lorsque l'application est installée (avec une valeur déterminée, disons 1 pour Google Play, 2 pour Amazon, etc.) Ensuite, interrogez ce fichier lorsque l'utilisateur frappe le taux. bouton? Si c'est ce que vous voulez dire, c'est bien mais la question serait toujours la même, comment pourrais-je déterminer par programme à partir de quel magasin l'application a été installée afin que je puisse écrire dans le fichier en premier lieu? Je vous ai peut-être mal compris !!
BungleBonce
5
Déployez simplement 3 versions de votre application avec une compilation conditionnelle; chacun avec un chemin différent. Le chemin de la variable / du code peut changer en fonction de la variable compilée.
Vaughan Hilts
@VaughanHilts pourriez-vous élaborer s'il vous plaît? Ou peut-être publier une idée complète comme réponse? Merci!
BungleBonce
1
J'allais dire exactement la même chose que Vaughan Hilts. Créez différentes versions de l'application pour différents magasins.
Panda Pyjama

Réponses:

7

Je vais supposer que vous écrivez en Java comme vous écrivez pour Android, mais si vous ne l'êtes pas, vous pouvez rechercher des méthodes dans la langue de votre choix pour obtenir le même genre de résultat. Comme Java n'a pas de support intégré pour la compilation conditionnelle, il y a des choses assez simples que vous pouvez faire ici; Parfois, la solution low-tech est la meilleure.

Déployez une application différente compilée à partir de code différent pour chaque magasin d'applications. Ça peut être aussi simple. Ayez simplement une chaîne globale (ou non, encapsulez-la là où se trouve la logique appropriée) et affectez-lui simplement une valeur, compilez et déployez. C'est si facile.

Il peut s'agir d'une chaîne, d'une valeur énumérée ou d'un entier. Cela n'a pas vraiment d'importance - tant que chaque valeur est unique par app store. Je suggère une énumération rapide et fortement typée avec des options telles que "Amazon", "GooglePlay", "XXXX", "ZZZZ", "YYYY". Écrivez des scripts pour modifier cette valeur ou passez des drapeaux de compilation à l'aide d'outils tiers si vous souhaitez que cela soit automatisé.

Automatiser

Si vous souhaitez aller plus loin, analysez l'option en tant que fichier de ressources . Écrivez des scripts, un pour chaque déploiement. Avoir un fichier appelé "store.dat" et écrire la valeur du magasin dans lequel il est déployé lors du déploiement, si vous êtes sous Linux ou OSX, cela pourrait être aussi simple que

echo "Google" > resources/store/store.dat
RUN COMPILATION STUFF HERE

Créez un script pour exécuter tous ces scripts à l'étape de verrouillage et vous disposez d'une solution robuste et automatisée.

Vaughan Hilts
la source
Merci pour ce @VaughanHilts, j'ai quelques questions, pour le moment, j'ai une valeur de chaîne appelée 'Market' qui contient l'URL du marché, est-ce le genre de chose que vous voulez dire, et changez-la simplement lorsque je compile, donc J'aurais un APK différent pour chaque marché?
BungleBonce
Chose sûre. :) Vous pouvez le faire de différentes manières, la solution magique consiste simplement à vous assurer que vous pouvez identifier le type d'installation.
Vaughan Hilts
OK, jusqu'ici tout va bien @VaughanHilts, je comprends cette partie, ce que je ne suis pas encore clair, c'est ce bit: "Écrivez des scripts pour changer cette valeur ou passez des drapeaux de compilation en utilisant des outils tiers si vous voulez que cela soit automatisé" - Je ne suis tout simplement pas clair sur ce que cela signifie - si je change manuellement ma chaîne de marché, y a-t-il un besoin pour cette partie, car lorsque je commence mon intention, je lui passe la chaîne de marché de toute façon afin d'ouvrir ce marché - merci encore, j'espère que vous pourrez expliquer un peu plus de détails donc je comprends bien! :-) Cheers
BungleBonce
@ user22241 Salut, il n'est pas nécessaire de faire cette partie à moins que vous ne vouliez pas avoir à changer la chaîne à la main pour chaque build. L'écriture de scripts rendrait simplement la modification et le déploiement automatiques. Nous pouvons continuer dans le chat si vous avez d'autres questions.
Vaughan Hilts
Cool @VaughanHilts, j'ai une question stupide, comment fonctionne le chat sur ce site? Je ne l'ai jamais utilisé. Merci!
BungleBonce le
2

essaye ça:

try {
    String packagename = context.getPackageName();
    final PackageManager pm = context.getPackageManager();
    PackageInfo pInfo = pm.getPackageInfo(packageName, PackageManager.GET_PERMISSIONS);
    String installerPackagenName = pm.getInstallerPackageName(packageName);
    if(installerPackagenName.equalsIgnoreCase("com.amazon.venezia")){
        //Go to Amazon Store
    } else if (installerPackagenName.equalsIgnoreCase("com.android.vending")){
        //Go to Google Play Store
    } else {

    }
} catch (PackageManager.NameNotFoundException e) {
    e.printStackTrace();
}
cgr
la source