Scopri a livello di codice da quale installazione di app store è nata?


8

sfondo

Nella mia app, ho un pulsante "votami". Segue il solito percorso: l'utente fa clic, avvia un'intenzione e apre l'elenco dell'app sul Play Store. Tutto bene. Ora desidero provare a distribuire la mia app tramite app store diversi (ad esempio Amazon), quindi, ovviamente, se l'utente preme il pulsante "votami" non voglio che porti l'utente sul Google Play Store ma a qualunque cosa negozio da cui l'hanno preso.

APK per ogni negozio

Questo è possibile, vero, ma penso che sarebbe un incubo completo da gestire (come la creazione di un nuovo APK per ogni negozio ogni volta che emetto un nuovo aggiornamento.

Quindi sto cercando qualcosa come questo pseudo codice:

if(rate-me button pressed){

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

E così via.......

Immagino che ci sia un modo (che alcune app devono sicuramente usare) ma non ho idea di come procedere.


1
Quindi ... perché non creare la stessa app, ma decidere in base a qualche risorsa? L'aggiunta di open_store.txt e lo switch in base al contenuto non funzionerebbe?
Wondra,

Ciao @wondra, non sono sicuro di aver capito cosa intendi? Vuoi dire creare un file di testo e poi scrivergli quando l'app è installata (con un valore determinato, diciamo 1 per Google Play, 2 per Amazon ecc.) Quindi interroga quel file quando l'utente preme il rate-me pulsante? Se è questo che intendi, va bene, ma la domanda sarebbe sempre la stessa, come potrei determinare a livello di codice da quale archivio è stata installata l'app in modo da poter scrivere sul file in primo luogo? Potrei averti frainteso però !!
BungleBonce,

5
Distribuisci 3 versioni della tua app con compilazione condizionale; ognuno con un percorso diverso. Il percorso variabile / codice può cambiare in base alla variabile compilata.
Vaughan Hilts,

@VaughanHilts potresti approfondire per favore? O forse pubblicare un'idea completa come risposta? Grazie!
BungleBonce,

1
Stavo per dire esattamente lo stesso di Vaughan Hilts. Crea diverse versioni dell'app per diversi negozi.
Panda Pajama,

Risposte:


7

Suppongo che stai scrivendo in Java mentre scrivi per Android, ma se non lo sei puoi cercare i metodi nella tua lingua preferita per ottenere lo stesso tipo di risultato. Dato che Java non ha un supporto integrato per la compilazione condizionale, ci sono alcune cose abbastanza facili che puoi fare qui; a volte la soluzione a bassa tecnologia è la migliore.

Distribuisci un'app diversa compilata da un codice diverso per ogni app store. Può essere così semplice. Basta avere una stringa globale (o no, incapsularla dove si trova la logica appropriata) e assegnarle semplicemente un valore, compilare e distribuire. È così facile

Può essere una stringa, un valore enum o un numero intero. Non importa, a condizione che ogni valore sia unico per app store. Suggerirei una rapida enumerazione fortemente tipizzata con opzioni come "Amazon", "GooglePlay", "XXXX", "ZZZZ", "YYYY". Scrivere script per modificare questo valore o passare i flag di compilazione utilizzando strumenti di terze parti se si desidera che questo sia automatizzato.

Automatizzandolo

Se vuoi fare un ulteriore passo avanti, analizza l'opzione come file di risorse . Scrivi gli script, uno per ogni distribuzione. Avere un file chiamato "store.dat" e scrivere il valore dell'archivio che viene distribuito nel file quando viene distribuito, se sei su Linux o OSX potrebbe essere qualcosa di semplice come

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

Crea uno script per eseguire tutti questi script in fase di blocco e hai una soluzione affidabile e automatizzata.


Grazie per questo @VaughanHilts, ho alcune domande, al momento, ho un valore di stringa chiamato 'Market' che contiene l'URL per il mercato, è questo il tipo di cosa che intendi e cambiarlo quando lo compilo, quindi Avrei un APK diverso per ogni mercato?
BungleBonce,

Cosa certa. :) Puoi farlo in vari modi, il proiettile magico sta solo assicurando di poter identificare il tipo di installazione.
Vaughan Hilts,

OK, finora tutto bene @VaughanHilts, ho quella parte, quello che non ho ancora chiarito è questo bit: "Scrivi script per cambiare questo valore o passa flag di compilazione usando strumenti di terze parti se vuoi che questo sia automatizzato" - Non sono chiaro su cosa si intenda con questo - se cambio manualmente la mia stringa di mercato, c'è qualche necessità per questa parte come quando inizio il mio intento, gli passo comunque la stringa di mercato in modo da aprire quel mercato - grazie ancora, spero che tu possa spiegare un po 'più in dettaglio in modo da capire correttamente! :-) Saluti
BungleBonce

@ user22241 Ciao, non c'è bisogno di fare quella parte a meno che tu non voglia cambiare la stringa manualmente per ogni build. Scrivere script renderebbe automatici la modifica e la distribuzione. Possiamo continuare in chat se hai altre domande.
Vaughan Hilts,

Cool @VaughanHilts, ho una domanda stupida, come funziona la chat su questo sito? Non l'ho mai usato. Grazie!
BungleBonce,

2

prova questo:

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();
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.