Wstęp
Menedżer tagów Google umożliwia programistom zmianę wartości konfiguracji w aplikacji mobilnej za pomocą interfejsu Menedżera tagów Google bez konieczności ponownego kompilowania i ponownego przesyłania plików binarnych aplikacji do sklepów z aplikacjami.
Przydaje się to do zarządzania w aplikacji wartościami konfiguracyjnymi lub flagami, które w przyszłości mogą wymagać zmiany, takimi jak:
- Różne ustawienia interfejsu i wyświetlane ciągi znaków
- rozmiary, lokalizacje lub typy reklam wyświetlanych w Twojej aplikacji;
- Różne ustawienia gier
Wartości konfiguracji mogą być też oceniane w czasie działania za pomocą reguł, które włączają konfiguracje dynamiczne, takie jak:
- Używanie rozmiaru ekranu do określania rozmiaru banera reklamowego
- Używanie języka i lokalizacji do konfigurowania elementów interfejsu
Menedżer tagów Google umożliwia też dynamiczną implementację tagów i pikseli śledzenia w aplikacjach. Deweloperzy mogą przekazywać ważne zdarzenia do warstwy danych i później zdecydować, które tagi śledzenia lub piksele mają być uruchamiane.
Zanim zaczniesz
Zanim zaczniesz korzystać z tego przewodnika, wykonaj następujące czynności:
- Zainstaluj pakiet SDK na Androida.
- Pobierz pakiet SDK Usług Google Play
- Utwórz konto Menedżera tagów Google.
- Konfigurowanie kontenera Menedżera tagów Google
Po wykonaniu tych czynności w dalszej części tego przewodnika dowiesz się, jak skonfigurować Menedżera tagów Google i korzystać z niego w aplikacji na Androida.
Pierwsze kroki
Z tego przewodnika dla początkujących dowiesz się, jak:
- Dodawanie Menedżera tagów Google do projektu
- Inicjowanie Menedżera tagów w aplikacji
- Pobieranie wartości konfiguracyjnych z kontenera Menedżera tagów
- Przekazywanie wartości i zdarzeń do interfejsu
dataLayer
- Podgląd, debugowanie i publikowanie kontenera
W tym przewodniku używane są fragmenty kodu z przykładowej aplikacji w usłudze Cute Animals
dołączonej do pakietu SDK Usług Google Play.
Pełne źródło tego projektu jest dostępne w: <android-sdk-directory>/extras/google/google_play_services/tagmanager/cuteanimals
.
1. Dodawanie Menedżera tagów Google do projektu
Aby dodać Menedżera tagów Google do projektu:
- Skonfiguruj pakiet SDK Usług Google Play.
- Jeśli używasz IDE innego niż
Android Studio, dodaj do pliku
AndroidManifest.xml
te uprawnienia:<!-- For TagManager SDK --> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
- Aby umożliwić
InstallReferrerReceiver
wywoływanie odbiornika Google Analytics w celu ustawiania danych kampanii, dodaj ten kod do plikuAndroidManifest.xml
:<!-- Used for install referrer tracking--> <service android:name="com.google.android.gms.tagmanager.InstallReferrerService" /> <receiver android:name="com.google.android.gms.tagmanager.InstallReferrerReceiver" android:exported="true"> <intent-filter> <action android:name="com.android.vending.INSTALL_REFERRER" /> </intent-filter> </receiver>
2. Dodawanie domyślnego pliku kontenera do projektu
Menedżer tagów Google używa domyślnego kontenera przy pierwszym uruchomieniu aplikacji. Domyślny kontener przestanie być używany, gdy tylko aplikacja pobierze nowy kontener przez sieć.
Aby pobrać domyślny plik binarny kontenera i dodać go do aplikacji:
- Zaloguj się w interfejsie internetowym Menedżera tagów Google.
- Wybierz wersję kontenera, który chcesz pobrać.
- Kliknij przycisk Pobierz, aby pobrać plik binarny kontenera.
- Dodaj pobrany plik binarny kontenera do projektu jako nieprzetworzony zasób.
- Jeśli podfolder
raw
w sekcji<project-root>/res/
nie istnieje, utwórz go. - W razie potrzeby zmień nazwę pliku binarnego kontenera. Składa się tylko z małych liter, cyfr i podkreśleń.
- Skopiuj plik binarny kontenera do folderu
<project-root>/res/raw
.
- Jeśli podfolder
Zalecamy użycie pliku binarnego, ale jeśli Twój kontener nie zawiera reguł ani tagów, możesz użyć prostego pliku JSON.
3. Inicjuję Menedżera tagów Google
Aby zainicjować Menedżera tagów Google w aplikacji:
- Znajdź singiel
TagManager
:TagManager tagManager = TagManager.getInstance(this);
- Użyj singletonu
TagManager
, aby wysłać żądanie wczytania kontenera, podając identyfikator kontenera Menedżera tagów Google oraz plik kontenera domyślnego. Identyfikator kontenera powinien być pisany wielkimi literami i dokładnie taki sam jak identyfikator kontenera w interfejsie internetowym Menedżera tagów Google. WywołanieloadContainerPreferNonDefault()
nie blokuje i zwraca wartośćPendingResult
:PendingResult<ContainerHolder> pending = tagManager.loadContainerPreferNonDefault(CONTAINER_ID, R.raw.defaultcontainer_binary);
- Użyj
ResultCallback
, aby zwrócićContainerHolder
po zakończeniu wczytywania lub przekroczeniu limitu czasu:// The onResult method will be called as soon as one of the following happens: // 1. a saved container is loaded // 2. if there is no saved container, a network container is loaded // 3. the 2-second timeout occurs pending.setResultCallback(new ResultCallback<ContainerHolder>() { @Override public void onResult(ContainerHolder containerHolder) { ContainerHolderSingleton.setContainerHolder(containerHolder); Container container = containerHolder.getContainer(); if (!containerHolder.getStatus().isSuccess()) { Log.e("CuteAnimals", "failure loading container"); displayErrorToUser(R.string.load_error); return; } ContainerLoadedCallback.registerCallbacksForContainer(container); containerHolder.setContainerAvailableListener(new ContainerLoadedCallback()); startMainActivity(); } }, TIMEOUT_FOR_CONTAINER_OPEN_MILLISECONDS, TimeUnit.MILLISECONDS);
Tworzenie singletonu ContainerHolder
Powinno się utrzymywać tylko 1 instancję
ContainerHolder
na każde uruchomienie aplikacji. Dlatego w powyższym przykładzie do zarządzania dostępem do instancjiContainerHolder
użyto klasy narzędziaContainerHolderSingleton
. Tak wygląda klasaContainerHolderSingleton
:package com.google.android.tagmanager.examples.cuteanimals; import com.google.android.gms.tagmanager.ContainerHolder; /** * Singleton to hold the GTM Container (since it should be only created once * per run of the app). */ public class ContainerHolderSingleton { private static ContainerHolder containerHolder; /** * Utility class; don't instantiate. */ private ContainerHolderSingleton() { } public static ContainerHolder getContainerHolder() { return containerHolder; } public static void setContainerHolder(ContainerHolder c) { containerHolder = c; } }
4. Pobieranie wartości konfiguracyjnych z kontenera
Po załadowaniu kontenera możesz pobrać wartości konfiguracyjne za pomocą dowolnej metody Container.get<type>()
. Wartości konfiguracji są definiowane za pomocą zmiennych zbierania wartości w Menedżerze tagów Google. Na przykład ta metoda pobiera najnowszy kolor, którego chcemy użyć w elemencie interfejsu, i zwraca go jako liczbę całkowitą:
/** * Returns an integer representing a color. */ private int getColor(String key) { return colorFromColorName(containerHolder.getContainer().getString(key)); }
Ten kod pobiera z kontenera nazwę koloru na 2 sposoby:
- Pobiera
Container
zContainerHolder
za pomocąContainerHolder.getContainer()
. - Pobiera wartość koloru z parametru
Container.getString(key)
, gdzie w interfejsie internetowym Menedżera tagów Google zostały zdefiniowane klucz i wartość.
5. Przekazywanie zdarzeń i wartości do obiektu dataLayer
Menedżer tagów Google udostępnia też interfejs dataLayer
, do którego możesz przekazywać informacje o aplikacji, które można odczytać w innych częściach aplikacji lub wykorzystać do uruchamiania tagów skonfigurowanych w interfejsie internetowym Menedżera tagów Google.
Przekazywanie wartości do obiektu dataLayer
dataLayer
zapewnia warstwę trwałości, której można używać do przechowywania par klucz-wartość, których możesz chcieć użyć w innych częściach aplikacji, lub jako danych wejściowych do tagów Menedżera tagów Google.
Aby przekazać wartość do dataLayer
, postępuj zgodnie z tym wzorcem:
- Pobierz singleton
DataLayer
:DataLayer dataLayer = TagManager.getInstance(context).getDataLayer();
- Przekaż zdarzenie za pomocą funkcji
DataLayer.push()
:// Put the image_name into the data layer for future use. TagManager.getInstance(this).getDataLayer().push(IMAGE_NAME_KEY, imageName);
Aby uzyskać wartość z dataLayer
, użyj funkcji
DataLayer.get(key)
.
Przekazywanie zdarzeń do obiektu dataLayer
Przekazywanie zdarzeń do interfejsu dataLayer
umożliwia oddzielenie kodu aplikacji od tagów, które chcesz uruchamiać w odpowiedzi na te zdarzenia.
Na przykład zamiast umieszczać na stałe w kodzie aplikacji wywołania śledzenia wyświetleń ekranu Google Analytics, możesz przekazywać zdarzenia ekranu do obiektu dataLayer
i definiować tagi śledzenia w interfejsie internetowym Menedżera tagów Google. Dzięki temu możesz modyfikować ten tag lub dodawać kolejne tagi, które reagują na zdarzenia ekranu bez aktualizowania kodu aplikacji.
Aby przekazać zdarzenie do dataLayer
, postępuj zgodnie z tym wzorcem:
- Pobierz singleton
DataLayer
:DataLayer dataLayer = TagManager.getInstance(context).getDataLayer();
- Przekaż zdarzenie za pomocą funkcji
DataLayer.pushEvent()
:dataLayer.pushEvent("openScreen", DataLayer.mapOf("screenName", screenName));
DataLayer.mapOf()
to użyteczna metoda pozwalająca łatwo wygenerować mapę par klucz-wartość, która będzie aktualizowaćdataLayer
w momencie przekazywania zdarzenia.
6. Podgląd, debugowanie i publikowanie
Zanim opublikujesz wersję kontenera, wyświetl jego podgląd, aby sprawdzić, czy działa poprawnie. Menedżer tagów Google umożliwia wyświetlanie podglądu wersji kontenera przez generowanie linków i kodów QR w interfejsie internetowym oraz używanie ich do otwierania aplikacji. Możesz też włączyć tryb szczegółowego rejestrowania, aby debugować wszelkie nieoczekiwane zachowania.
Wyświetlam podgląd
Aby wyświetlić podgląd wersji kontenera:
- Dodaję podgląd
Activity
do plikuAndroidManifest
:<!-- Add preview activity. --> <activity android:name="com.google.android.gms.tagmanager.PreviewActivity" android:label="@string/app_name" android:noHistory="true"> <!-- optional, removes the previewActivity from the activity stack. --> <intent-filter> <data android:scheme="tagmanager.c.com.google.android.tagmanager.examples.cuteanimals" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter> </activity>
Zmodyfikuj ten wiersz, aby zawierał nazwę pakietu Twojej aplikacji:
<data android:scheme="tagmanager.c.com.google.android.tagmanager.examples.cuteanimals" />
- Wygenerować link do podglądu w interfejsie internetowym Menedżera tagów Google.
- Zaloguj się w Menedżerze tagów Google
- Wybierz wersję kontenera, do której chcesz wyświetlić podgląd
- Kliknij przycisk Podgląd
- Wpisz nazwę pakietu aplikacji i kliknij Wygeneruj link do rozpoczęcia podglądu.
- Uruchom aplikację, używając wygenerowanego linku lub kodu QR.
- Możesz wyjść z trybu podglądu, klikając link wygenerowany za pomocą opcji Wygeneruj link do zakończenia podglądu w interfejsie internetowym.
Debugowanie
Jeśli musisz rozwiązać problemy z implementacją kontenera, włącz logowanie szczegółowe, wywołując metodę
TagManager.setVerboseLoggingEnabled(true)
:
// Modify the log level of the logger to print out not only // warning and error messages, but also verbose, debug, info messages. tagManager.setVerboseLoggingEnabled(true);
Publikuję
Po wyświetleniu podglądu kontenera i sprawdzeniu, czy działa on prawidłowo, możesz opublikować kontener. Wartości konfiguracyjne, tagi i zdarzenia kontenerów zostaną udostępnione użytkownikom po kolejnym odświeżeniu ich kontenerów. Więcej informacji o odświeżaniu kontenerów
Konfiguracja zaawansowana
W kolejnych sekcjach opisano zaawansowane opcje konfiguracji, których możesz użyć, aby jeszcze bardziej dostosować implementację Menedżera tagów Google.
Odświeżanie kontenera
Domyślnie kontener może być odświeżany co 12 godzin. Aby ręcznie odświeżyć kontener, użyj
ContainerHolder.refresh()
:
ContainerHolderSingleton.getContainerHolder().refresh();
Jest to wywołanie asynchroniczne, które nie jest zwracane natychmiast. Aby zmniejszyć ruch sieciowy, funkcję refresh()
można wywoływać tylko raz na 15 minut. W przeciwnym razie nie będzie działać.