Android v3 (Eski) - Genel Bakış

Bu geliştirici kılavuzunda, Google Etiket Yöneticisi'nin mobil uygulamalarda nasıl uygulanacağı açıklanmaktadır.

Giriş

Google Etiket Yöneticisi, geliştiricilerin uygulama ikililerini yeniden oluşturup uygulama pazarlarına yeniden göndermeleri gerekmeden Google Etiket Yöneticisi arayüzünü kullanarak mobil uygulamalarındaki yapılandırma değerlerini değiştirmesine olanak tanır.

Bu, uygulamanızdaki yapılandırma değerlerini veya işaretleri yönetmek için kullanışlıdır. Gelecekte değiştirmeniz gerekebilecek değerler ve işaretler arasında şunlar yer alır:

  • Çeşitli kullanıcı arayüzü ayarları ve görüntü dizeleri
  • Uygulamanızda yayınlanan reklamların boyutları, konumları veya türleri
  • Oyun ayarları

Yapılandırma değerleri, kurallar kullanılarak çalışma zamanında da değerlendirilebilir. Bu sayede aşağıdaki gibi dinamik yapılandırmalar etkinleştirilebilir:

  • Reklam banner'ı boyutunu belirlemek için ekran boyutunu kullanma
  • Kullanıcı arayüzü öğelerini yapılandırmak için dili ve konumu kullanma

Google Etiket Yöneticisi, uygulamalarda izleme etiketlerinin ve piksellerin dinamik olarak uygulanmasını da sağlar. Geliştiriciler, önemli etkinlikleri bir veri katmanına gönderebilir ve hangi izleme etiketlerinin veya piksellerin tetiklenmesi gerektiğine daha sonra karar verebilir. TagManager aşağıdaki etiketleri destekler:

  • Google Mobil Uygulama Analizi
  • Özel işlev çağrısı etiketi

Başlamadan Önce

Bu başlangıç kılavuzunu kullanmadan önce aşağıdakilere ihtiyacınız olacaktır:

Google Etiket Yöneticisi'ni yeni kullanmaya başladıysanız bu kılavuza devam etmeden önce kapsayıcılar, makrolar ve kurallar hakkında daha fazla bilgi edinmenizi (Yardım Merkezi) öneririz.

Başlarken

Bu bölümde, geliştiricilere tipik bir Etiket Yöneticisi iş akışı hakkında bilgi verilir:

  1. Google Etiket Yöneticisi SDK'sını projenize ekleme
  2. Varsayılan kapsayıcı değerlerini ayarlama
  3. Kapsayıcıyı açma
  4. Kapsayıcıdan Yapılandırma Değerlerini Alma
  5. Etkinlikleri DataLayer'a gönderme
  6. Kapsayıcıyı Önizleme ve Yayınlama

1. Google Etiket Yöneticisi SDK'sını Projenize Ekleme

Google Etiket Yöneticisi SDK'sını kullanmadan önce SDK paketini çıkarmanız, kitaplığı projenizin derleme yoluna eklemeniz ve AndroidManifest.xml dosyanıza izinler eklemeniz gerekir.

Öncelikle Google Etiket Yöneticisi kitaplığını projenizin /libs klasörüne ekleyin.

Ardından, AndroidManifest.xml dosyanızı aşağıdaki izinleri kullanacak şekilde güncelleyin:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />

2. Projenize Varsayılan Kapsayıcı Dosyası Ekleme

Google Etiket Yöneticisi, uygulamanızın ilk çalıştırılmasında varsayılan bir kapsayıcı kullanır. Uygulama, ağ üzerinden yeni bir kapsayıcı alana kadar varsayılan kapsayıcı kullanılır.

Varsayılan kapsayıcı ikili programını indirip uygulamanıza eklemek için aşağıdaki adımları uygulayın:

  1. Google Etiket Yöneticisi web arayüzünde oturum açın.
  2. İndirmek istediğiniz kapsayıcının sürümünü seçin.
  3. Kapsayıcı ikilisini almak için İndir düğmesini tıklayın.
  4. İkili program dosyasını şu yola ekleyin: <project-root>/assets/tagmanager/

Varsayılan dosya adı, kapsayıcı kimliği olmalıdır (örneğin, GTM-1234). İkili program dosyasını indirdikten sonra doğru adlandırma kuralına uyduğunuzdan emin olmak için dosya adından sürüm son ekini kaldırmayı unutmayın.

