Secara terprogram mencari tahu dari mana asal toko aplikasi berasal?

8

Latar Belakang

Di aplikasi saya, saya memiliki tombol 'nilai saya'. Ini mengikuti jalur yang biasa - pengguna mengklik, itu memulai niat dan membuka daftar aplikasi di Play Store. Semua baik dan bagus. Sekarang saya ingin mencoba mendistribusikan aplikasi saya melalui toko aplikasi yang berbeda (misalnya Amazon), jadi jelas, jika pengguna menekan tombol 'nilai saya' saya tidak ingin itu membawa pengguna ke Google Play Store tetapi ke apa pun toko mereka mendapatkannya dari.

APK Untuk setiap toko

Ini mungkin, benar, tapi saya pikir ini akan menjadi mimpi buruk yang lengkap untuk dikelola (seperti membuat APK baru untuk setiap toko setiap kali saya mengeluarkan pembaruan baru.

Jadi saya mencari sesuatu seperti kode semu ini:

if(rate-me button pressed){

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

Dan seterusnya.......

Saya menduga ada cara (bahwa beberapa aplikasi pasti harus menggunakan) tetapi saya tidak tahu bagaimana cara melakukannya.

BungleBonce
sumber
1
Jadi ... mengapa tidak membuat aplikasi yang sama, tetapi putuskan berdasarkan beberapa sumber daya? Tidak akan menambahkan open_store.txt dan beralih berdasarkan isinya berfungsi?
wondra
Hai @wondra, saya tidak yakin saya mengerti maksud Anda? Maksud Anda membuat file teks dan kemudian menulis kepadanya ketika aplikasi diinstal (dengan nilai per-ditentukan, katakanlah 1 untuk Google Play, 2 untuk Amazon dll.) Lalu permintaan file itu ketika pengguna menekan rate-me tombol? Jika itu yang Anda maksud, itu bagus tapi pertanyaannya tetap sama, bagaimana saya secara program menentukan dari mana toko aplikasi itu diinstal sehingga saya bisa menulis ke file di tempat pertama? Aku mungkin salah paham denganmu !!
BungleBonce
5
Cukup gunakan 3 versi aplikasi Anda dengan kompilasi bersyarat; masing-masing dengan jalur yang berbeda. Jalur variabel / kode dapat berubah tergantung pada variabel yang dikompilasi.
Vaughan Hilts
@VaughanHilts, bisakah Anda menguraikan? Atau mungkin memposting ide lengkap sebagai jawaban? Terima kasih!
BungleBonce
1
Aku akan mengatakan hal yang persis sama dengan yang dikatakan Vaughan Hilts. Buat versi aplikasi yang berbeda untuk toko yang berbeda.
Panda Pajama

Jawaban:

7

Saya akan menganggap Anda sedang menulis di Jawa saat Anda menulis untuk Android, tetapi jika tidak, Anda dapat mencari metode dalam bahasa pilihan Anda untuk mendapatkan hasil yang sama. Karena Java tidak memiliki dukungan bawaan untuk kompilasi bersyarat, ada beberapa hal yang cukup mudah yang dapat Anda lakukan di sini; terkadang solusi berteknologi rendah adalah yang terbaik.

Menyebarkan aplikasi yang berbeda disusun dari kode yang berbeda untuk setiap toko aplikasi. Ini bisa sesederhana itu. Hanya memiliki string global (atau tidak, enkapsulasi di mana logika yang sesuai adalah) dan cukup berikan nilai, kompilasi, dan sebarkan. Sangat mudah.

Ini bisa berupa string, nilai enum atau integer. Tidak masalah - selama masing-masing nilai unik untuk setiap toko aplikasi. Saya akan menyarankan enum yang diketik dengan cepat dengan opsi seperti "Amazon", "GooglePlay", "XXXX", "ZZZZ", "YYYY". Tulis skrip untuk mengubah nilai ini atau meneruskan flag kompilasi menggunakan alat pihak ke-3 jika Anda ingin ini otomatis.

Mengotomasi itu

Jika Anda ingin mengambil langkah ini lebih jauh, parsing opsi sebagai file sumber daya . Tulis skrip, satu untuk setiap penyebaran. Memiliki file bernama "store.dat" dan tulis nilai toko yang sedang digunakan untuk file tersebut saat digunakan, jika Anda berada di Linux atau OSX itu bisa menjadi sesuatu yang sederhana seperti

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

Buat satu skrip untuk menjalankan semua skrip ini dalam langkah kunci dan Anda memiliki solusi otomatis yang tangguh.

Vaughan Hilts
sumber
Terima kasih untuk @VaughanHilts ini, punya beberapa pertanyaan, saat ini, saya memiliki nilai string yang disebut 'Pasar' yang berisi URL ke pasar, apakah ini yang Anda maksud, dan hanya mengubahnya ketika saya kompilasi, jadi Saya akan memiliki APK yang berbeda untuk setiap pasar?
BungleBonce
Tentu saja. :) Anda bisa melakukan ini dengan berbagai cara, peluru ajaib hanya memastikan Anda dapat mengidentifikasi jenis instal.
Vaughan Hilts
OK, sejauh ini begitu baik @VaughanHilts, saya mendapatkan bagian itu, yang saya masih belum jelas adalah bagian ini: "Tulis skrip untuk mengubah nilai ini atau meneruskan flag kompilasi menggunakan alat pihak ke-3 jika Anda ingin ini otomatis" - Saya hanya tidak jelas tentang apa yang dimaksud dengan ini - jika saya mengubah string pasar secara manual, apakah ada kebutuhan untuk bagian ini seperti ketika saya memulai niat saya, saya tetap meneruskan string pasar ke sana sehingga akan membuka pasar itu - terima kasih lagi, saya harap Anda dapat menjelaskan sedikit lebih detail sehingga saya mengerti dengan benar! :-) Cheers
BungleBonce
@ user22241 Hai, tidak perlu melakukan bagian itu kecuali Anda tidak ingin harus mengubah string dengan tangan untuk setiap build. Menulis skrip hanya akan membuat perubahan dan penyebaran otomatis. Kami dapat melanjutkan obrolan jika Anda memiliki pertanyaan lain.
Vaughan Hilts
Cool @VaughanHilts, saya punya pertanyaan konyol, bagaimana cara kerja chat di situs ini? Saya tidak pernah menggunakannya. Terima kasih!
BungleBonce
2

coba ini:

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
sumber