این راهنمای توسعهدهندگان، نحوهی پیادهسازی گوگل تگ منیجر در یک اپلیکیشن موبایل را شرح میدهد.
مقدمه
گوگل تگ منیجر به توسعهدهندگان این امکان را میدهد که با استفاده از رابط کاربری گوگل تگ منیجر، مقادیر پیکربندی را در برنامههای تلفن همراه خود تغییر دهند، بدون اینکه نیازی به بازسازی و ارسال مجدد فایلهای باینری برنامه به بازارهای برنامه داشته باشند.
این برای مدیریت هرگونه مقادیر پیکربندی یا پرچمهایی در برنامه شما که ممکن است در آینده نیاز به تغییر داشته باشند، مفید است، از جمله:
- تنظیمات مختلف رابط کاربری و رشتههای نمایشی
- اندازهها، مکانها یا انواع تبلیغاتی که در برنامه شما ارائه میشوند
- تنظیمات بازی
مقادیر پیکربندی همچنین میتوانند در زمان اجرا با استفاده از قوانین ارزیابی شوند و پیکربندیهای پویا مانند موارد زیر را امکانپذیر سازند:
- استفاده از اندازه صفحه نمایش برای تعیین اندازه بنر تبلیغاتی
- استفاده از زبان و مکان برای پیکربندی عناصر رابط کاربری
Google TagManager همچنین امکان پیادهسازی پویای تگها و پیکسلهای ردیابی را در برنامهها فراهم میکند. توسعهدهندگان میتوانند رویدادهای مهم را در یک لایه داده قرار دهند و بعداً تصمیم بگیرند که کدام تگها یا پیکسلهای ردیابی باید فعال شوند. TagManager از تگهای زیر پشتیبانی میکند:
- تجزیه و تحلیل اپلیکیشن موبایل گوگل
- برچسب فراخوانی تابع سفارشی
قبل از شروع
قبل از استفاده از این راهنمای شروع، به موارد زیر نیاز دارید:
- یک حساب کاربری گوگل تگ منیجر
- یک کانتینر جدید برای مدیریت برچسب و ماکروی جمعآوری مقادیر
- یک اپلیکیشن موبایل برای اندروید که میتوان گوگل تگ منیجر را در آن پیادهسازی کرد
- کیت توسعه نرمافزار (SDK) سرویسهای گوگل آنالیتیکس که شامل کتابخانه تگ منیجر است.
اگر در استفاده از گوگل تگ منیجر تازهکار هستید، توصیه میکنیم قبل از ادامه این راهنما ، درباره کانتینرها، ماکروها و قوانین (مرکز راهنما) اطلاعات بیشتری کسب کنید.
شروع به کار
این بخش، توسعهدهندگان را در جریان گردش کار معمول Tag Manager راهنمایی میکند:
- کیت توسعه نرمافزار (SDK) گوگل تگ منیجر را به پروژه خود اضافه کنید.
- مقادیر پیشفرض کانتینر را تنظیم کنید
- کانتینر را باز کنید
- دریافت مقادیر پیکربندی از کانتینر
- ارسال رویدادها به لایه داده
- پیشنمایش و انتشار کانتینر
۱. افزودن SDK گوگل تگ منیجر به پروژه شما
قبل از استفاده از SDK گوگل تگ منیجر، باید بسته SDK را استخراج کرده و کتابخانه را به مسیر ساخت پروژه خود اضافه کنید و مجوزها را به فایل AndroidManifest.xml خود اضافه کنید.
ابتدا، کتابخانه Google Tag Manager را به پوشه /libs پروژه خود اضافه کنید.
در مرحله بعد، فایل AndroidManifest.xml خود را بهروزرسانی کنید تا از مجوزهای زیر استفاده کند:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.INTERNET" />
۲. افزودن یک فایل کانتینر پیشفرض به پروژهتان
گوگل تگ منیجر در اولین اجرای برنامه شما از یک کانتینر پیشفرض استفاده میکند. کانتینر پیشفرض تا زمانی که برنامه بتواند کانتینر جدیدی را از طریق شبکه بازیابی کند، استفاده خواهد شد.
برای دانلود و افزودن یک فایل باینری کانتینر پیشفرض به برنامه خود، این مراحل را دنبال کنید:
- وارد رابط وب گوگل تگ منیجر شوید.
- نسخه کانتینری که میخواهید دانلود کنید را انتخاب کنید.
- برای بازیابی فایل باینری کانتینر، روی دکمه دانلود کلیک کنید.
- فایل باینری را به مسیر زیر اضافه کنید:
< project-root >/assets/tagmanager/
نام فایل پیشفرض باید شناسه کانتینر (container ID) باشد (برای مثال GTM-1234 ). پس از دانلود فایل باینری، حتماً پسوند نسخه (version suffix) را از نام فایل حذف کنید تا از رعایت صحیح قرارداد نامگذاری اطمینان حاصل شود.
اگرچه استفاده از فایل باینری توصیه میشود، اما اگر کانتینر شما حاوی قوانین یا تگها نیست، میتوانید به جای آن از یک فایل JSON استفاده کنید. این فایل باید در پوشه جدید /assets/tagmanager در پروژه اندروید شما قرار گیرد و باید از این قرارداد نامگذاری پیروی کند: <Container_ID>.json . به عنوان مثال، اگر شناسه کانتینر شما GTM-1234 است، باید مقادیر پیشفرض کانتینر خود را به /assets/tagmanager/GTM-1234.json اضافه کنید.
۳. باز کردن یک کانتینر
قبل از بازیابی مقادیر از یک کانتینر، برنامه شما باید کانتینر را باز کند. باز کردن یک کانتینر، آن را از دیسک (در صورت وجود) بارگذاری میکند، یا آن را از شبکه (در صورت نیاز) درخواست میکند.
سادهترین راه برای باز کردن یک کانتینر در اندروید، استفاده از ContainerOpener.openContainer(..., Notifier notifier) است، مانند مثال زیر:
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. } }
در این مثال، ContainerOpener.openContainer(..., Notifier notifier) برای درخواست یک کانتینر ذخیره شده از حافظه محلی استفاده میشود. با مدیریت تخصیص mContainer در فراخوانی containerAvailable ، اطمینان حاصل میکنیم که نخ اصلی مسدود نشده است. اگر کانتینر ذخیره شده قدیمیتر از ۱۲ ساعت باشد، فراخوانی همچنین درخواستی را برای بازیابی غیرهمزمان یک کانتینر جدید از طریق شبکه زمانبندی میکند.
این پیادهسازی نمونه، سادهترین روش برای باز کردن و بازیابی مقادیر از یک کانتینر با استفاده از کلاس ContainerOpener را نشان میدهد. برای گزینههای پیادهسازی پیشرفتهتر، به Advanced Configuration مراجعه کنید.
۴. دریافت مقادیر پیکربندی از کانتینر
پس از باز شدن کانتینر، میتوان مقادیر پیکربندی را با استفاده از متدهای get<type>Value() بازیابی کرد:
// Retrieving a configuration value from a Tag Manager Container. // Get the configuration value by key. String title = mContainer.getStringValue("title_string");
درخواستهایی که با کلیدی که وجود ندارد انجام میشوند، مقدار پیشفرضی متناسب با نوع درخواست را برمیگردانند:
// 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.
۵. ارسال مقادیر به لایه داده
لایه داده (DataLayer) نقشهای است که امکان دسترسی به اطلاعات زمان اجرا در مورد برنامه شما، مانند رویدادهای لمسی یا نماهای صفحه نمایش را برای ماکروها و تگهای Tag Manager در یک کانتینر فراهم میکند.
برای مثال، با وارد کردن اطلاعات مربوط به نماهای صفحه نمایش به نقشه DataLayer، میتوانید تگهایی را در رابط وب Tag Manager تنظیم کنید تا پیکسلهای تبدیل و فراخوانیهای ردیابی را در پاسخ به آن نماهای صفحه نمایش، بدون نیاز به کدنویسی دقیق آنها در برنامه خود، فعال کنند.
رویدادها با استفاده از push() و متد کمکی DataLayer.mapOf() به DataLayer ارسال میشوند:
// // 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 }
در رابط وب، اکنون میتوانید با ایجاد این قانون، تگهایی (مانند تگهای گوگل آنالیتیکس) ایجاد کنید که برای هر نمای صفحه نمایش فعال شوند: برابر با "openScreen" است. برای ارسال نام صفحه نمایش به یکی از این تگها، یک ماکروی لایه داده ایجاد کنید که به کلید "screenName" در لایه داده اشاره میکند. همچنین میتوانید با ایجاد قانونی که در آن برابر با "openScreen" و برابر با "ConfirmationScreen" باشد، یک تگ (مانند پیکسل تبدیل گوگل ادز) ایجاد کنید که فقط برای نماهای صفحه نمایش خاص فعال شود.
۶. پیشنمایش و انتشار یک کانتینر
مقادیر ماکرو همیشه با نسخه منتشر شده فعلی مطابقت دارند. قبل از انتشار آخرین نسخه یک کانتینر، میتوانید پیشنمایشی از کانتینر پیشنویس خود را مشاهده کنید.
برای پیشنمایش یک کانتینر، با انتخاب نسخه کانتینری که میخواهید پیشنمایش آن را ببینید و سپس انتخاب Preview ، یک URL پیشنمایش در رابط وب Google Tag Manager ایجاد کنید. این URL پیشنمایش را ذخیره کنید زیرا در مراحل بعدی به آن نیاز خواهید داشت.