İkili program dosyası kullanılması önerilse de kapsayıcınızda kural veya etiket yoksa bunun yerine JSON dosyası kullanmayı tercih edebilirsiniz. Dosya, Android projenizin yeni bir /assets/tagmanager klasöründe bulunmalı ve şu adlandırma kuralına uymalıdır: <Container_ID>.json. Örneğin, kapsayıcı kimliğiniz GTM-1234 ise varsayılan kapsayıcı değerlerinizi /assets/tagmanager/GTM-1234.json öğesine eklemeniz gerekir.

3. Kapsayıcıyı açma

Bir kapsayıcıdan değer almadan önce uygulamanızın kapsayıcıyı açması gerekir. Bir kapsayıcıyı açtığınızda kapsayıcı, diskten (varsa) yüklenir veya gerekirse ağdan istenir.

Android'de bir kapsayıcıyı açmanın en kolay yolu, aşağıdaki örnekte gösterildiği gibi ContainerOpener.openContainer(..., Notifier notifier) kullanmaktır:

import com.google.tagmanager.Container;
import com.google.tagmanager.ContainerOpener;
import com.google.tagmanager.ContainerOpener.OpenType;
import com.google.tagmanager.TagManager;

import android.app.Activity;
import android.os.Bundle;

public class RacingGame {

  // Add your public container ID.
  private static final String CONTAINER_ID = "GTM-YYYY";

  volatile private Container mContainer;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    TagManager mTagManager = TagManager.getInstance(this);

    // The container is returned to containerFuture when available.
    ContainerOpener.openContainer(
        mTagManager,                            // TagManager instance.
        CONTAINER_ID,                           // Tag Manager Container ID.
        OpenType.PREFER_NON_DEFAULT,            // Prefer not to get the default container, but stale is OK.
        null,                                   // Time to wait for saved container to load (ms). Default is 2000ms.
        new ContainerOpener.Notifier() {        // Called when container loads.
          @Override
          public void containerAvailable(Container container) {
            // Handle assignment in callback to avoid blocking main thread.
            mContainer = container;
          }
        }
    );
    // Rest of your onCreate code.
  }
}

Bu örnekte, yerel depolama alanından kayıtlı bir kapsayıcı istemek için ContainerOpener.openContainer(..., Notifier notifier) kullanılıyor. mContainer atamasını containerAvailable geri çağırma işlevinde yaparak ana iş parçacığının engellenmemesini sağlarız. Kaydedilen kapsayıcı 12 saatten daha eskiyse çağrı, ağ üzerinden yeni bir kapsayıcının eşzamansız olarak alınması için de bir istek planlar.

Bu örnek uygulama, ContainerOpener kolaylık sınıfını kullanarak bir kapsayıcıdan değerleri açmanın ve almanın en basit yolunu gösterir. Daha gelişmiş uygulama seçenekleri için Gelişmiş Yapılandırma başlıklı makaleyi inceleyin.

4. Kapsayıcıdan Yapılandırma Değerlerini Alma

Kapsayıcı açıldıktan sonra, yapılandırma değerleri get<type>Value() yöntemleri kullanılarak alınabilir:

// Retrieving a configuration value from a Tag Manager Container.

// Get the configuration value by key.
String title = mContainer.getStringValue("title_string");

Mevcut olmayan bir anahtarla yapılan istekler, istenen türe uygun bir varsayılan değer döndürür:

// Empty keys will return a default value depending on the type requested.

// Key does not exist. An empty string is returned.
string subtitle = container.getStringValue("Non-existent-key");
subtitle.equals(""); // Evaluates to true.

5. Değerleri dataLayer'a aktarma

DataLayer, uygulamanızla ilgili çalışma zamanı bilgilerinin (ör. dokunma etkinlikleri veya ekran görüntülemeleri) bir kapsayıcıdaki Etiket Yöneticisi makroları ve etiketleri tarafından kullanılabilmesini sağlayan bir haritadır.

Örneğin, ekran görüntülemeleriyle ilgili bilgileri DataLayer haritasına aktararak, bu ekran görüntülemelerine yanıt olarak dönüşüm piksellerini ve izleme çağrılarını tetiklemek için Etiket Yöneticisi web arayüzünde etiketler oluşturabilirsiniz. Bu etiketleri uygulamanıza sabit kodlamanız gerekmez.

