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 هي خريطة تتيح إمكانية توفير معلومات وقت التشغيل عن تطبيقك، مثل أحداث اللمس أو طرق عرض الشاشة، في وحدات الماكرو وعلامات "إدارة العلامات من Google" في حاوية.

على سبيل المثال، من خلال دفع معلومات عن مرّات مشاهدة الصفحة في التطبيق إلى خريطة 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". ولتمرير اسم الشاشة إلى إحدى هذه العلامات، أنشِئ وحدة ماكرو لطبقة البيانات تشير إلى المفتاح screenName في طبقة البيانات. يمكنك أيضًا إنشاء علامة (مثل بكسل إحالة ناجحة في "إعلانات Google") لتنشيطها فقط لمشاهدات شاشة معيّنة، وذلك عن طريق إنشاء قاعدة يكون فيها يساوي "openScreen" && يساوي "ConfirmationScreen".

6. معاينة حاوية ونشرها

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

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

تتوفّر معاينة عناوين URL في نافذة المعاينة على واجهة الويب لأداة &quot;إدارة العلامات من Google&quot;.
الشكل 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 كحاوية تلقائية. وتتيح الحاويات الثنائية إمكانية تحديد قيم الماكرو في وقت التشغيل باستخدام قواعد "إدارة العلامات من 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.

});

يمكنك بدلاً من ذلك ضبط Log Level للمسجِّل الحالي باستخدام 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);