Android v3 (الإصدار القديم) - نظرة عامة

يوضِّح دليل المطوِّر هذا كيفية تنفيذ أداة "إدارة العلامات من Google" في تطبيق للأجهزة الجوّالة.

مقدمة

تتيح أداة "إدارة العلامات من Google" للمطوّرين تغيير الإعدادات. القيم في تطبيقات الأجهزة الجوّالة باستخدام إدارة العلامات من Google بدون الحاجة إلى إعادة إنشاء البرامج الثنائية للتطبيق وإعادة إرسالها إلى التطبيق الأسواق.

ويكون هذا مفيدًا لإدارة أي قيم ضبط أو علامات في تطبيقك قد تحتاج إلى تغييرها في المستقبل، بما في ذلك:

  • إعدادات متنوعة لواجهة المستخدم وسلاسل عرض
  • أحجام الإعلانات أو المواقع الجغرافية أو أنواع الإعلانات المعروضة في تطبيقك
  • إعدادات الألعاب

يمكن أيضًا تقييم قيم الإعدادات في وقت التشغيل باستخدام القواعد تفعيل الإعدادات الديناميكية مثل:

  • استخدام حجم الشاشة لتحديد حجم إعلان بانر
  • استخدام اللغة والموقع لضبط عناصر واجهة المستخدم

تعمل أداة "إدارة العلامات من Google" أيضًا على تفعيل التنفيذ الديناميكي لعلامات التتبّع ووحدات البكسل في التطبيقات. يمكن للمطوّرين إرسال الأحداث المهمة إلى بيانات. وحدد علامات التتبع أو وحدات البكسل التي ينبغي تنشيطها لاحقًا. تتيح أداة "إدارة العلامات من Google" حاليًا العلامات التالية:

  • إحصاءات التطبيقات للأجهزة الجوّالة من Google
  • علامة استدعاء الدالة المخصّصة

قبل البدء

قبل استخدام دليل البدء هذا، ستحتاج إلى ما يلي:

إذا كنت مستخدِمًا جديدًا لأداة "إدارة العلامات من Google"، ننصحك التعرُّف على مزيد من المعلومات عن الحاويات ووحدات الماكرو والقواعد (مركز المساعدة) قبل مواصلة هذا الدليل.

البدء

سيوجِّه هذا القسم المطوِّرين خلال سير العمل النموذجي لأداة "إدارة العلامات من Google":

  1. إضافة حزمة تطوير البرامج (SDK) لأداة "إدارة العلامات من Google" إلى مشروعك
  2. ضبط قيم الحاوية التلقائية
  3. فتح الحاوية
  4. الحصول على قيم الإعداد من الحاوية
  5. إرسال الأحداث إلى DataLayer
  6. المعاينة نشر الحاوية

1. إضافة حزمة تطوير البرامج (SDK) الخاصة بأداة "إدارة العلامات من Google" إلى مشروعك

قبل استخدام حزمة تطوير البرامج (SDK) لأداة "إدارة العلامات من Google"، عليك فكّ ضغط حزمة تطوير البرامج (SDK). وأضِف المكتبة إلى مسار إنشاء مشروعك، ثم أضِف الأذونات. إلى ملف AndroidManifest.xml.

أولاً، أضِف مكتبة "إدارة العلامات من Google" إلى المجلد /libs في لمشروعك.

بعد ذلك، عليك تعديل ملف AndroidManifest.xml لاستخدام ما يلي: الأذونات:

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

2. إضافة ملف حاوية افتراضي إلى مشروعك

تستخدم أداة "إدارة العلامات من Google" حاوية تلقائية عند التشغيل الأول لتطبيقك. الإعداد التلقائي حتى يتمكن التطبيق من استرداد حاوية جديدة عبر الشبكة.

لتنزيل برنامج ثنائي لحاوية افتراضية وإضافتها إلى تطبيقك، اتبع الخطوات التالية:

  1. سجِّل الدخول إلى واجهة ويب أداة "إدارة العلامات من Google".
  2. اختَر إصدار الحاوية التي تريد تنزيلها.
  3. انقر على الزر تنزيل لاسترداد البرنامج الثنائي للحاوية.
  4. أضِف الملف الثنائي إلى المسار التالي: <project-root>/assets/tagmanager/

يجب أن يكون اسم الملف التلقائي هو معرّف الحاوية (على سبيل المثال GTM-1234). بمجرد تنزيل الملف الثنائي، تأكد من إزالة لاحقة الإصدار من اسم الملف للتأكد من اتباع اصطلاح التسمية الصحيح.