Etkinlikler, push() ve DataLayer.mapOf() yardımcı yöntemi kullanılarak dataLayer'a gönderilir:

//
// MainActivity.java
// Pushing an openScreen event with a screen name into the data layer.
//

import com.google.tagmanager.TagManager;
import com.google.tagmanager.DataLayer;

import android.app.Activity;
import android.os.Bundle;

public MainActivity extends Activity {

  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

  }

  // This screen becomes visible when Activity.onStart() is called.
  public void onStart() {
    super.onStart();

    // The container should have already been opened, otherwise events pushed to
    // the DataLayer will not fire tags in that container.
    DataLayer dataLayer = TagManager.getInstance(this).getDataLayer();
    dataLayer.push(DataLayer.mapOf("event",
                                   "openScreen",      // The event type. This value should be used consistently for similar event types.
                                   "screenName",      // Writes a key "screenName" to the dataLayer map.
                                   "Home Screen")     // Writes a value "Home Screen" for the "screenName" key.
    );
  }
  // Rest of the Activity implementation
}

Web arayüzünde artık şu kuralı oluşturarak her ekran görüntüleme için tetiklenecek etiketler (ör. Google Analytics etiketleri) oluşturabilirsiniz: eşittir "openScreen". Ekran adını bu etiketlerden birine iletmek için veri katmanındaki "screenName" anahtarına referans veren bir veri katmanı makrosu oluşturun. Ayrıca, yalnızca belirli ekran görünümleri için etkinleşecek bir etiket (ör. Google Ads dönüşüm pikseli) de oluşturabilirsiniz. Bunun için "openScreen"e eşit && "ConfirmationScreen"e eşit kuralını oluşturmanız gerekir.

6. Kapsayıcıyı Önizleme ve Yayınlama

Makro değerleri her zaman yayınlanan mevcut sürüme karşılık gelir. Bir kapsayıcının en son sürümünü yayınlamadan önce taslak kapsayıcınızı önizleyebilirsiniz.

Bir kapsayıcıyı önizlemek için Google Etiket Yöneticisi web arayüzünde önizlemek istediğiniz kapsayıcı sürümünü ve ardından Preview simgesini seçerek bir önizleme URL'si oluşturun. Bu önizleme URL'sini kaydedin. Daha sonraki adımlarda bu URL'ye ihtiyacınız olacaktır.

Önizleme URL'leri, Etiket Yöneticisi web arayüzünün önizleme penceresinde kullanılabilir.
Şekil 1: Etiket Yöneticisi web arayüzünden önizleme URL'si alma.

Ardından, uygulamanızın AndroidManifest.xml dosyasına aşağıdaki etkinliği ekleyin:

<!-- Google Tag Manager Preview Activity -->
<activity
  android:name="com.google.tagmanager.PreviewActivity"
  android:label="@string/app_name"
  android:noHistory="true" >  <!-- Optional, removes the PreviewActivity from activity stack. -->
  <intent-filter>
    <data android:scheme="tagmanager.c.application_package_name" />
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <category android:name="android.intent.category.BROWSABLE"/>
  </intent-filter>
</activity>
  

Taslak kapsayıcıyı uygulamanızda önizlemek için bağlantıyı bir emülatörde veya fiziksel cihazda açın.

Taslak yapılandırma değerlerinizi uygulamanızda kullanıma sunmaya hazır olduğunuzda kapsayıcıyı yayınlayın.

Gelişmiş Yapılandırma

Mobil için Google Etiket Yöneticisi'nde, kuralları kullanarak çalışma zamanı koşullarına göre değer seçmenize, kapsayıcıyı manuel olarak yenilemenize ve kapsayıcıları açmak için ek seçenekler elde etmenize olanak tanıyan bir dizi gelişmiş yapılandırma seçeneği bulunur. Aşağıdaki bölümlerde, en yaygın gelişmiş yapılandırmalardan bazıları özetlenmektedir.

Kapsayıcıları Açmak İçin Gelişmiş Seçenekler

Google Etiket Yöneticisi SDK'sı, kapsayıcıları açmak için çeşitli yöntemler sunar. Bu yöntemler, yükleme süreci üzerinde daha fazla kontrol sahibi olmanızı sağlayabilir:

TagManager.openContainer()

