يوضِّح دليل المطوِّر هذا كيفية تنفيذ أداة "إدارة العلامات من Google" في تطبيق للأجهزة الجوّالة.
مقدمة
تتيح أداة "إدارة العلامات من Google" للمطوّرين تغيير الإعدادات. القيم في تطبيقات الأجهزة الجوّالة باستخدام إدارة العلامات من Google بدون الحاجة إلى إعادة إنشاء البرامج الثنائية للتطبيق وإعادة إرسالها إلى التطبيق الأسواق.
ويكون هذا مفيدًا لإدارة أي قيم ضبط أو علامات في تطبيقك قد تحتاج إلى تغييرها في المستقبل، بما في ذلك:
- إعدادات متنوعة لواجهة المستخدم وسلاسل عرض
- أحجام الإعلانات أو المواقع الجغرافية أو أنواع الإعلانات المعروضة في تطبيقك
- إعدادات الألعاب
يمكن أيضًا تقييم قيم الإعدادات في وقت التشغيل باستخدام القواعد تفعيل الإعدادات الديناميكية مثل:
- استخدام حجم الشاشة لتحديد حجم إعلان بانر
- استخدام اللغة والموقع لضبط عناصر واجهة المستخدم
تعمل أداة "إدارة العلامات من Google" أيضًا على تفعيل التنفيذ الديناميكي لعلامات التتبّع ووحدات البكسل في التطبيقات. يمكن للمطوّرين إرسال الأحداث المهمة إلى بيانات. وحدد علامات التتبع أو وحدات البكسل التي ينبغي تنشيطها لاحقًا. تتيح أداة "إدارة العلامات من Google" حاليًا العلامات التالية:
- إحصاءات التطبيقات للأجهزة الجوّالة من Google
- علامة استدعاء الدالة المخصّصة
قبل البدء
قبل استخدام دليل البدء هذا، ستحتاج إلى ما يلي:
- حساب على "إدارة العلامات من Google"
- أداة جديدة لإدارة العلامات ماكرو جمع القيم والحاوية
- تطبيق للأجهزة الجوّالة لنظام التشغيل iOS يمكن من خلاله تنفيذ إدارة العلامات من Google
- خدمات Google Analytics SDK التي تحتوي على مكتبة "إدارة العلامات من Google".
إذا كنت مستخدِمًا جديدًا لأداة "إدارة العلامات من Google"، ننصحك التعرُّف على مزيد من المعلومات عن الحاويات ووحدات الماكرو والقواعد (مركز المساعدة) قبل مواصلة هذا الدليل.
البدء
سيوجِّه هذا القسم المطوِّرين خلال سير العمل النموذجي لأداة "إدارة العلامات من Google":
- إضافة حزمة تطوير البرامج (SDK) لأداة "إدارة العلامات من Google" إلى مشروعك
- ضبط قيم الحاوية التلقائية
- فتح الحاوية
- الحصول على قيم الإعداد من الحاوية
- إرسال الأحداث إلى DataLayer
- المعاينة نشر الحاوية
1. إضافة حزمة تطوير البرامج (SDK) الخاصة بأداة "إدارة العلامات من Google" إلى مشروعك
قبل استخدام حزمة تطوير البرامج (SDK) لأداة "إدارة العلامات من Google"، عليك إضافة
libGoogleAnalyticsServices.a
وملفات عنوان "إدارة العلامات من Google" من Library
لحزمة SDK إلى مشروعك.
بعد ذلك، أضف ما يلي إلى المكتبات المرتبطة باستهداف تطبيقك إذا كانت: غير موجودة بالفعل:
CoreData.framework
SystemConfiguration.framework
libz.dylib
libsqlite3.dylib
libGoogleAnalyticsServices.a
إذا أردت أن يصل تطبيقك إلى معرّف للمعلنين (IDFA) وعلامة التتبّع التي يوفّرها إطار العمل هذا من خلال وحدات ماكرو لحزمة تطوير البرامج (SDK) في "إدارة العلامات من Google"، ستحتاج أيضًا إلى ربط هذه المكتبات الإضافية:
libAdIdAccess.a
AdSupport.framework
2. إضافة ملف حاوية افتراضي إلى مشروعك
تستخدم أداة "إدارة العلامات من Google" حاوية تلقائية عند التشغيل الأول لتطبيقك. الإعداد التلقائي حتى يتمكن التطبيق من استرداد حاوية جديدة عبر الشبكة.
لتنزيل برنامج ثنائي لحاوية افتراضية وإضافتها إلى تطبيقك، اتبع الخطوات التالية:
- سجِّل الدخول إلى واجهة ويب أداة "إدارة العلامات من Google".
- اختَر إصدار الحاوية التي تريد تنزيلها.
- انقر على الزر تنزيل لاسترداد البرنامج الثنائي للحاوية.
- أضِف الملف الثنائي إلى الدليل الجذر لمشروعك والانتقال إلى قسم "الملفات الداعمة" المستخدم في مشروعك.
يجب أن يكون اسم الملف التلقائي هو معرّف الحاوية (على سبيل المثال GTM-1234
). بمجرد
تنزيل الملف الثنائي، تأكد من إزالة لاحقة الإصدار من اسم الملف
للتأكد من اتباع اصطلاح التسمية الصحيح.
وعلى الرغم من أننا ننصح باستخدام الملف الثنائي، إذا لم تكن الحاوية تحتوي على قواعد أو علامات،
يمكنك اختيار استخدام طريقة
قائمة الخصائص أو JSON
ملف بدلاً من ذلك.
يجب وضع الملف في الحزمة الرئيسية ويجب أن يتبع
اصطلاح التسمية هذا: <Container_ID>.<plist|json>
.
على سبيل المثال، إذا كان رقم تعريف الحاوية GTM-1234
، يمكنك تحديد
قيم الحاوية التلقائية في ملف قائمة خصائص باسم
GTM-1234.plist
3- فتح حاوية
قبل استرداد القيم من حاوية، يجب فتح التطبيق الحاوية. سيؤدي فتح الحاوية إلى تحميلها من القرص (إذا كان متاحًا)، أو يطلبه من الشبكة (إذا لزم الأمر).
تتمثل أسهل طريقة لفتح حاوية على iOS في استخدام
openContainerWithId:tagManager:openType:timeout:notifier:
، كما في المثال التالي:
// MyAppDelegate.h // This example assumes this file is using ARC. #import <UIKit/UIKit.h> @class TAGManager; @class TAGContainer; @interface MyAppDelegate : UIResponder <UIApplicationDelegate> @property (nonatomic, strong) TAGManager *tagManager; @property (nonatomic, strong) TAGContainer *container; @end // MyAppDelegate.m // This example assumes this file is using ARC. #import "MyAppDelegate.h" #import "TAGContainer.h" #import "TAGContainerOpener.h" #import "TAGManager.h" @interface MyAppDelegate ()<TAGContainerOpenerNotifier> @end @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.tagManager = [TAGManager instance]; // Optional: Change the LogLevel to Verbose to enable logging at VERBOSE and higher levels. [self.tagManager.logger setLogLevel:kTAGLoggerLogLevelVerbose]; /* * Opens a container. * * @param containerId The ID of the container to load. * @param tagManager The TAGManager instance for getting the container. * @param openType The choice of how to open the container. * @param timeout The timeout period (default is 2.0 seconds). * @param notifier The notifier to inform on container load events. */ [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Update with your Container ID. tagManager:self.tagManager openType:kTAGOpenTypePreferFresh timeout:nil notifier:self]; // Method calls that don't need the container. return YES; } // TAGContainerOpenerNotifier callback. - (void)containerAvailable:(TAGContainer *)container { // Note that containerAvailable may be called on any thread, so you may need to dispatch back to // your main thread. dispatch_async(dispatch_get_main_queue(), ^{ self.container = container; }); } // The rest of your app delegate implementation.
4. الحصول على قيم التهيئة من الحاوية
بعد فتح الحاوية، يمكن استرداد قيم الضبط باستخدام
الـ
طريقتان (<type>ForKey:
):
// Retrieving a configuration value from a Tag Manager Container. MyAppDelegate *appDelegate = (MyAppDelegate *)[[UIApplication sharedApplication] delegate]; TAGContainer *container = appDelegate.container; // Get the configuration value by key. NSString *title = [container stringForKey:@"title_string"];
ستؤدي الطلبات التي يتم إجراؤها باستخدام مفتاح غير متوفّر إلى عرض قيمة تلقائية مناسبة. إلى النوع المطلوب:
// Empty keys will return a default value depending on the type requested. // Key does not exist. An empty string is returned. NSString subtitle = [container stringForKey:@"Non-existent-key"]; [subtitle isEqualToString:@""]; // Evaluates to true.
5- دفع القيم إلى DataLayer
DataLayer عبارة عن خريطة تُمكّن معلومات وقت التشغيل حول تطبيقك، مثل اللمسات. الأحداث أو مرات مشاهدة الصفحة في التطبيق، لتصبح متاحة لوحدات ماكرو إدارة العلامات وعلاماتها في .
على سبيل المثال، من خلال دفع معلومات حول مشاهدات الشاشة إلى خريطة DataLayer، يمكنك إعداد العلامات في واجهة الويب على أداة "إدارة العلامات من Google" لتنشيط وحدات البكسل في الإحالات الناجحة. وتتبُّع المكالمات استجابةً لمشاهدات الشاشة بدون الحاجة إلى بترميزها في تطبيقك.
يتم إرسال الأحداث إلى DataLayer باستخدام push:
.
// // ViewController.m // Pushing an openScreen event with a screen name into the data layer. // #import "MyAppDelegate.h" #import "TAGDataLayer.h" #import "ViewController.h" @implementation ViewController - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; // The container should have already been opened, otherwise events pushed to // the data layer will not fire tags in that container. TAGDataLayer *dataLayer = [TAGManager instance].dataLayer; [dataLayer push:@{@"event": @"openScreen", @"screenName": @"Home Screen"}]; } // Rest of the ViewController implementation @end
في واجهة الويب، يمكنك الآن إنشاء علامات (مثل علامات "إحصاءات Google"). لتنشيطها لكل مشاهدة شاشة من خلال إنشاء هذه القاعدة: يساوي "openscreen". لتمرير اسم الشاشة إلى إحدى هذه العلامات، أنشئ ماكرو لطبقة البيانات يشير إلى "اسم الشاشة" في طبقة البيانات. يمكنك أيضًا إنشاء علامة (مثل وحدات بكسل الإحالة الناجحة في "إعلانات Google") ليتم تنشيطها فقط لمشاهدات شاشة معيّنة، عن طريق إنشاء قاعدة حيث يساوي "openscreen" & تساوي "Confirmationscreen".
6- المعاينة نشر حاوية
ستتوافق قيم الماكرو دائمًا مع الإصدار المنشور حاليًا. قبل نشر أحدث إصدار من الحاوية، يمكنك معاينة حاوية المسودة.
لمعاينة حاوية، أنشِئ عنوان URL للمعاينة في Google
واجهة ويب "إدارة العلامات من Google" عن طريق اختيار إصدار الحاوية
التي تريد معاينتها، ثم اختَر Preview
. الانتظار إلى
عنوان URL للمعاينة هذا، حيث ستحتاج إليه في خطوات لاحقة.
![تتوفّر معاينة عناوين URL في نافذة معاينة العلامة.
واجهة الويب للمدير](https://developers.google.cn/static/tag-platform/tag-manager/images/android/v3/preview.png?hl=ar)
لتفعيل معاينات الحاوية، يجب إضافة رمز إلى تطبيقك. تفويض ملف التنفيذ وتحديد عنوان URL لمعاينة "إدارة العلامات من Google" المخطط في قائمة ممتلكات مشروعك.
أولاً، أضِف مقتطفات الرموز المكتوبة بخط غامق إلى ملف تفويض تطبيقك:
@implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.tagManager = [TAGManager instance]; // Add the code in bold below to preview a Google Tag Manager container. // IMPORTANT: This code must be called before the container is opened. NSURL *url = [launchOptions valueForKey:UIApplicationLaunchOptionsURLKey]; if (url != nil) { [self.tagManager previewWithUrl:url]; } id<TAGContainerFuture> future = [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Placeholder Container ID. tagManager:self.tagManager openType:kTAGOpenTypePreferNonDefault timeout:nil]; // The rest of your method implementation. self.container = [future get]; return YES; } // Add the code in bold below preview a Google Tag Manager container. - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { if ([self.tagManager previewWithUrl:url]) { return YES; } // Code to handle other urls. return NO; }
بعد ذلك، سجل معرِّف عنوان URL التالي ومخطّط عنوان URL ضمن مفتاح أنواع عناوين URL لملف قائمة خصائص تطبيقك:
URL identifier: your.package_name URL scheme: tagmanager.c.your.package.name
![سجّل مخطط عنوان URL لمعاينة أداة "إدارة العلامات من Google" في ملف
ملف قائمة الخصائص.](https://developers.google.cn/static/tag-manager/img/ios/plist.png?hl=ar)
افتح الرابط على محاكي أو جهاز فعلي عليك معاينة حاوية المسودة في تطبيقك.
عندما تكون مستعدًا لإتاحة قيم مسودّتك للإعدادات التطبيق، نشر الحاوية.
إعداد متقدم
يشتمل برنامج إدارة العلامات من Google للأجهزة الجوّالة على عدد من الإعدادات المتقدمة التي تسمح لك بتحديد القيم بناءً على شروط بيئة التشغيل باستخدام قواعد، وتحديث الحاوية يدويًا، والحصول على خيارات إضافية لفتح الأخرى. توضّح الأقسام التالية العديد من الخيارات المتقدمة الأكثر شيوعًا الإعدادات.
خيارات متقدمة لفتح الحاويات
توفر حزمة SDK لإدارة العلامات من Google العديد من الطرق لفتح حاويات تمنحك مزيدًا من التحكم في عملية التحميل:
openContainerById:callback:
openContainerById:callback:
هي واجهة برمجة التطبيقات الأدنى والأكثر مرونة لفتح
. ويتم إرجاعها فورًا باستخدام حاوية افتراضية
يقوم أيضًا بتحميل حاوية من القرص أو الشبكة بشكل غير متزامن إذا لم يتم حفظ
أو إذا كانت الحاوية المحفوظة غير حديثة (منذ أكثر من 12 ساعة).
@interface ContainerCallback : NSObject<TAGContainerCallback> @end @implementation ContainerCallback /** * Called before the refresh is about to begin. * * @param container The container being refreshed. * @param refreshType The type of refresh which is starting. */ - (void)containerRefreshBegin:(TAGContainer *)container refreshType:(TAGContainerCallbackRefreshType)refreshType { // Notify UI that container refresh is beginning. } /** * Called when a refresh has successfully completed for the given refresh type. * * @param container The container being refreshed. * @param refreshType The type of refresh which completed successfully. */ - (void)containerRefreshSuccess:(TAGContainer *)container refreshType:(TAGContainerCallbackRefreshType)refreshType { // Notify UI that container is available. } /** * Called when a refresh has failed to complete for the given refresh type. * * @param container The container being refreshed. * @param failure The reason for the refresh failure. * @param refreshType The type of refresh which failed. */ - (void)containerRefreshFailure:(TAGContainer *)container failure:(TAGContainerCallbackRefreshFailure)failure refreshType:(TAGContainerCallbackRefreshType)refreshType { // Notify UI that container request has failed. } @end
خلال عملية التحميل، حدثت openContainerById:callback:
مشكلة.
عدة عمليات استدعاء لمراحل النشاط المختلفة حتى يتمكن الرمز الخاص بك من معرفة وقت
بدء طلب التحميل، وما إذا كان سبب إخفاقه أو نجاحه، وما إذا
تم تحميل الحاوية في النهاية من القرص أو الشبكة.
ما لم يكن تطبيقك مقبولاً لاستخدام القيم التلقائية، ستحتاج إلى استخدام عمليات معاودة الاتصال هذه لمعرفة متى تم حفظ تم تحميل الحاوية. لاحظ أنك لن تتمكن من تحميل ملف إذا كانت هذه هي المرة الأولى التي يتم فيها تشغيل التطبيق ولم تكن هناك الاتصال بالشبكة.
اجتاز "openContainerById:callback:
" اختبار enum
التالي
القيم كوسيطات إلى عمليات الاستدعاء هذه:
RefreshType
القيمة | الوصف |
---|---|
kTAGContainerCallbackRefreshTypeSaved
|
يحمّل طلب التحديث حاوية محفوظة محليًا. |
kTAGContainerCallbackRefreshTypeNetwork
|
يحمِّل طلب إعادة التحميل حاوية عبر الشبكة. |
RefreshFailure
القيمة | الوصف |
---|---|
kTAGContainerCallbackRefreshFailureNoSavedContainer
|
لا تتوفّر أيّ حاوية محفوظة. |
kTAGContainerCallbackRefreshFailureIoError
|
أدّى خطأ الإدخال/الإخراج إلى منع إعادة تحميل الحاوية. |
kTAGContainerCallbackRefreshFailureNoNetwork
| ليس هناك اتصال بالشبكة. |
kTAGContainerCallbackRefreshFailureNetworkError
|
حدث خطأ في الشبكة. |
kTAGContainerCallbackRefreshFailureServerError
|
حدث خطأ في الخادم. |
kTAGContainerCallbackRefreshFailureUnknownError
|
حدث خطأ لا يمكن تصنيفه. |
طرق فتح الحاويات غير التلقائية والطازجة
التفافTAGContainerOpener
openContainerById:callback:
وتوفر طريقتين ملائمة لفتح الحاويات:
openContainerWithId:tagManager:openType:timeout:notifier:
و
openContainerWithId:tagManager:openType:timeout:
تأخذ كل طريقة من هذه الطرق تعدادًا يطلب إما قيمًا غير افتراضية أو حاوية جديدة.
يُنصَح باستخدام kTAGOpenTypePreferNonDefault
لمعظم التطبيقات
يحاول عرض أول حاوية غير تلقائية متاحة داخل
المهلة، سواء من القرص أو الشبكة، حتى إذا كانت هذه الحاوية أكبر
منذ 12 ساعة. وإذا عرضت حاوية قديمة محفوظة، فسيؤدي أيضًا إلى إنشاء
طلب شبكة غير متزامن لطلب شبكة جديد.
عند استخدام kTAGOpenTypePreferNonDefault
، يتم استخدام
في حال عدم توفر أي حاوية أخرى، أو في حال
تجاوز.
هناك محاولة واحدة (kTAGOpenTypePreferFresh
) لعرض حاوية جديدة من
إما على القرص أو الشبكة خلال فترة المهلة المحددة.
وتعرض حاوية محفوظة إذا كانت الشبكة
الاتصال غير متاح و/أو تم تجاوز مدة المهلة.
لا يُنصح باستخدام السمة kTAGOpenTypePreferFresh
في الأماكن التي قد يؤثر فيها وقت الطلب الأطول بشكل ملحوظ في تجربة المستخدم
كما هو الحال مع علامات واجهة المستخدم أو سلاسل العرض. يمكنك أيضًا استخدام
TAGContainer::refresh
في أي وقت
لفرض طلب حاوية شبكة.
لا تؤدي هاتان الطريقتان الملائمتان إلى حظر الوصول.
تُرجع openContainerWithId:tagManager:openType:timeout:
كائن TAGContainerFuture
الذي تعرض طريقة get
له
TAGContainer
فور تحميله (ولكن سيتم حظره حتى ذلك الحين).
تستخدم الطريقة openContainerWithId:tagManager:openType:timeout:notifier:
استدعاءً واحدًا،
يتم استدعاؤه عند توفر الحاوية.
لكل من الطريقتين مدة مهلة افتراضية تبلغ
2.0
ثانية
تقييم وحدات الماكرو في وقت التشغيل باستخدام القواعد
يمكن للحاويات تقييم القيم في وقت التشغيل باستخدام القواعد. قد تستند القواعد على معايير مثل لغة الجهاز أو النظام الأساسي أو أي قيمة ماكرو أخرى. بالنسبة على سبيل المثال، يمكن استخدام القواعد لاختيار سلسلة عرض مترجمة استنادًا إلى لغة الجهاز في وقت التشغيل. يمكن تهيئة ذلك باستخدام القاعدة التالية:
![تُستخدم قاعدة لاختيار سلاسل عرض استنادًا إلى لغة الجهاز في
وقت التشغيل: اللغة تساوي es. تستخدم هذه القاعدة لغة محدَّدة مسبقًا
ماكرو ورمز لغة مكون من حرفين وفقًا لمعيار ISO 639-1.](https://developers.google.cn/static/tag-platform/tag-manager/images/android/v3/rules.png?hl=ar)
يمكنك بعد ذلك إنشاء وحدات ماكرو لجمع القيم لكل لغة، وإضافة إلى كل وحدة ماكرو، مع إدخال رمز اللغة المناسب. عندما تكون هذه الحاوية تم نشر، سيتمكن تطبيقك من عرض شاشة مترجَمة السلاسل بناءً على لغة جهاز المستخدم في وقت التشغيل.
ملاحظة: إذا كانت حاويتك التلقائية بحاجة إلى قواعد، عليك استخدام ملف الحاوية الثنائية كإعداد تلقائي .
مزيد من المعلومات عن ضبط القواعد (مركز المساعدة)
ملفات الحاوية التلقائية الثنائية
يجب أن تستخدم الحاويات التلقائية التي تحتاج إلى قواعد ملف حاوية ثنائية. بدلاً من ملف قائمة الخصائص أو JSON كحاوية تلقائية. تقدم الحاويات الثنائية الدعم لتحديد قيم الماكرو في وقت التشغيل باستخدام قواعد إدارة العلامات من Google، في حين أن قائمة الخصائص أو JSON على العكس من ذلك.
يمكن تنزيل ملفات الحاويات الثنائية من موقع "إدارة العلامات من Google" على الويب.
وواجهة
إلى حزمة التطبيق الرئيسية باتباع اصطلاح التسمية هذا:
GTM-XXXX
، حيث يمثل اسم الملف
رقم تعريف الحاوية.
في الحالات التي يكون فيها ملف قائمة الخصائص و/أو ملف JSON بالإضافة إلى وجود ملف حاوية ثنائية، فإن حزمة SDK ستستخدم الحاوية الثنائية كحاوية افتراضية.
استخدام وحدات ماكرو لاستدعاء الدالة
وحدات ماكرو الاستدعاء للدالة هي وحدات ماكرو يتم تعيينها على القيمة التي تعرضها لدالة محددة في تطبيقك. يمكن استخدام الدالة "وحدات ماكرو" للاستدعاء دمج قيم وقت التشغيل مع قواعد أداة "إدارة العلامات من Google"، مثل في وقت التشغيل، تحديد السعر الذي سيتم عرضه للمستخدم استنادًا إلى السعر واللغة والعملة للجهاز.
لإعداد ماكرو لاستدعاء الدالة:
- حدِّد وحدة ماكرو لاستدعاء الدالة في واجهة ويب أداة "إدارة العلامات من Google". يمكن ضبط الوسيطات بشكل اختياري كأزواج مفتاح/قيمة.
- تحديد معالج ينفّذ
TAGFunctionCallMacroHandler
البروتوكول:// MyFunctionCallMacroHandler.h #import "TAGContainer.h" // The function name field of the macro, as defined in the Google Tag Manager // web interface. extern NSString *const kMyMacroFunctionName; @interface MyFunctionCallMacroHandler : NSObject<TAGFunctionCallMacroHandler> @end // MyFunctionCallMacroHandler.m #import "MyFunctionCallMacroHandler.h" // Corresponds to the function name field in the Google Tag Manager interface. NSString *const kMyMacroFunctionName = @"myConfiguredFunctionName"; @implementation MacroHandler - (id)valueForMacro:(NSString *)functionName parameters:(NSDictionary *)parameters { if ([functionName isEqualToString:kMyMacroFunctionName]) { // Process and return the calculated value of this macro accordingly. return macro_value; } return nil; } @end
- تسجيل المعالِج باستخدام TAGContainer::registerFunctionCallDataHandler:for لحملات ماكرو: واسم الدالة المحدّدة في واجهة أداة "إدارة العلامات من Google":
// // MyAppDelegate.h // #import <UIKit/UIKit.h> @interface MyAppDelegate : UIResponder <UIApplicationDelegate> @end // // MyAppDelegate.m // #import "MyAppDelegate.h" #import "MyFunctionCallMacroHandler.h" #import "TAGContainer.h" #import "TAGContainerOpener.h" #import "TAGManager.h" @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Open the container. id<TAGContainerFuture> future = [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Placeholder Container ID. tagManager:[TAGManager instance] openType:kTAGOpenTypePreferNonDefault timeout:nil]; // Method calls that don't need the container. self.container = [future get]; // Register a function call macro handler using the macro name defined // in the Google Tag Manager web interface. [self.container registerFunctionCallMacroHandler:[[MyFunctionCallMacroHandler alloc] init] forMacro:kMyMacroFunctionName]; } @end
استخدام علامات استدعاء الدالة
تتيح علامات الاستدعاء للدالة تنفيذ الوظائف المسجَّلة مسبقًا متى
يتمّ دفع حدث إلى طبقة البيانات وقواعد العلامة
التقييم إلى true
.
لضبط علامة طلب دالة:
- حدِّد علامة استدعاء الدالة في واجهة ويب أداة "إدارة العلامات من Google". يمكن ضبط الوسيطات بشكل اختياري كأزواج مفتاح/قيمة.
- تنفيذ بروتوكول
TAGFunctionCallTagHandler
:// // MyFunctionCallTagHandler.h // #import "TAGContainer.h" extern NSString *const kMyTagFunctionName; @interface MyFunctionCallTagHandler : NSObject<TAGFunctionCallTagHandler> @end // // MyFunctionCallTagHandler.m // // Corresponds to the function name field in the Google Tag Manager interface. NSString *const kMyTagFunctionName = @"myConfiguredFunctionName"; @implementation MyFunctionCallTagHandler /** * This method will be called when any custom tag's rule(s) evaluate to true and * should check the functionName and process accordingly. * * @param functionName corresponds to the function name field, not tag * 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. */ - (void)execute:(NSString *)functionName parameters:(NSDictionary *)parameters { if ([functionName isEqualToString:kMyTagFunctionName]) { // Process accordingly. } } @end
- سجِّل معالِج علامة طلب الدالة باستخدام اسم العلامة الذي تم ضبطه في واجهة الويب لبرنامج "إدارة العلامات من Google":
// // MyAppDelegate.h // #import <UIKit/UIKit.h> @interface MyAppDelegate : UIResponder <UIApplicationDelegate> @end // // MyAppDelegate.m // #import "MyAppDelegate.h" #import "MyFunctionCallTagHandler.h" #import "TAGContainer.h" #import "TAGContainerOpener.h" #import "TAGManager.h" @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Open the container. id<TAGContainerFuture> future = [TAGContainerOpener openContainerWithId:@"GTM-XXXX" // Placeholder Container ID. tagManager:[TAGManager instance] openType:kTAGOpenTypePreferNonDefault timeout:nil]; // Method calls that don't need the container. self.container = [future get]; // Register a function call tag handler using the function name of the tag as // defined in the Google Tag Manager web interface. [self.container registerFunctionCallTagHandler:[[MyFunctionCallTagHandler alloc] init] forTag:kMyTagFunctionName]; } @end
إعداد فترة تحديث مخصصة
ستحاول حزمة تطوير البرامج (SDK) لأداة "إدارة العلامات من Google" استرداد
حاوية جديدة إذا تجاوز عمر الحاوية الحالي 12 ساعة. لضبط
فترة إعادة تحميل الحاوية المخصصة، استخدام
NSTimer
، كما في
المثال التالي:
- (void)refreshContainer:(NSTimer *)timer { [self.container refresh]; } self.refreshTimer = [NSTimer scheduledTimerWithTimeInterval:<refresh_interval> target:self selector:@selector(refreshContainer:) userInfo:nil repeats:YES];
تصحيح الأخطاء باستخدام أداة التسجيل
تطبع حزمة تطوير البرامج (SDK) في أداة "إدارة العلامات من Google" الأخطاء والتحذيرات في السجلّات بشكلٍ تلقائي.
يمكن أن يكون تمكين المزيد من التسجيل المطوَّل مفيدًا لتصحيح الأخطاء ويمكن حدوثه من خلال
تنفيذ Logger
الخاصة بك، كما في هذا المثال:
// MyAppDelegate.h // This example assumes this file is using ARC. // This Logger class will print out not just errors and warnings (as the default // logger does), but also info, debug, and verbose messages. @interface MyLogger: NSObject<TAGLogger> @end @implementation MyLogger - (void)error:(NSString *)message { NSLog(@"Error: %@", message); } - (void)warning:(NSString *)message { NSLog(@"Warning: %@", message); } - (void)info:(NSString *)message { NSLog(@"Info: %@", message); } - (void)debug:(NSString *)message { NSLog(@"Debug: %@", message); } - (void)verbose:(NSString *)message { NSLog(@"Verbose: %@", message); } @end // MyAppDelegate.m // This example assumes this file is using ARC. @implementation MyAppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { self.tagManager = [TAGManager instance]; self.tagManager.logger = [[MyLogger alloc] init]; // Rest of Tag Manager and method implementation. return YES; } // Rest of app delegate implementation. @end
أو يمكنك ضبط LogLevel للمسجِّل الحالي باستخدام
TagManager::logger::setLogLevel
,
كما في هذا المثال:
// Change the LogLevel to INFO to enable logging at INFO and higher levels. self.tagManager = [TAGManager instance]; [self.tagManager.logger setLogLevel:kTAGLoggerLogLevelInfo];