2017-08-03 54 views
15

Co mamy do czynienia zopublikować prywatną aplikację Android dla wielu klientów

Mamy tę aplikację, które dystrybuujemy do naszych klientów w trybie offline mody (nie znaczy dodany do Play). Smak aplikacji dystrybuowany do każdego klienta jest prawie identyczny z odrobiną poprawki tu i tam. Wszyscy nasi klienci udostępniają tę aplikację swoim pracownikom do użytku. Zasadniczo jest to aplikacja Enterprise.

czym problem

Niedawno jeden z naszych klientów rozpoczęte za pomocą MDM (zarządzanie Mobility Device) narzędzie, które blokuje aplikacje, które nie zostały pobrane z Google Play. Oczywiście otrzymaliśmy od naszego klienta prośbę o sprawdzenie, czy możemy przesłać tę aplikację w Google Play, czy nie.

Ważne jest, że mamy ponad 100 klientów, a nazwa pakietu aplikacji podana dla każdego klienta jest w rzeczywistości taka sama. Więc to ta sama aplikacja z odrobiną regulacji tu i tam. Jeśli przejdziemy do opublikowania aplikacji w sklepie z zabawkami, możemy skończyć się chaosem (nie chcemy przesyłać 100 różnych aplikacji do sklepu z zabawkami - to jest po jednym dla każdego klienta). Z naszej strony przeprowadzamy optymalizację, aby wielu klientów mogło korzystać z tej samej aplikacji (ale nie możemy sprawić, by wszyscy ponad 100 klientów korzystali z tej samej aplikacji).

Na co patrzę?

Zacząłem przeglądać Android for Work (AFW), prywatne aplikacje Google, zarządzane Google Play i nadal trawię pliki. Dla mnie jednak wydawało się to bezpiecznym sposobem na wdrażanie/publikowanie aplikacji przez przedsiębiorstwa, które można pobierać tylko na określonych urządzeniach i pod określonym profilem (dzięki czemu są one oddzielone od osobistych aplikacji i danych użytkownika, na wypadek gdyby korzystały z tego samego telefonu do celów osobistych. i cel pracy).

Jakie rozwiązanie szukam?

  1. prywatnie wdrożyć aplikację (host go z Google lub prywatnie gościć ale wymienione z Google Play w obu przypadkach) i niech moi klienci dzielić tę aplikację ze swojego pracownika.

  2. Każda prywatna aplikacja dla każdego klienta powinna znajdować się na prywatnej, prywatnej wyspie o numerze . Chcę rozpowszechniać aplikację z tym samym pakietem o nazwie dla wszystkich moich klientów (Z tego, co przeczytałem do tej pory, to może nie być możliwe z Google Play, ale mam nadzieję, że ktoś może wskazać fakty jeśli czegoś mi brakuje).

+0

wydaje się być tu odpowiedzi https://support.google.com/googleplay/work/answer/6145139?hl=en –

+0

I https://developer.android.com/distribute/marketing-tools/alternative -distribution.html –

+0

Ponadto wiem, że to nie jest rozwiązanie, ale dlaczego dałeś każdej aplikacji tę samą nazwę pakietu? –

Odpowiedz

4

W oparciu o to, co powiedziałeś, brzmi to tak, jakbyś mógł rozwiązać ten problem dzięki zarządzaniu konfiguracją, zamiast wysyłać każdemu klientowi zupełnie oddzielne pakiety APK.

Google ma kanał prywatny, ale w oparciu o dokumentację wydaje się bardziej ukierunkowany na posiadanie pojedynczej listy członków (tj. Po przyznaniu dostępu do dostępu do całego kanału prywatnego), a nie na wysoce dostosowanym dostępie (np. określone osoby mają dostęp do określonych pozycji w kanale).

Alternatywa, którą proponuję: wszyscy klienci muszą pobrać ten sam plik APK. Podaj każdemu z nich "kod aktywacyjny" specyficzny dla klienta dla Twojej aplikacji.Gdy aplikacja uruchamia się po raz pierwszy, wywołuje usługę internetową i przekazuje jej swój kod aktywacyjny; po stronie serwera korzystasz z kodu aktywacyjnego, aby zidentyfikować klienta, a następnie przesłać dane o poprawnej konfiguracji do klienta. Następnie możesz rozpowszechnić ten sam plik APK dla wszystkich na swoim kanale prywatnym i skonfigurować go zdalnie po zainstalowaniu.

Główną zaletą tego schematu jest możliwość posiadania wielu konfiguracji dla organizacji. Po prostu daj klientowi wybór kilku kodów aktywacyjnych, z których każdy da im pewną konfigurację. Na przykład, jeśli masz aplikację, która jest używana zarówno przez pracowników portowych, jak i dozorców (a ja po prostu wyrzucam tutaj przykład), możesz dać robotom portowym jeden kod aktywacyjny i zatrzymać drugi kod aktywacyjny, a następnie możesz łatwo dać ich różne konfiguracje.

