Bu geliştirici kılavuzunda, Google Etiket Yöneticisi'nin mobil uygulamadır.
Giriş
Google Etiket Yöneticisi, geliştiricilerin yapılandırmayı değiştirmesine olanak tanır. değerlerini Google Etiket Yöneticisi'ni kullanarak mobil uygulamalarında arayüzü yeniden derleyip uygulamaya yeniden göndermek zorunda kalmadan daha fazla bilgi edineceksiniz.
Bu özellik, yapılandırma değerlerini yönetirken veya daha sonra değiştirmeniz gerekebilecek işaretler şunları içerir:
- Çeşitli kullanıcı arayüzü ayarları ve görüntüleme dizeleri
- Uygulamanızda yayınlanan reklamların boyutları, konumları veya türleri
- Oyun ayarları
Yapılandırma değerleri, çalışma zamanında kurallar kullanılarak da değerlendirilebilir. Aşağıdaki gibi dinamik yapılandırmaları etkinleştirebilirsiniz:
- Reklam banner'ının boyutunu belirlemek için ekran boyutunu kullanma
- Kullanıcı arayüzü öğelerini yapılandırmak için dil ve konum kullanma
Google Etiket Yöneticisi, izleme etiketlerinin dinamik olarak uygulanmasını da ve pikseller kullanır. Geliştiriciler önemli etkinlikleri bir veriye aktarabilir katmanını ekleyebilir ve daha sonra hangi izleme etiketlerinin veya piksellerinin tetikleneceğine karar verebilirsiniz. Etiket Yöneticisi, şu anda aşağıdaki etiketleri desteklemektedir:
- Google Mobil Uygulama Analizi
- Özel İş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 hesabı
- Yeni bir Etiket Yöneticisi kapsayıcı ve değer toplama makrosu
- Google Etiket Yöneticisi'nin uygulanacağı, Android için mobil uygulama
- Google Analytics Hizmetleri SDK, Etiket Yöneticisi kitaplığını içerir.
Google Etiket Yöneticisi'nde yeniyseniz şunları öneririz: bu kılavuza devam etmeden önce kapsayıcılar, makrolar ve kurallar (Yardım Merkezi) hakkında daha fazla bilgi edinin.
Başlarken
Bu bölüm, geliştiricilere tipik bir Etiket Yöneticisi iş akışı konusunda yol gösterecektir:
- Projenize Google Etiket Yöneticisi SDK'sını ekleyin
- Varsayılan Kapsayıcı Değerlerini Ayarlama
- Kapsayıcıyı açın
- Kapsayıcıdan Yapılandırma Değerleri Alma
- Etkinlikleri Datalayer'a Aktarma
- Önizleme ve Kapsayıcıyı yayınlayın
1. Projenize Google Etiket Yöneticisi SDK'sını Ekleme
Google Etiket Yöneticisi SDK'sını kullanmadan önce, SDK paketini açmanız gerekir.
kitaplığı projenizin derleme yoluna ekleyip izin ekleme
AndroidManifest.xml
dosyanıza ekleyin.
İlk olarak, Google Etiket Yöneticisi kitaplığını şuranın /libs
klasörüne ekleyin:
akılda kalıcı bir yolunu sunar.
Sonra, AndroidManifest.xml dosyanızı aşağıdaki gibi güncelleyin: izinler:
<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 ilk kez çalıştırıldığında varsayılan bir kapsayıcı kullanır. Varsayılan uygulama, yeni bir kapsayıcı alana kadar kullanılır. ağ.
Varsayılan container ikili programını indirip uygulamanıza eklemek için aşağıdaki adımları uygulayın:
- Google Etiket Yöneticisi web arayüzünde oturum açın.
- İndirmek istediğiniz kapsayıcının Sürümünü seçin.
- Container ikili programını almak için İndir düğmesini tıklayın.
- İkili program dosyasını
şu yol:
<project-root>/assets/tagmanager/
Varsayılan dosya adı, kapsayıcı kimliği olmalıdır (örneğin GTM-1234
). Planınızı
dosyayı indirdiyseniz sürüm sonekini dosya adından kaldırdığınızdan emin olun.
inceleyin.
İkili programın kullanılması önerilse de, kapsayıcınız kural veya etiket içermiyorsa
basit bir iletişim planı
JSON
dosyası olarak kaydedin.
Dosya, yeni bir /assets/tagmanager
konumunda olmalıdır.
veya ş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
.
3. Kapsayıcı Açma
Bir kapsayıcıdan değer almadan önce uygulamanızın açılması gerekir yerleştirilmelidir. Bir kapsayıcı açıldığında diskten (varsa) yüklenir veya isteği ağdan ister (gerekirse).
Android'de bir kapsayıcı açmanın en kolay yolu
ContainerOpener.openContainer(..., Notifier notifier)
, aşağıdaki örnekte gösterildiği gibi:
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 ContainerOpener.openContainer(..., Notifier notifier)
,
yerel depolama alanından kayıtlı bir container isteyin. Görevi,
containerAvailable
geri çağırmasında mContainer
varsa
ana ileti dizisi engellenmedi. Kaydedilen kapsayıcı 12 saatten eskiyse
çağrısı, eşzamansız olarak yeni bir container'ı almak için bir istek de planlar.
kullanabilirsiniz.
Bu örnek uygulama, GCLID'yi açıp açmanın ve almanın en basit yolunu gösterir
değerleri ContainerOpener
kolaylık sınıfını kullanarak bir kapsayıcıdan alınır.
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:
// Retrieving a configuration value from a Tag Manager Container. // Get the configuration value by key. String title = mContainer.getStringValue("title_string");
Var olmayan bir anahtarla yapılan istekler uygun varsayılan bir değer döndürür istenen türe göre:
// 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. Veri Katmanı'na Değer Aktarma
DataKatmanlar, uygulamanız hakkında çalışma zamanı bilgilerini sağlayan bir haritadır. Örneğin, etkinliklerinizin veya ekran görüntülemelerinizin, anlamına gelir.
Örneğin, ekran görüntülenmeleriyle ilgili bilgileri Datalayer haritasına aktararak dönüşüm piksellerini tetikleyecek şekilde Etiket Yöneticisi web arayüzünde Böylece, ekran görüntülemelerine yanıt olarak telefon aramalarını kodlayıp uygulamanıza eklemeniz gerekir.
Etkinlikler, push()
ve
DataLayer.mapOf()
yardımcı yöntemi:
// // 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 etiketler (ör. Google Analytics etiketleri) oluşturabilirsiniz. şu kuralı oluşturarak her ekran görüntülenme için etkinleştirebilirsiniz: eşittir "openScreen". Ekran adını aktarmak için eklemek isterseniz, "screenName" öğesine referans veren bir veri katmanı makrosu oluşturun anahtarını kullanın. Dilerseniz (Google Ads dönüşüm pikseli gibi) yalnızca belirli ekran görüntülemelerinde tetiklenmesini etkinliğinin "openScreen" olduğu bir kural oluşturuyor && eşittir "ConfirmationScreen".
6. Önizleniyor ve Kapsayıcı Yayınlama
Makro değerleri her zaman mevcut yayınlanan sürüme karşılık gelir. Bir kapsayıcının en son sürümünü yayınlamadan önce önizlemeyi hazırlayabilirsiniz.
Bir kapsayıcıyı önizlemek için Google
Kapsayıcının sürümünü seçerek Etiket Yöneticisi web arayüzü
istediğiniz önizlemeyi seçin ve ardından Preview
düğmesini seçin. Devam et
bu önizleme URL'sini ekleyin.
Daha sonra, aşağıdaki Etkinliği uygulamanızın
AndroidManifest.xml
dosyası:
<!-- 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>
Şu işlemleri yapmak için bağlantıyı bir emülatörde veya fiziksel cihazda açın: taslak kapsayıcıyı uygulamanızda önizleyin.
Taslak yapılandırma değerlerinizi web sitesi uygulama, kapsayıcıyı yayınlayın.
Gelişmiş Yapılandırma
Mobil Cihazlar için Google Etiket Yöneticisi'nde bir dizi gelişmiş yapılandırma kullanarak çalışma zamanı koşullarına göre değer belirlemenizi sağlayan kapsayıcıyı manuel olarak yenileyebilir, açılış sayfası için ek seçeneklere ulaşabilirsiniz. container'lar. Aşağıdaki bölümlerde, en yaygın ve gelişmiş yapılandırmanın üç yolu vardır.
Kapsayıcıları Açmak için Gelişmiş Seçenekler
Google Etiket Yöneticisi SDK'sı, açılış sayfası için birkaç yöntem sunar. yükleme süreci üzerinde daha fazla kontrol sahibi olmanızı sağlayan kapsayıcılar:
TagManager.openContainer()
TagManager.openContainer()
, bir açılış sayfası için en düşük düzey ve en esnek API'dir.
anlamına gelir. Varsayılan bir container ile hemen geri döner ve
ayrıca, kaydedilmemiş bir kapsayıcıyı diskten veya ağdan eşzamansız olarak yükler
veya kayıtlı kapsayıcı yeni değilse (12 saatten eski)
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()
sorun
birkaç yaşam döngüsü geri çağırması yapar. Böylece kodunuz,
yükleme isteğinin başladığı, başarısız veya başarılı olup olmadığı ve
kapsayıcının diskten veya ağdan yüklenmesi gerekir.
Uygulamanızın varsayılan değerleri kullanması kabul edilmiyorsa bir ağın ne zaman kaydedildiğini veya ağın kapsayıcı yüklendi. Önceden kaydedilmiş bir veya yanlış dosyayı bu uygulama ilk kez çalıştırılıyorsa ve ağ bağlantısı.
TagManager.openContainer()
şu enum
paslarını geçer
değerleri, bu geri çağırma işlevleri için bağımsız değişken olarak kullanır:
RefreshType
Değer | Açıklama |
---|---|
Container.Callback.SAVED
|
Yenileme isteği, yerel olarak kaydedilmiş bir kapsayıcı yüklüyor. |
Container.Callback.NETWORK
|
Yenileme isteği, ağ üzerinden bir kapsayıcı yüklüyor. |
RefreshFailure
Değer | Açıklama |
---|---|
Container.Callback.NO_SAVED_CONTAINER
|
Kullanılabilir kayıtlı kapsayıcı yok. |
Container.Callback.IO_ERROR
|
Bir G/Ç hatası, kapsayıcının yenilenmesini engelledi. |
Container.Callback.NO_NETWORK
| Kullanılabilir 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
, TagManager.openContainer()
ile bitiriyor
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ı görevi görür.
OpenType.PREFER_NON_DEFAULT
çoğu uygulama için önerilir ve
belirli bir ayar içindeki varsayılan olmayan ilk uygun kapsayıcıyı döndürmeyi dener.
zaman aşımı süresi (örneğin, bu container daha büyük olsa bile disk veya ağdan)
12 saatten eski. Eski ve kaydedilmiş bir kapsayıcı döndürürse,
yeni bir tane için eşzamansız ağ isteği.
OpenType.PREFER_NON_DEFAULT
kullanılırken başka kapsayıcı yoksa veya zaman aşımı süresi aşıldıysa varsayılan kapsayıcı döndürülür.
OpenType.PREFER_FRESH
, şuradan yeni bir kapsayıcı döndürmeye çalışıyor:
disk veya ağda yer alır.
Bir ağ aşağıdaki durumlarda kaydedilmiş bir kapsayıcıyı döndürür:
bağlantı kesildi ve/veya zaman aşımı süresi aşıldı.
OpenType.PREFER_FRESH
kullanılması önerilmez
uzun bir istek süresinin kullanıcı deneyimini belirgin şekilde etkileyebileceği yerlerde,
veya görüntüleme dizeleri gibi
özellikleri test etmenizi sağlar. Şunları da kullanabilirsiniz:
Container.refresh()
herhangi bir zamanda
kullanarak bir ağ container'ı isteğini zorunlu kılar.
Bu kolaylık yöntemlerinin ikisi de engellemeyen değildir.
ContainerOpener.openContainer(..., Long timeoutInMillis)
, şunu döndürür:
get
yöntemi bir sonucu döndüren ContainerOpener.ContainerFuture
nesnesi
Container
(ancak yüklenene kadar engellenecek).
ContainerOpener.openContainer(..., Notifier notifier)
yöntemi tek bir geri çağırma alır,
çağrılır,
Bu kural, 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 çalışma zamanında değerleri değerlendirebilir. Kurallar şunlara dayalı olabilir: cihaz dili, platform veya başka herhangi bir makro değer gibi kriterlere göre belirlenir. Örneğin, Örneğin, kurallar, içeriğe dayalı yerelleştirilmiş bir görüntüleme dizesi seçmek için cihazın diline bakın. Bu, şu kuralı kullanın:
Ardından her dil için değer koleksiyonu makroları oluşturup bu makroları kuralını her makroya uygun dil kodunu ekleyerek ekleyin. Bu kapsayıcı, yayınlandığında, uygulamanız artık yerelleştirilmiş görüntülü reklam dizeleri, çalışma zamanında kullanıcının cihazının diline göre belirlenir.
Varsayılan kapsayıcınız kural gerektiriyorsa Varsayılan olarak ikili kapsayıcı dosyanızı anlamına gelir.
Kuralları yapılandırma hakkında daha fazla bilgi edinin (Yardım Merkezi).
Varsayılan İkili Kapsayıcı Dosyaları
Kural gerektiren varsayılan kapsayıcılar, ikili kapsayıcı dosyası kullanmalıdır JSON yerine dosyasını varsayılan kapsayıcı olarak ayarlayın. İkili program container'ları, kullanıcıların makro değerlerini Google Etiket Yöneticisi kurallarıyla birlikte, JSON dosyalarda bunu yapmaz.
İkili program kapsayıcı dosyaları, Google Etiket Yöneticisi web'den indirilebilir.
arayüz ve
proje başlatma belgesine
/assets/tagmanager/
klasörünü açıp şu kalıbı izleyin:
/assets/tagmanager/GTM-XXXX
, burada dosya adı
Kapsayıcı kimliği.
JSON dosyasının ikili kapsayıcı dosyasının olduğu mevcut bir ikili kapsayıcı dosyası varsa SDK, dosyasını seçin.
İşlev Çağrısı Makrolarını Kullanma
İşlev Çağrısı Makroları, belirtilen bir işleve ekleyin. İşlev Çağrısı Makroları, Google Etiket Yöneticisi kurallarınızla, kullanıcı için hangi fiyatın gösterileceğini belirlemek için çalışma sırasında cihazın dili ve para birimi.
İşlev çağrısı makrosu yapılandırmak için:
- Google Etiket Yöneticisi web arayüzünde işlev çağrısı makrolarını tanımlayın. Bağımsız değişkenler isteğe bağlı olarak anahtar/değer çiftleri olarak yapılandırılabilir.
- Aşağıdakini kullanarak uygulamanıza
FunctionCallMacroHandler
kaydedin:Container.registerFunctionCallMacroHandler()
ve yapılandırdığınız işlev adı değerini geçersiz kılarak bir sonrakigetValue()
yöntemi:/** * 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, önceden kaydedilmiş işlevlerin her zaman yürütülmesine
Veri katmanına ve etiket kurallarına bir etkinlik aktarıldığında
true
olarak değerlendir.
İşlev çağrısı etiketini yapılandırmak için:
- İş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 olarak yapılandırılabilir.
- Aşağıdaki komutu kullanarak uygulamanıza işlev çağrısı etiket işleyicisi kaydedin:
Container.registerFunctionCallTagHandler()
:/** * 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 Belirleme
Google Etiket Yöneticisi SDK'sı,
Mevcut kapsayıcı yaşı 12 saati aşıyorsa yeni bir kapsayıcı Bir
özel container yenileme süresi,
Timer
(
şu örneği inceleyin:
timer.scheduleTask(new TimerTask() { @Override public void run() { mContainer.refresh(); } }, delay, <new_period_in milliseconds>);
Günlükçü ile Hata Ayıklama
Google Etiket Yöneticisi SDK'sı varsayılan olarak hataları ve uyarıları günlüklere yazdırır.
Daha ayrıntılı günlük kaydının etkinleştirilmesi, hata ayıklama açısından faydalı olabilir ve
şununla kendi Logger
'inizi uygulayın:
TagManager.setLogger
, şu örnekte olduğu gibi:
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,
TagManager.getLogger().setLogLevel(LogLevel)
,
aşağıdaki örnekte olduğu gibi:
// Change the LogLevel to INFO to enable logging at INFO and higher levels. TagManager tagManager = TagManager.getInstance(this); tagManager.getLogger().setLogLevel(LogLevel.INFO);