Śledzenie użytkowników — co wiedzą o nas aplikacje?

Paweł Dedio Programowanie 2018-12-01

Śledzenie użytkowników jest tematem, który ostatnio stał się niesamowicie popularny. Mnóstwo afer z wyciekiem danych wywołało falę powszechnego oburzenia — każdy użytkownik zaczął bardziej troszczyć się o swoją prywatność. Musicie jednak mieć świadomość, że praktycznie każda aplikacja śledzi Was w pewien sposób, lecz nie zawsze oznacza to coś złego. Rozsiądźcie się wygodnie, zaczynamy kolejny odcinek naszej serii!

Dlaczego programiści nas śledzą?

To, że Google, Facebook i inni giganci śledzą nas w celach reklamowych, jest raczej powszechnie znanym faktem. Jednak po co śledzą nas nawet najprostsze aplikacje? Najkrótsza odpowiedź to: w celu usprawnienia swojej aplikacji. Podczas tworzenia aplikacji możemy przetestować wiele rzeczy, ale nigdy nie dowiemy się w jaki sposób użytkownicy będą jej używać. Nie możemy przewidzieć ze stuprocentową dokładnością, które funkcjonalności będą mniej, a które częściej używane.

No dobrze, ale po co programistom takie informacje? Dzięki danym zebranym od użytkowników możemy lepiej koncentrować się na istotnych kwestiach z perspektywy odbiorcy naszej aplikacji. Po co tracić czas na rozwijanie jakiejś funkcjonalności, z której nikt nie korzysta? W tym czasie możemy zająć się naprawianiem błędów, które występują u większości użytkowników.

Na czym polega śledzenie błędów?

W poprzednim akapicie wspomniałem o naprawianiu błędów, ale skąd w ogóle wiadomo o jakiś błędach? Podstawowym narzędziem, które dodajemy do aplikacji przed jej wydaniem, jest narzędzie do zbierania informacji o błędach naszej aplikacji. Zasada jego działania jest prosta — za każdym razem, gdy nasza aplikacja natrafi na jakiś błąd, narzędzie to zbiera informacje dotyczące aktualnego urządzenia oraz tego błędu i wysyła je na zewnętrzny serwer. Dzięki temu programista jest powiadamiany o wystąpieniu błędu i ma niezbędne informacje do jego lokalizacji. Jakie to informacje? Zależy od narzędzia, ale przeważnie są to: model telefonu, wersja aplikacji, wersja systemu Android, ilość wolnej pamięci oraz zrzut stosu wraz z informacją o wyjątku (błędzie). Nie musisz się obawiać o swoją prywatność — w większości przypadków narzędzia te nie udostępniają żadnych danych, które pozwalałyby na zidentyfikowanie konkretnej osoby. Z perspektywy programisty takie dane są niesamowicie cenne i bez nich tworzenie stabilnych aplikacji byłoby niesamowicie trudne.

Przykładowy raport o błędzie, który wystąpił u jednego z użytkowników.

W jaki sposób programista analizuje ruch w aplikacji?

Do stworzenia dobrej aplikacji oprócz powiadomień o błędach potrzebujemy także informacji o zachowaniu użytkowników. Do tego również są odpowiednie narzędzia. Zasada działania też jest dość prosta — w wybranych momentach wysyłamy z naszej aplikacji pewne informacje wprost na serwer przetwarzający dane. Przeważnie możemy wysyłać dwa rodzaje zdarzeń, otworzenie ekranu oraz wykonanie jakiejś akcji. Zdarzenie o otworzeniu ekranu wysyłamy po to, aby znać kontekst, w jakim dana akcja zostanie wykonana. Natomiast zdarzenia z akcjami to może być na przykład kliknięcie przycisku lub zakup przedmiotu w grze. Dzięki temu możemy sprawdzać różne scenariusze. Przykładowo ilu użytkowników kupi przedmiot po odwiedzeniu ekranu informującego o wielkiej promocji. Jak to wygląda z perspektywy programisty? Większość narzędzi do analizy ruchu jest bardzo prosta w obsłudze. Po prostu wywołujemy odpowiednią metodę z udostępnionej biblioteki wraz z informacjami, które nas interesują.

Czy mamy czego się obawiać?