+1

To podejście jest również odpowiednie dla klientów zlokalizowanych w różnych lokalizacjach geograficznych, np. W krajach. Pomyśleliśmy, polecam to podejście. – Dun0523

1

Jeśli chcesz mieć tę samą nazwę pakietu, musisz zrobić coś takiego, jak zasugerował EJoshuaS: zarządzaj różnymi konfiguracjami w obrębie jednej wersji aplikacji. Nie możesz mieć więcej niż jednej aplikacji z tym samym pakietem wdrożonym w Google Play.

Jeśli jesteś otwarty na różne pakiety, możesz po prostu zmienić nazwę pakietu w Manifestu Androida dla każdego z nich i wydać ją jako inną aplikację. Będziesz musiał zmienić pakiet wszędzie, gdzie będziesz importować plik R, a będziesz musiał upewnić się, że wszystkie odwołania do klasy w twoim Manifeście zawierają całą ścieżkę klasy (<activity android:name="[full.package].MainActivity"> zamiast <activity android:name=".MainActivity">). To staje się dość mylące i jest straszne pod względem zarządzania konfiguracją, więc nie jest to ogólnie świetne rozwiązanie, ale może ci pomóc.

+0

Możesz zmienić nazwę pakietu APK bez zmiany nazw pakietów java. Nie musisz nic robić z plikiem manifestu. Po prostu utwórz wiele productFlavor dla każdego klienta i dla każdej z nich ustaw ID aplikacji. – fthdgn

1

Zacząłem przeglądać Android for Work (AFW), prywatne aplikacje Google, zarządzać Google Play i nadal trawić pliki.

Prawdopodobnie pasowałoby to do AFW.

Ale dla mnie to wyglądało tylko bezpieczny sposób dla przedsiębiorstw do wdrażania/Publikowanie aplikacji, które mogą być pobrane jedynie na konkretnych urządzeń i pod określonym profilu

to co za MDM robi tak, ale jest w tym coś więcej. W Android for Work masz także Managed Configurations, dzięki czemu możesz przekazać konfigurację aplikacji. Może to być użyte do zmiany adresu URL strony docelowej, itp.

To na pewno obsługuje twój drugi wymóg, ale wiem za mało, aby być pewnym tego pierwszego. Mimo że możesz prywatnie hostować i wdrażać aplikacje w Google Play for Work, nie wiem, jak rozprowadzić je prywatnie wśród wielu klientów.

Oczywistą korzyścią płynącą z używania tego interfejsu API Google jest to, że nie musisz samodzielnie budować. Również większość MDM obsługuje te interfejsy API Android for Work, dzięki czemu administrator domeny może hurtowo kupić aplikację i dystrybuować ją do pracowników. Spójrz na numer AppConfig Community, który pokazuje dostawców MDM, którzy włączyli te interfejsy API i sprawdzone metody.

Niezależnie od tego, co wybierzesz, zdecydowanie powinieneś dobrze obejrzeć system Android for Work, ponieważ opisywane przez Ciebie informacje są dokładnie tym, do czego są przeznaczone. Początkowa konfiguracja jest bolesna i nie ma zbyt wiele informacji o tym, jak to wszystko działa i gra razem, ale spędzanie kilku dni na próbie jej zrozumienia może być lepsze niż samo budowanie własnego rozwiązania zarządzanego, które następnie będziesz musiał utrzymuj też.

2

Dobrą, długie rozwiązanie:

nie używać tej samej nazwy pakietów dla różnych aplikacji. Utwórz projekt wielomodułowy, ustaw jeden moduł na rdzeń, współdzielone elementy i dodaj moduł dla każdego klienta, w którym możesz dostroić to, czego potrzebujesz i dynamicznie konfiguruj nazwę pakietu na podstawie typu kompilacji. W ten sposób możesz użyć tej samej nazwy pakietu dla twojego serwera CI i wszystkiego innego oraz mieć inną nazwę pakietu podczas zwalniania aplikacji.

Krótka obejście, które mogą pracować:

Opublikuj aplikację w zamkniętej wersji beta Google Play i wysłać zaproszenia tylko do tego klienta. W ten sposób może dystrybuować aplikację do swoich pracowników za pośrednictwem sklepu gier, a inni klienci nie zauważą, że nie mogę zapewnić, że zadziała, nie wiedząc, które narzędzie MDM jest skierowane, ale ponieważ aplikacje w kanale beta nie wymagają niepotwierdzonych uprawnień początkowych powinieneś być w porządku.

+0

Pierwsza opcja to nie ma w moim przypadku, ponieważ jest to istniejący projekt, który ewoluował w ciągu ostatnich 5 lat. Więc nie myślimy o reorganizacji tego. Warto spojrzeć na drugą opcję. Aktualizacja nastąpi po tym, jak tego spróbuję – Dibzmania