TagManager.openContainer(), kapsayıcı açmak için en düşük düzeyli ve en esnek API'dir. Varsayılan bir kapsayıcıyla hemen geri döner ve kaydedilmiş bir kapsayıcı yoksa veya kaydedilmiş kapsayıcı yeni değilse (12 saatten eski) kapsayıcıyı diskten ya da ağdan eşzamansız olarak da yükler.

mContainer = tagManager.openContainer(CONTAINER_ID, new Container.Callback() {

  // Called when a refresh is about to begin for the given refresh type.
  @Override
  public void containerRefreshBegin(Container container, RefreshType refreshType) {
    // Notify UI that the Container refresh is beginning.
   }

  // Called when a successful refresh occurred for the given refresh type.
  @Override
  public void containerRefreshSuccess(Container container, RefreshType refreshType]) {
    // Notify UI that Container is ready.
  }

  // Called when a refresh failed for the given refresh type.
  @Override
  public void containerRefreshFailure(Container container,
                                      RefreshType refreshType,
                                      RefreshFailure refreshFailure) {
    // Notify UI that the Container refresh has failed.
  }

Yükleme işlemi boyunca TagManager.openContainer(), kodunuzun yükleme isteğinin ne zaman başladığını, başarısız olup olmadığını ve neden başarısız olduğunu ya da başarılı olduğunu ve kapsayıcının en sonunda diskten mi yoksa ağdan mı yüklendiğini öğrenebilmesi için çeşitli yaşam döngüsü geri çağırmaları yayınlar.

Uygulamanızın varsayılan değerleri kullanması kabul edilebilir bir durum değilse kaydedilmiş veya ağ kapsayıcısının ne zaman yüklendiğini öğrenmek için bu geri çağırmaları kullanmanız gerekir. Uygulama ilk kez çalıştırılıyorsa ve ağ bağlantısı yoksa kaydedilmiş veya ağ kapsayıcısı yükleyemeyeceğinizi unutmayın.

TagManager.openContainer(), aşağıdaki enumdeğerleri bu geri çağırmalara bağımsız değişken olarak iletir:

RefreshType

DeğerAçıklama
Container.Callback.SAVED Yenileme isteği, yerel olarak kaydedilmiş bir kapsayıcıyı yüklüyor.
Container.Callback.NETWORK Yenileme isteği, ağ üzerinden bir kapsayıcı yüklüyor.

RefreshFailure

DeğerAçıklama
Container.Callback.NO_SAVED_CONTAINER Kayıtlı kapsayıcı yok.
Container.Callback.IO_ERROR Bir G/Ç hatası nedeniyle kapsayıcı yenilenemedi.
Container.Callback.NO_NETWORK Ağ bağlantısı yok.
Container.Callback.NETWORK_ERROR Bir ağ hatası oluştu.
Container.Callback.SERVER_ERROR Sunucuda bir hata oluştu.
Container.Callback.UNKNOWN_ERROR Kategorize edilemeyen bir hata oluştu.

Varsayılan Olmayan ve Yeni Kapsayıcıları Açma Yöntemleri

ContainerOpener sarmalar TagManager.openContainer() ve kapsayıcıları açmak için iki kolaylık yöntemi sunar: ContainerOpener.openContainer(..., Notifier notifier) ve ContainerOpener.openContainer(..., Long timeoutInMillis).

Bu yöntemlerin her biri, varsayılan olmayan veya yeni bir kapsayıcı isteyen bir numaralandırma alır.

OpenType.PREFER_NON_DEFAULT çoğu uygulama için önerilir ve belirli bir zaman aşımı süresi içinde, diskten veya ağdan kullanılabilir ilk varsayılan olmayan kapsayıcıyı döndürmeye çalışır. Bu kapsayıcı 12 saatten eski olsa bile bu işlem yapılır. Eski bir kaydedilmiş kapsayıcı döndürürse yeni bir kapsayıcı için eşzamansız bir ağ isteği de gönderir. OpenType.PREFER_NON_DEFAULT kullanılırken başka kapsayıcı yoksa veya zaman aşımı süresi aşılmışsa varsayılan bir kapsayıcı döndürülür.

OpenType.PREFER_FRESH, verilen zaman aşımı süresi içinde diskten veya ağdan yeni bir kapsayıcı döndürmeye çalışır. Ağ bağlantısı yoksa ve/veya zaman aşımı süresi aşılmışsa kaydedilmiş bir kapsayıcı döndürür.

Daha uzun istek süresinin kullanıcı deneyimini belirgin şekilde etkileyebileceği yerlerde (ör. kullanıcı arayüzü işaretleri veya görüntüleme dizeleri) OpenType.PREFER_FRESH kullanılması önerilmez. Ağ kapsayıcı isteğini zorlamak için istediğiniz zaman Container.refresh() de kullanabilirsiniz.

Bu kolaylık yöntemlerinin her ikisi de engellemeyen yöntemlerdir. ContainerOpener.openContainer(..., Long timeoutInMillis), ContainerOpener.ContainerFuture nesnesini döndürür. Bu nesnenin get yöntemi, yüklendiği anda Container döndürür (ancak o zamana kadar engellenir). ContainerOpener.openContainer(..., Notifier notifier) yöntemi, kapsayıcı kullanılabilir olduğunda çağrılan tek bir geri çağırma alır. Bu geri çağırma, ana iş parçacığının engellenmesini önlemek için kullanılabilir. Her iki yöntemin de varsayılan zaman aşımı süresi 2000 milisaniyedir.

Kuralları kullanarak çalışma zamanında makroları değerlendirme

Kapsayıcılar, kuralları kullanarak değerleri çalışma zamanında değerlendirebilir. Kurallar, cihaz dili, platform veya başka bir makro değeri gibi ölçütlere göre belirlenebilir. Örneğin, kurallar, çalışma zamanında cihazın diline göre yerelleştirilmiş bir görüntüleme dizesi seçmek için kullanılabilir. Bu, aşağıdaki kural kullanılarak yapılandırılabilir:

Çalışma zamanında cihaz diline göre görüntüleme dizelerini seçmek için bir kural kullanılır: dil eşittir es. Bu kuralda önceden tanımlanmış dil makrosu ve iki karakterli ISO 639-1 dil kodu kullanılır.
Şekil 1: Yalnızca İspanyolca dilini kullanacak şekilde yapılandırılmış cihazlar için değer toplama makrosunu etkinleştiren bir kural ekleme.

Ardından, her dil için değer toplama makroları oluşturabilir ve bu kuralı her makroya ekleyerek uygun dil kodunu girebilirsiniz. Bu kapsayıcı yayınlandığında uygulamanız, çalışma zamanında kullanıcının cihazının diline bağlı olarak yerelleştirilmiş görüntüleme dizeleri gösterebilir.

Varsayılan kapsayıcınızın kurallara ihtiyacı varsa varsayılan kapsayıcı olarak ikili kapsayıcı dosyası kullanmanız gerektiğini unutmayın.

Kuralları yapılandırma hakkında daha fazla bilgi edinin (Yardım Merkezi).

İkili Varsayılan Kapsayıcı Dosyaları

Kural gerektiren varsayılan kapsayıcılar, varsayılan kapsayıcı olarak JSON dosyası yerine ikili kapsayıcı dosyası kullanmalıdır. İkili kapsayıcılar, Google Etiket Yöneticisi kurallarıyla makro değerlerini çalışma zamanında belirleme desteği sunarken JSON dosyaları sunmaz.

İkili kapsayıcı dosyaları Google Etiket Yöneticisi web arayüzünden indirilebilir ve projenizin /assets/tagmanager/ klasörüne eklenmelidir. Dosyalar, dosya adının kapsayıcı kimliğinizi temsil ettiği /assets/tagmanager/GTM-XXXX biçiminde olmalıdır.

Hem JSON dosyası hem de ikili kapsayıcı dosyası mevcut olduğunda SDK, varsayılan kapsayıcı olarak ikili kapsayıcı dosyasını kullanır.

İşlev çağrısı makrolarını kullanma

İşlev çağrısı makroları, uygulamanızda belirtilen bir işlevin dönüş değerine ayarlanmış makrolardır. İşlev Çağrısı Makroları, çalışma zamanı değerlerini Google Etiket Yöneticisi kurallarınıza dahil etmek için kullanılabilir. Örneğin, bir cihazın yapılandırılmış diline ve para birimine göre çalışma zamanında kullanıcıya hangi fiyatın gösterileceğini belirleyebilirsiniz.

Bir işlev çağrısı makrosunu yapılandırmak için:

  1. İşlev çağrısı makrosunu Google Etiket Yöneticisi web arayüzünde tanımlayın. Bağımsız değişkenler isteğe bağlı olarak anahtar/değer çiftleri şeklinde yapılandırılabilir.
  2. Google Etiket Yöneticisi web arayüzünde yapılandırdığınız işlev adını kullanarak uygulamanızda bir FunctionCallMacroHandler kaydedin. Bu işlem, Container.registerFunctionCallMacroHandler() yöntemini geçersiz kılar: getValue():
    /**
     * Registers a function call macro handler.
     *
     * @param functionName The function name field, as defined in the Google Tag
     *     Manager web interface.
     */
    mContainer.registerFunctionCallMacroHandler(functionName, new FunctionCallMacroHandler() {
    
      /**
       * This code will execute when any custom macro's rule(s) evaluate to true.
       * The code should check the functionName and process accordingly.
       *
       * @param functionName Corresponds to the function name field defined
       *     in the Google Tag Manager web interface.
       * @param parameters An optional map of parameters
       *     as defined in the Google Tag Manager web interface.
       */
      @Override
      public Object getValue(String functionName, Map<String, Object> parameters)) {
    
        if (functionName.equals("myConfiguredFunctionName")) {
          // Process and return the calculated value of this macro accordingly.
          return macro_value
        }
        return null;
      }
    });