وعلى الرغم من أننا ننصح باستخدام الملف الثنائي، إذا لم تكن الحاوية تحتوي على قواعد أو علامات، يمكنك اختيار استخدام طريقة JSON ملف بدلاً من ذلك. يجب وضع الملف في /assets/tagmanager جديد. في مشروع Android ويجب أن يتبع اصطلاح التسمية هذا: <Container_ID>.json على سبيل المثال، إذا كان رقم تعريف الحاوية هي GTM-1234، عليك إضافة قيم الحاوية التلقائية إلى /assets/tagmanager/GTM-1234.json

3- فتح حاوية

قبل استرداد القيم من حاوية، يجب فتح التطبيق الحاوية. سيؤدي فتح الحاوية إلى تحميلها من القرص (إذا كان متاحًا)، أو يطلبه من الشبكة (إذا لزم الأمر).

تتمثل أسهل طريقة لفتح حاوية على Android في استخدام 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، نضمن أن عدم حظر سلسلة التعليمات الرئيسية وإذا كان عمر الحاوية المحفوظة أقدم من 12 ساعة، سيؤدي الاتصال أيضًا إلى جدولة طلب لاسترداد حاوية جديدة بشكل غير متزامن عبر الشبكة.

يمثل هذا التنفيذ النموذجي أبسط طريقة لفتح واسترداد من إحدى الحاويات باستخدام الفئة المناسبة ContainerOpener. للتعرّف على خيارات تنفيذ أكثر تقدّمًا، يُرجى الاطّلاع على الإعداد المتقدّم.

4. الحصول على قيم التهيئة من الحاوية

بعد فتح الحاوية، يمكن استرداد قيم الضبط باستخدام 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.

5- دفع القيم إلى DataLayer

DataLayer عبارة عن خريطة تُمكّن معلومات وقت التشغيل حول تطبيقك، مثل اللمسات. الأحداث أو مرات مشاهدة الصفحة في التطبيق، لتصبح متاحة لوحدات ماكرو إدارة العلامات وعلاماتها في .

على سبيل المثال، من خلال دفع معلومات حول مشاهدات الشاشة إلى خريطة DataLayer، يمكنك إعداد العلامات في واجهة الويب على أداة "إدارة العلامات من Google" لتنشيط وحدات البكسل في الإحالات الناجحة. وتتبُّع المكالمات استجابةً لمشاهدات الشاشة بدون الحاجة إلى بترميزها في تطبيقك.

يتم إرسال الأحداث إلى DataLayer باستخدام push() طريقة المساعدة DataLayer.mapOf():

//
// 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
}

في واجهة الويب، يمكنك الآن إنشاء علامات (مثل علامات "إحصاءات Google"). لتنشيطها لكل مشاهدة شاشة من خلال إنشاء هذه القاعدة: يساوي "openscreen". لتمرير اسم الشاشة إلى إحدى هذه العلامات، أنشئ ماكرو لطبقة البيانات يشير إلى "اسم الشاشة" في طبقة البيانات. يمكنك أيضًا إنشاء علامة (مثل وحدات بكسل الإحالة الناجحة في "إعلانات Google") ليتم تنشيطها فقط لمشاهدات شاشة معيّنة، عن طريق إنشاء قاعدة حيث يساوي "openscreen" &amp;&amp; تساوي "Confirmationscreen".

6- المعاينة نشر حاوية

ستتوافق قيم الماكرو دائمًا مع الإصدار المنشور حاليًا. قبل نشر أحدث إصدار من الحاوية، يمكنك معاينة حاوية المسودة.

لمعاينة حاوية، أنشِئ عنوان URL للمعاينة في Google واجهة ويب "إدارة العلامات من Google" عن طريق اختيار إصدار الحاوية التي تريد معاينتها، ثم اختَر Preview. الانتظار إلى عنوان URL للمعاينة هذا، حيث ستحتاج إليه في خطوات لاحقة.

تتوفّر معاينة عناوين URL في نافذة معاينة العلامة.
           واجهة الويب للمدير
الشكل 1: الحصول على عنوان URL للمعاينة من واجهة ويب "إدارة العلامات من Google"

بعد ذلك، أضف النشاط التالي إلى ملف ملف 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 للأجهزة الجوّالة على عدد من الإعدادات المتقدمة التي تسمح لك بتحديد القيم بناءً على شروط بيئة التشغيل باستخدام قواعد، وتحديث الحاوية يدويًا، والحصول على خيارات إضافية لفتح الأخرى. توضّح الأقسام التالية العديد من الخيارات المتقدمة الأكثر شيوعًا الإعدادات.