6

To jest moje rozwiązanie:

Tworzenie run-time dynamiczną aplikację uzyskać dane i pliki konfiguracyjne z back-end i sprawiają, że jego poglądy i dane z własnym identyfikatorem klienta.

Możesz utworzyć pojedynczą aplikację i przesłać ją do Google Play, ale powinieneś zarządzać swoimi klientami za pomocą identyfikatora klienta, dzięki czemu każda aplikacja działa oddzielnie. Ten identyfikator klienta jest unikalny i generowany na Twoich klientach. To rozwiązanie ma dwie strony. Strona Android i strona Serever.

1 - Android strona: Nasza aplikacja powinna mieć baseURL takiego w Stałe:

baseUrl = "http://yourCorporation.com/{clienId}/api/" 

a następnie wszystkie usługi wszystkim klientom korzystać z tej samej zawartości. clientId jest kluczowym punktem. Różnica w Twojej aplikacji klienckiej to clientId. Do generowania URL API-call należy zrobić coś takiego:

Constant.ClientId = scannedQRCode; 
url = baseUrl.replace("{client_id}",Contant.ClientId) + apiUrl ; 

Musisz utworzyć kod QR za swoimi klientami, które powinny zeskanowany w pierwszym uruchomieniu aplikacji. Dobrze jest wysłać QR-code po rejestracji do swojego (klienta klienta) email. Ten QR-code ma clientId. Dlatego każdy klient ma swoje własne usługi i naprawdę działa jako oddzielne wyspy, nawet jeśli chcesz zmienić adres serwera, możesz umieścić wszystkie baseUrl w QR-code, ale nie jest to zalecane, ponieważ musisz utworzyć serwer na klienta i to jest ból głowy .

Można nawet obsługiwać config i UI elementy Ciebie aplikacja z wywołaniem API config, która zwraca customConfigDto jako json tak:

public class CustomConfigDto { 

String colorPrimary ; 
String colroPrimaryDark ; 
String colorAccent ; 
int tabCounts; 

//and more... 


public String getColorPrimary() { 
    return colorPrimary; 
} 

public void setColorPrimary(String colorPrimary) { 
    this.colorPrimary = colorPrimary; 
} 

public String getColroPrimaryDark() { 
    return colroPrimaryDark; 
} 

public void setColroPrimaryDark(String colroPrimaryDark) { 
    this.colroPrimaryDark = colroPrimaryDark; 
} 

public String getColorAccent() { 
    return colorAccent; 
} 

public void setColorAccent(String colorAccent) { 
    this.colorAccent = colorAccent; 
} 

public int getTabCounts() { 
    return tabCounts; 
} 

public void setTabCounts(int tabCounts) { 
    this.tabCounts = tabCounts; 
} 
} 

i uczynić swoje poglądy przez ten konfiguracjach. Wszystko to działa osobno dla każdej aplikacji według ich clientId. Preferuję kod QR, ponieważ jest bardzo poręczny i elegancki i pasuje do twojego przypadku, jednak możesz wprowadzić ten identyfikator klienta na wiele innych sposobów. This to jedna z najlepszych darmowych i prostych usług generujących kody QR, a this to jedna z najlepszych bibliotek skanerów kodów QR dla Androida.

2 - Strona serwera: Musisz obsługiwać krok 1 po stronie serwera i to bardzo proste. Możesz mieć wywołania podmiotu: Klient, który mają wszystkie inne podmioty.Ponieważ wszystkie dane powinny być przechowywane w jednym miejscu, ale oddzielone od klientów. Można również mapować API jak to na wiosnę:

@RequestMapping(value = "http://yourCorporation.com/{clienId}/api/customers", method = RequestMethod.GET) 
    Customers getCustomers(@PathVariable("clienId") Long clientId) { 
     return customerService.findCustomerByClientId(clientId); 
    } 
0

Google Play pozwala teraz deweloper opublikować aplikację prywatnie do 20 zarządzanych organizacji Play (lub przedsiębiorstw). Aby to zrobić (instrukcje skopiowane z help center):

  • Zaloguj się do Google Play Console.
  • Przejdź do Ceny & Dystrybucja> Programy użytkownika> Zarządzane Google Play.
  • Sprawdź Włącz zaawansowane zarządzane pole funkcji Google Play:.
  • Sprawdź adres Prywatnie kieruj tę aplikację na listę organizacji pod numerem.
  • Kliknij opcję Wybierz organizacje.
  • Dla każdej organizacji, dla której chcesz opublikować aplikację, wprowadź identyfikator organizacji i opis (lub nazwę), a następnie kliknij przycisk Dodaj. Możesz wprowadzić do 20 organizacji na aplikację.