İşlev çağrısı etiketlerini kullanma

İşlev Çağrısı Etiketleri, bir etkinlik veri katmanına her gönderildiğinde ve etiket kuralları true olarak değerlendirildiğinde önceden kaydedilmiş işlevlerin yürütülmesini sağlar.

İşlev çağrısı etiketini yapılandırmak için:

  1. İşlev çağrısı etiketini Google Etiket Yöneticisi web arayüzünde tanımlayın. Bağımsız değişkenler isteğe bağlı olarak anahtar/değer çiftleri şeklinde yapılandırılabilir.
  2. Container.registerFunctionCallTagHandler() kullanarak uygulamanızda bir işlev çağrısı etiketi işleyicisi kaydedin:
    /**
     * Register a function call tag handler.
     *
     * @param functionName The function name, which corresponds to the function name field
     *     Google Tag Manager web interface.
     */
    mContainer.registerFunctionCallTagHandler(functionName, new FunctionCallTagHandler() {
    
      /**
       * This method will be called when any custom tag's rule(s) evaluates to true.
       * The code should check the functionName and process accordingly.
       *
       * @param functionName The functionName passed to the functionCallTagHandler.
       * @param parameters An optional map of parameters as defined in the Google
       *     Tag Manager web interface.
       */
      @Override
      public void execute(String functionName, Map<String, Object> parameters) {
        if (functionName.equals("myConfiguredFunctionName")) {
          // Process accordingly.
        }
      }
    });