سپس، Activity زیر را به فایل AndroidManifest.xml برنامه خود اضافه کنید:
<!-- 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>
برای پیشنمایش کانتینر پیشنویس در برنامه خود، لینک را روی یک شبیهساز یا دستگاه فیزیکی باز کنید.
وقتی آماده بودید که مقادیر پیکربندی پیشنویس خود را در دسترس برنامهتان قرار دهید، کانتینر را منتشر کنید .
پیکربندی پیشرفته
گوگل تگ منیجر برای موبایل تعدادی گزینه پیکربندی پیشرفته دارد که به شما امکان میدهد مقادیر را بر اساس شرایط زمان اجرا با استفاده از قوانین انتخاب کنید، کانتینر را به صورت دستی رفرش کنید و گزینههای بیشتری برای باز کردن کانتینرها داشته باشید. بخشهای زیر چندین مورد از رایجترین پیکربندیهای پیشرفته را شرح میدهند.
گزینههای پیشرفته برای باز کردن کانتینرها
کیت توسعه نرمافزار گوگل تگ منیجر (Google Tag Manager SDK) روشهای مختلفی برای باز کردن کانتینرها ارائه میدهد که میتوانند کنترل بیشتری بر فرآیند بارگذاری به شما بدهند:
TagManager.openContainer()
TagManager.openContainer() پایینترین سطح و انعطافپذیرترین API برای باز کردن یک کانتینر است. این API بلافاصله یک کانتینر پیشفرض را برمیگرداند و همچنین اگر کانتینر ذخیرهشدهای وجود نداشته باشد، یا اگر کانتینر ذخیرهشده تازه نباشد (بیش از ۱۲ ساعت از تاریخ آن گذشته باشد)، آن را به صورت غیرهمزمان از دیسک یا شبکه بارگذاری میکند.
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. }
در طول فرآیند بارگذاری، TagManager.openContainer() چندین فراخوانی چرخه عمر صادر میکند تا کد شما بتواند بفهمد که درخواست بارگذاری چه زمانی آغاز میشود، آیا و چرا با شکست مواجه میشود یا موفق میشود، و اینکه آیا کانتینر در نهایت از دیسک یا شبکه بارگذاری شده است یا خیر.
مگر اینکه استفاده از مقادیر پیشفرض برای برنامه شما قابل قبول باشد، باید از این callbackها برای اطلاع از زمان بارگذاری یک کانتینر ذخیره شده یا شبکه استفاده کنید. توجه داشته باشید که اگر این اولین بار است که برنامه اجرا میشود و اتصال شبکه وجود ندارد، نمیتوانید یک کانتینر ذخیره شده یا شبکه را بارگذاری کنید.
TagManager.openContainer() مقادیر enum زیر را به عنوان آرگومان به این callbackها ارسال میکند:
نوع تازهسازی
| ارزش | توضیحات |
|---|---|
Container.Callback.SAVED | درخواست بهروزرسانی در حال بارگذاری یک کانتینر ذخیرهشده محلی است. |
Container.Callback.NETWORK | درخواست بهروزرسانی در حال بارگذاری یک کانتینر از طریق شبکه است. |
عدم موفقیت در تازهسازی
| ارزش | توضیحات |
|---|---|
Container.Callback.NO_SAVED_CONTAINER | هیچ ظرف ذخیره شدهای در دسترس نیست. |
Container.Callback.IO_ERROR | یک خطای ورودی/خروجی مانع از بهروزرسانی کانتینر شد. |
Container.Callback.NO_NETWORK | هیچ اتصال شبکهای در دسترس نیست. |
Container.Callback.NETWORK_ERROR | خطایی در شبکه رخ داده است. |
Container.Callback.SERVER_ERROR | خطایی در سرور رخ داده است. |
Container.Callback.UNKNOWN_ERROR | خطایی رخ داده است که نمیتوان آن را دستهبندی کرد. |
روشهای باز کردن کانتینرهای غیر پیشفرض و کانتینرهای تازه
ContainerOpener TagManager.openContainer() را در بر میگیرد و دو متد برای باز کردن کانتینرها ارائه میدهد: ContainerOpener.openContainer(..., Notifier notifier) و ContainerOpener.openContainer(..., Long timeoutInMillis) .
هر یک از این متدها یک enumeration دریافت میکنند که یک container غیر پیشفرض یا fresh را درخواست میکند.
OpenType.PREFER_NON_DEFAULT برای اکثر برنامهها توصیه میشود و تلاش میکند اولین کانتینر غیر پیشفرض موجود را در یک دوره زمانی مشخص، چه از دیسک و چه از شبکه، حتی اگر آن کانتینر بیش از ۱۲ ساعت قدمت داشته باشد، بازگرداند. اگر یک کانتینر ذخیره شده قدیمی را برگرداند، یک درخواست شبکه ناهمزمان برای یک کانتینر جدید نیز ارسال میکند. هنگام استفاده از OpenType.PREFER_NON_DEFAULT ، اگر هیچ کانتینر دیگری در دسترس نباشد یا اگر دوره زمانی از دست رفته باشد، یک کانتینر پیشفرض بازگردانده میشود.
OpenType.PREFER_FRESH تلاش میکند تا یک کانتینر جدید را از دیسک یا شبکه در مدت زمان مشخص شده برگرداند. اگر اتصال شبکه در دسترس نباشد و/یا از مدت زمان مشخص شده تجاوز شود، یک کانتینر ذخیره شده را برمیگرداند.
استفاده از OpenType.PREFER_FRESH در جاهایی که زمان درخواست طولانیتر ممکن است به طور قابل توجهی بر تجربه کاربر تأثیر بگذارد، مانند پرچمهای رابط کاربری یا رشتههای نمایش، توصیه نمیشود. همچنین میتوانید در هر زمانی Container.refresh() برای اعمال درخواست کانتینر شبکه استفاده کنید.
هر دوی این متدهای کمکی غیر مسدودکننده هستند. ContainerOpener.openContainer(..., Long timeoutInMillis) یک شیء ContainerOpener.ContainerFuture را برمیگرداند که متد get آن به محض بارگذاری یک Container (اما تا آن زمان مسدود خواهد بود) آن را برمیگرداند. متد ContainerOpener.openContainer(..., Notifier notifier) یک فراخوانی مجدد واحد میگیرد که وقتی Container در دسترس باشد فراخوانی میشود و میتواند برای جلوگیری از مسدود شدن thread اصلی استفاده شود. هر دو متد دارای دوره زمانی پیشفرض 2000 میلیثانیه هستند.
ارزیابی ماکروها در زمان اجرا با استفاده از قوانین
کانتینرها میتوانند مقادیر را در زمان اجرا با استفاده از قوانین ارزیابی کنند. قوانین ممکن است بر اساس معیارهایی مانند زبان دستگاه، پلتفرم یا هر مقدار ماکروی دیگری باشند. به عنوان مثال، میتوان از قوانین برای انتخاب یک رشته نمایش محلی بر اساس زبان دستگاه در زمان اجرا استفاده کرد. این را میتوان با استفاده از قانون زیر پیکربندی کرد:

سپس میتوانید ماکروهای جمعآوری مقادیر را برای هر زبان ایجاد کنید و این قانون را به هر ماکرو اضافه کنید و کد زبان مناسب را وارد کنید. هنگامی که این کانتینر منتشر شود، برنامه شما قادر خواهد بود رشتههای نمایشی محلی را بسته به زبان دستگاه کاربر در زمان اجرا نمایش دهد.
توجه داشته باشید که اگر کانتینر پیشفرض شما به قوانین نیاز دارد، باید از یک فایل کانتینر باینری به عنوان کانتینر پیشفرض خود استفاده کنید.
درباره پیکربندی قوانین بیشتر بدانید (مرکز راهنما).
فایلهای کانتینر پیشفرض دودویی
کانتینرهای پیشفرض که به قوانین نیاز دارند، باید به جای فایل JSON از یک فایل کانتینر باینری به عنوان کانتینر پیشفرض استفاده کنند. کانتینرهای باینری از تعیین مقادیر ماکرو در زمان اجرا با قوانین Google Tag Manager پشتیبانی میکنند، در حالی که فایلهای JSON این قابلیت را ندارند.
فایلهای کانتینر باینری را میتوان از رابط وب گوگل تگ منیجر دانلود کرد و باید به پوشه /assets/tagmanager/ پروژه شما اضافه شوند و از الگوی زیر پیروی کنند: /assets/tagmanager/GTM-XXXX ، که در آن نام فایل نشاندهنده شناسه کانتینر شما است.
در مواردی که یک فایل JSON و همچنین یک فایل کانتینر باینری وجود داشته باشد، SDK از فایل کانتینر باینری به عنوان کانتینر پیشفرض استفاده خواهد کرد.
استفاده از ماکروهای فراخوانی تابع
ماکروهای فراخوانی تابع، ماکروهایی هستند که روی مقدار بازگشتی یک تابع مشخص در برنامه شما تنظیم میشوند. ماکروهای فراخوانی تابع میتوانند برای ترکیب مقادیر زمان اجرا با قوانین گوگل تگ منیجر شما استفاده شوند، مانند تعیین قیمت نمایش داده شده به کاربر در زمان اجرا بر اساس زبان و واحد پول پیکربندی شده دستگاه.
برای پیکربندی یک ماکروی فراخوانی تابع:
- ماکروی فراخوانی تابع را در رابط وب گوگل تگ منیجر تعریف کنید. آرگومانها میتوانند به صورت اختیاری به صورت جفتهای کلید-مقدار پیکربندی شوند.
- با استفاده از
Container.registerFunctionCallMacroHandler()و نام تابعی که در رابط وب Google Tag Manager پیکربندی کردهاید، یکFunctionCallMacroHandlerدر برنامه خود ثبت کنید و متد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; } });
استفاده از تگهای فراخوانی تابع
تگهای فراخوانی تابع، توابع از پیش ثبتشده را قادر میسازند تا هر زمان که رویدادی به لایه داده وارد میشود و قوانین تگ به صورت true ارزیابی میشوند، اجرا شوند.
برای پیکربندی یک تگ فراخوانی تابع:
- تگ فراخوانی تابع را در رابط وب گوگل تگ منیجر تعریف کنید. آرگومانها میتوانند به صورت اختیاری به صورت جفتهای کلید-مقدار پیکربندی شوند.
- با استفاده از
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. } } });
تنظیم دوره بهروزرسانی سفارشی
اگر سن کانتینر فعلی از ۱۲ ساعت بیشتر شود، SDK گوگل تگ منیجر سعی میکند یک کانتینر جدید را بازیابی کند. برای تنظیم دوره بهروزرسانی کانتینر سفارشی، از Timer مانند مثال زیر استفاده کنید:
timer.scheduleTask(new TimerTask() { @Override public void run() { mContainer.refresh(); } }, delay, <new_period_in milliseconds>);
اشکال زدایی با Logger
کیت توسعه نرمافزاری گوگل تگ منیجر (Google Tag Manager SDK) به طور پیشفرض خطاها و هشدارها را در لاگها چاپ میکند. فعال کردن لاگهای طولانیتر میتواند برای اشکالزدایی مفید باشد و با پیادهسازی Logger خودتان با TagManager.setLogger امکانپذیر است، مانند این مثال:
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. });
یا میتوانید سطح لاگ (LogLevel) مربوط به Logger موجود را با استفاده از TagManager.getLogger().setLogLevel(LogLevel) تنظیم کنید، مانند این مثال:
// Change the LogLevel to INFO to enable logging at INFO and higher levels. TagManager tagManager = TagManager.getInstance(this); tagManager.getLogger().setLogLevel(LogLevel.INFO);