Wszystko zależy od programisty, jednak jest sporo powodów do obaw. O ile przy śledzeniu błędów raczej nikt nie wysyła informacji o konkretnym użytkowniku, tak przy analizie ruchu już mamy pełną dowolność. Jesteście zdani jedynie na łaskę programisty — to on decyduje jakie informacje przesyła. Dobra wiadomość jest taka, że są to wyłącznie dane, które sami wcześniej udostępnicie. Przykładowo aplikacja nie może wysyłać na serwer waszych zdjęć z galerii lub kontaktów, o ile nie udzielicie jej takiego pozwolenia. Musicie jednak być świadomi, że nawet jeśli nie udzielicie aplikacji zgody na lokalizację, to właściciele aplikacji będą mieć do niej dostęp. Na szczęście nie jest to dokładna lokalizacja i nie da się jej przypisać do konkretnego użytkownika. Tutaj muszę pochwalić Google, bo jeszcze kilka lat temu sam pisałem aplikację, która po wciśnięciu przycisku wysyłała informacje o dokładnej lokalizacji użytkownika wraz z jego mailem, mimo że nie wymagałem żadnego pozwolenia. Teraz coś takiego nie jest możliwe.

Zrzut ekranu z Firebase Analytics (usługa Google do śledzenia). Mamy dostęp jedynie do miast, w jakich użytkownicy używają naszej aplikacji.

Czy to wszystko?

Niestety nie. Wcześniej pisałem jedynie o wykorzystaniu narzędzi stworzonych do analizowania ruchu w naszej aplikacji. Nikt jednak nie broni programiście napisać swoich własnych mechanizmów do śledzenia. Tutaj radzę ostrożnie przydzielać pozwolenia różnym aplikacją i wyłączać je, gdy nie są już potrzebne. Przykładowo każdy może napisać aplikację, która po otrzymaniu pozwolenia na dostęp do kontaktów prześle je wszystkie na zewnętrzny serwer. To samo można robić z naszymi plikami, lokalizacją czy nawet głosem z mikrofonu. Brzmi bardzo groźnie, jednak nie jest to częste zjawisko. Jednak jeśli widzicie, że jakaś z pozoru prosta aplikacja zużywa strasznie dużo baterii lub pakietu internetowego, to powinniście rozważyć jej usunięcie, bo jest bardzo prawdopodobne, że może wysyłać dużo danych naruszających Waszą prywatność. Przed instalacją warto też poczytać opinie innych użytkowników — często można tam znaleźć informacje o podejrzanym działaniu.

 Jak to oceniać?

Tak jak pisałem na samym początku, śmiało możemy założyć, że śledzi nas w większym lub mniejszym stopniu jakieś 90% aplikacji dostępnych w Sklepie Play. Jednak nie zawsze musi oznaczać to coś strasznego, w większości przypadków są to zanonimizowane dane dostarczające informacji o tym, w jaki sposób poruszamy się po aplikacji. Dzięki takim danym programista wie, w jakim kierunku rozwijać swoją aplikację i co należy poprawić. Informacja zwrotna od realnych użytkowników jest bezcenną wiedzą z perspektywy każdego twórcy aplikacji. Z drugiej strony należy stanowczo potępić wszelakie przejawy naruszania naszej prywatności. Mam na myśli ciężkie przypadki, takie jak wysyłanie naszych kontaktów lub nagrań na zewnętrzne serwery w celach zarobkowych.

Podsumowując — zbieranie anonimowych danych nie jest niczym złym, bo służy jedynie rozwojowi aplikacji. Nie możemy jednak godzić się na ingerowanie w naszą prywatność. Pamiętajmy również o pozostawianiu opinii o aplikacjach w Google Play, autorzy na pewno będą wam za to wdzięczni.

To już koniec na dzisiaj. Mam nadzieję, że rozwiałem część waszych wątpliwości i będziecie teraz spać spokojniej 😉 Widzimy się za tydzień, gdzie opowiem, co wpływa na rozmiar aplikacji androidowej, pamiętajcie o popcornie, bo będzie długo! Do zobaczenia!

Zapraszam również na największe w Polsce forum dla programistów Android. Jeśli macie pytania odnośnie do kariery programisty — zapraszam do działu Kariera programowanie. Zachęcam również do przejrzenia działu Praca oraz zlecenia dla programistów — być może to właśnie tam znajdziesz swoją pierwszą pracę.