Özel yenileme süresi ayarlama

Google Etiket Yöneticisi SDK'sı, mevcut kapsayıcının yaşı 12 saati aşarsa yeni bir kapsayıcıyı almaya çalışır. Özel bir kapsayıcı yenileme süresi ayarlamak için aşağıdaki örnekte gösterildiği gibi Timer kullanın:

timer.scheduleTask(new TimerTask() {
  @Override
  public void run() {
    mContainer.refresh();
  }
}, delay, <new_period_in milliseconds>);

Logger ile hata ayıklama

Google Etiket Yöneticisi SDK'sı, hataları ve uyarıları varsayılan olarak günlüklerde yazdırır. Daha ayrıntılı günlük kaydını etkinleştirmek hata ayıklama için yararlı olabilir. Bunu yapmak için kendi Logger öğenizi TagManager.setLogger ile birlikte uygulayabilirsiniz. Örneğin:

TagManager tagManager = TagManager.getInstance(this);
tagManager.setLogger(new Logger() {

  final String TAG = "myGtmLogger";

  // Log output with verbosity level of DEBUG.
  @Override
  public void d(String arg0) {
    Log.d(TAG, arg0);
  }

  // Log exceptions when provided.
  @Override
  public void d(String arg0, Throwable arg1) {
    Log.d(TAG, arg0);
    arg1.printStackTrace();
  }

  // Rest of the unimplemented Logger methods.

});

Alternatif olarak, aşağıdaki örnekte gösterildiği gibi TagManager.getLogger().setLogLevel(LogLevel) kullanarak mevcut Logger'ın LogLevel'ini ayarlayabilirsiniz:

// Change the LogLevel to INFO to enable logging at INFO and higher levels.
TagManager tagManager = TagManager.getInstance(this);
tagManager.getLogger().setLogLevel(LogLevel.INFO);