خيارات متقدمة لفتح الحاويات

توفر حزمة SDK لإدارة العلامات من Google العديد من الطرق لفتح حاويات تمنحك مزيدًا من التحكم في عملية التحميل:

TagManager.openContainer()

TagManager.openContainer() هي واجهة برمجة التطبيقات الأدنى والأكثر مرونة لفتح . ويتم إرجاعها فورًا باستخدام حاوية افتراضية يقوم أيضًا بتحميل حاوية من القرص أو الشبكة بشكل غير متزامن إذا لم يتم حفظ أو إذا كانت الحاوية المحفوظة غير حديثة (منذ أكثر من 12 ساعة).

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() مشكلة. عدة عمليات استدعاء لمراحل النشاط المختلفة حتى يتمكن الرمز الخاص بك من معرفة وقت بدء طلب التحميل، وما إذا كان سبب إخفاقه أو نجاحه، وما إذا تم تحميل الحاوية في النهاية من القرص أو الشبكة.

ما لم يكن تطبيقك مقبولاً لاستخدام القيم التلقائية، ستحتاج إلى استخدام عمليات معاودة الاتصال هذه لمعرفة متى تم حفظ تم تحميل الحاوية. لاحظ أنك لن تتمكن من تحميل ملف إذا كانت هذه هي المرة الأولى التي يتم فيها تشغيل التطبيق ولم تكن هناك الاتصال بالشبكة.

اجتاز "TagManager.openContainer()" اختبار enum التالي القيم كوسيطات إلى عمليات الاستدعاء هذه:

RefreshType

القيمةالوصف
Container.Callback.SAVED يحمّل طلب التحديث حاوية محفوظة محليًا.
Container.Callback.NETWORK يحمِّل طلب إعادة التحميل حاوية عبر الشبكة.

RefreshFailure

القيمةالوصف
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)

تأخذ كل طريقة من هذه الطرق تعدادًا يطلب إما قيمًا غير افتراضية أو حاوية جديدة.

يُنصَح باستخدام OpenType.PREFER_NON_DEFAULT لمعظم التطبيقات يحاول عرض أول حاوية غير تلقائية متاحة داخل المهلة، سواء من القرص أو الشبكة، حتى إذا كانت هذه الحاوية أكبر منذ 12 ساعة. وإذا عرضت حاوية قديمة محفوظة، فسيؤدي أيضًا إلى إنشاء طلب شبكة غير متزامن لطلب شبكة جديد. عند استخدام OpenType.PREFER_NON_DEFAULT، يتم استخدام في حال عدم توفر أي حاوية أخرى، أو في حال تجاوز.

يحاول OpenType.PREFER_FRESH إرجاع حاوية جديدة من أيّ من القرص أو الشبكة خلال فترة المهلة المحدّدة. وتعرض حاوية محفوظة إذا كانت الشبكة الاتصال غير متاح و/أو تم تجاوز مدة المهلة.

لا يُنصح باستخدام السمة OpenType.PREFER_FRESH في الأماكن التي قد يؤثر فيها وقت الطلب الأطول بشكل ملحوظ في تجربة المستخدم كما هو الحال مع علامات واجهة المستخدم أو سلاسل العرض. يمكنك أيضًا استخدام Container.refresh() في أي وقت لفرض طلب حاوية شبكة.

لا تؤدي هاتان الطريقتان الملائمتان إلى حظر الوصول. تُرجع ContainerOpener.openContainer(..., Long timeoutInMillis) كائن ContainerOpener.ContainerFuture الذي تعرض طريقة get له Container فور تحميله (ولكن سيتم حظره حتى ذلك الحين). تستخدم الطريقة ContainerOpener.openContainer(..., Notifier notifier) استدعاءً واحدًا، يتم استدعاؤه عند توفر الحاوية، والتي يمكن استخدامها لمنع حظر سلسلة التعليمات الرئيسية. لكل من الطريقتين مدة مهلة افتراضية تبلغ 2000 مللي ثانية.

تقييم وحدات الماكرو في وقت التشغيل باستخدام القواعد

يمكن للحاويات تقييم القيم في وقت التشغيل باستخدام القواعد. قد تستند القواعد على معايير مثل لغة الجهاز أو النظام الأساسي أو أي قيمة ماكرو أخرى. بالنسبة على سبيل المثال، يمكن استخدام القواعد لاختيار سلسلة عرض مترجمة استنادًا إلى لغة الجهاز في وقت التشغيل. يمكن تهيئة ذلك باستخدام القاعدة التالية:

تُستخدم قاعدة لاختيار سلاسل عرض استنادًا إلى لغة الجهاز في
            وقت التشغيل: اللغة تساوي es. تستخدم هذه القاعدة لغة محدَّدة مسبقًا
            ماكرو ورمز لغة مكون من حرفين وفقًا لمعيار ISO 639-1.
الشكل 1: إضافة قاعدة لتفعيل ماكرو جمع القيم للأجهزة فقط تم إعدادها لاستخدام اللغة الإسبانية.

يمكنك بعد ذلك إنشاء وحدات ماكرو لجمع القيم لكل لغة، وإضافة إلى كل وحدة ماكرو، مع إدراج رمز اللغة المناسب. عندما تكون هذه الحاوية تم نشر، سيتمكن تطبيقك من عرض شاشة مترجَمة السلاسل بناءً على لغة جهاز المستخدم في وقت التشغيل.

ملاحظة: إذا كانت حاويتك التلقائية بحاجة إلى قواعد، عليك استخدام ملف الحاوية الثنائية كإعداد تلقائي .

مزيد من المعلومات عن ضبط القواعد (مركز المساعدة)

ملفات الحاوية التلقائية الثنائية

يجب أن تستخدم الحاويات التلقائية التي تحتاج إلى قواعد ملف حاوية ثنائية. بدلاً من ملف JSON file كحاوية افتراضية. تقدم الحاويات الثنائية الدعم لتحديد قيم الماكرو في وقت التشغيل باستخدام قواعد إدارة العلامات من Google، في حين أن JSON على العكس من ذلك.

يمكن تنزيل ملفات الحاويات الثنائية من موقع "إدارة العلامات من Google" على الويب. وواجهة إلى حساب مشروعك مجلد واحد (/assets/tagmanager/) واتّبع النمط التالي: /assets/tagmanager/GTM-XXXX، حيث يمثل اسم الملف رقم تعريف الحاوية.

في الحالات التي يكون فيها ملف JSON بالإضافة إلى وجود ملف حاوية ثنائية، فإن حزمة SDK ستستخدم الحاوية الثنائية كحاوية افتراضية.

استخدام وحدات ماكرو لاستدعاء الدالة

وحدات ماكرو الاستدعاء للدالة هي وحدات ماكرو يتم تعيينها على القيمة التي تعرضها لدالة محددة في تطبيقك. يمكن استخدام الدالة "وحدات ماكرو" للاستدعاء دمج قيم وقت التشغيل مع قواعد أداة "إدارة العلامات من Google"، مثل في وقت التشغيل، تحديد السعر الذي سيتم عرضه للمستخدم استنادًا إلى السعر واللغة والعملة للجهاز.

لإعداد ماكرو لاستدعاء الدالة:

  1. حدِّد وحدة ماكرو لاستدعاء الدالة في واجهة ويب أداة "إدارة العلامات من Google". يمكن ضبط الوسيطات بشكل اختياري كأزواج مفتاح/قيمة.
  2. تسجيل FunctionCallMacroHandler في تطبيقك باستخدام Container.registerFunctionCallMacroHandler() واسم الدالة الذي ضبطته في واجهة الويب لبرنامج إدارة العلامات من Google، حيث يتم إلغاء طريقة 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.

لضبط علامة طلب دالة:

  1. حدِّد علامة استدعاء الدالة في واجهة ويب أداة "إدارة العلامات من Google". يمكن ضبط الوسيطات بشكل اختياري كأزواج مفتاح/قيمة.
  2. تسجيل معالج علامة استدعاء الدالة في تطبيقك باستخدام 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) لأداة "إدارة العلامات من Google" استرداد حاوية جديدة إذا تجاوز عمر الحاوية الحالي 12 ساعة. لضبط فترة إعادة تحميل الحاوية المخصصة، استخدام Timer ، كما في المثال التالي:

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

تصحيح الأخطاء باستخدام أداة التسجيل

تطبع حزمة تطوير البرامج (SDK) في أداة "إدارة العلامات من Google" الأخطاء والتحذيرات في السجلّات بشكلٍ تلقائي. يمكن أن يكون تمكين المزيد من التسجيل المطوَّل مفيدًا لتصحيح الأخطاء ويمكن حدوثه من خلال تنفيذ 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 للمسجِّل الحالي باستخدام 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);