Poprzednie odcinki:

  1. Typowy dzień pracy programisty
  2. Wady pracy programisty
  3. Zalety pracy programisty
  4. [FAQ] Wszystko, co powinieneś wiedzieć, jeśli interesuje Cię praca programisty
  5. Co mnie zdziwiło w programowaniu?
  6. Motywacje – w jaki sposób nie stracić zapału do programowania?
  7. Jaką firmę wybrać na początku kariery programisty?
  8. Jak wygląda rozmowa o pracę na stanowisko programisty?
  9. Jak zacząć programować?
  10. Skąd czerpać wiedzę o programowaniu?
  11. Początki programowania — jaką technologię wybrać?
  12. Cykl życia aplikacji na Androida — co to takiego?
  13. Jak tworzymy interfejs użytkownika w aplikacjach na Androida?
  14. Jak system Android oszczędza energię?
  15. Jak działają i czym są powiadomienia push w Androidzie?
  16. W jaki sposób aplikacje pobierają dane z zewnętrznych serwisów i czym jest API?
  17. Jak działają pozwolenia w systemie Android?


  • Flaqs

    Pawle, ten cykl artykułów jest po prostu fantastyczny! Co weekend czekam na kolejny z wielką niecierpliwością! W sumie to te artykuły zmobilizowały mnie do nauki Javy 🙂
    Dziękuję Ci za świetną robotę! Tak trzymaj!

    • Paweł Dedio

      Dzięki za docenienie i cieszę się, że rośnie nam kolejny programista androida 😉

  • Tomasz

    która po wciśnięciu przycisku wysyłała informacje o dokładnej lokalizacji użytkownika wraz z jego mailem, mimo że nie wymagałem żadnego pozwolenia. Teraz coś takiego nie jest możliwe.

    Z calego tego zagadnienia, najbardziej interesowaloby mnie jak to zostalo zrobione, ze jest to juz niemozliwe?
    No i jak to jest, ze mozna np. messengerowi zabrac uprawnienia do kamery a i tak bedzie ja uzywal, bo ma swoja natywna obsluge kamery wbudowana w siebie.
    No wiec dlaczego Twoja aplikacja nie bylaby w stanie wykrasc tych informacji, wbudowujac swoj kod do pobrania tej informacji? Skoro facebook to moze, to moze kazdy. Myle sie?

    • Paweł Dedio

      Co do pierwszego pytania, dawniej do każdego wysłanego zdarzenia w Google Analytics mogłeś dodawać dodatkowe parametry i jednym z nich mogła być lokalizacja. Aplikacja nie musiała mieć takiego pozwolenia, ponieważ lokalizacja szła od Google. Google prawdopodobnie pobierało ją za pomocą Usług Google Play.

      Co do drugiej kwestii, jesteś pewien, że messanger używa kamery, nawet jeśli odbierzesz mu uprawnienia? Sprawdzałem to teraz i messanger za każdym razem pytał u uprawnienia do aparatu.

      Z natywną obsługą sprzętu jest ten problem, że musiałbyś dostosowywać swój kod do każdego konkretnego telefonu. Chociaż i tutaj nie jestem pewny czy producenci nie zabezpieczają się jakoś przed takim nieautoryzowanym dostępem. W sumie to jest ciekawy temat do wypróbowania.

      Niestety nie jesteś w stanie sprawdzić co aplikacja robi w kodzie natywnym.

      • Tomasz

        Sledzilem na xda watek rozwoju xprivacylua. Co jakis czas pojawial sie uzytkownik, twierdzacy ze wlaczyl blokade na cos (np. Kamere) a ta w aplikacji pracowala dalej. Wniosek zawsze byl taki, ze apka ma natywna obsluge jakiegos sprzetu i obchodzi w ten spoaob kwestie pozwolen androida.
        Nie musisz pisac obslugi kazdego sprzetu. Wystarczy obslugiwac standardowe api a jego rozszerzenie zalezne od konkretnego modelu sprzetu/interfejsu olac. Na chwile obecna jest bardzo malo interfejsow bez standardowego api. Takim wyjatkiem jest np. Czytnik lini papilarnych.

        • Paweł Dedio

          Być może, jeśli chodzi o pisanie w natywnym kodzie, to nie mam zbyt dużego doświadczenia. Postaram się zgłębić temat i w razie czego dopisać tutaj więcej informacji.