واجهات برمجة التطبيقات لوضع العلامات من جهة الخادم

يوضّح هذا المستند واجهات برمجة التطبيقات لوضع علامات التتبُّع من جانب الخادم.


addEventCallback

تسجّل هذه السمة دالة ردّ اتصال سيتم استدعاؤها في نهاية أحد الأحداث. سيتم استدعاء الدالة عند تنفيذ جميع العلامات الخاصة بالحدث. يتم تمرير قيمتَين إلى دالة الاستدعاء: رقم تعريف الحاوية التي تستدعي الدالة وعنصر يحتوي على معلومات عن الحدث.

عند استخدام واجهة برمجة التطبيقات هذه في علامة، يتم ربطها بالحدث الحالي. عند استخدام واجهة برمجة التطبيقات هذه في برنامج، يجب ربطها بحدث معيّن باستخدام دالة bindToEvent في واجهة برمجة التطبيقات runContainer. يُرجى الاطّلاع على المثال لمزيد من التفاصيل.

البنية

const addEventCallback = require('addEventCallback');

addEventCallback((containerId, eventData) => {
  // Take some action based on the event data.
});

المعلّمات

المَعلمة النوع الوصف
callback الدالة الدالة التي يتم استدعاؤها في نهاية الحدث.

يحتوي العنصر eventData على البيانات التالية:

اسم المفتاح النوع الوصف
tags Array مصفوفة من عناصر بيانات العلامات وستحتوي هذه المصفوفة على إدخال لكل علامة تم تنشيطها أثناء الحدث. يحتوي عنصر بيانات العلامة على معرّف العلامة (id) وحالة تنفيذها (status) ووقت تنفيذها (executionTime). ستتضمّن بيانات العلامة أيضًا بيانات وصفية إضافية تم ضبطها على العلامة.

مثال

في تطبيق العميل:

const addEventCallback = require('addEventCallback');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const logToConsole = require('logToConsole');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

claimRequest();

const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((evt, i) => {
  runContainer(evt, /* onComplete= */ (bindToEvent) => {
    bindToEvent(addEventCallback)((containerId, eventData) => {
      logToConsole('Event Number: ' + i);
      eventData.tags.forEach((tag) => {
        logToConsole('Tag ID: ' + tag.id);
        logToConsole('Tag Status: ' + tag.status);
        logToConsole('Tag Execution Time: ' + tag.executionTime);
      });
    });
    if (events.length === ++eventsCompleted) {
      returnResponse();
    }
  });
});

في علامة:

const addEventCallback = require('addEventCallback');

addEventCallback((containerId, eventData) => {
  // This will be called at the end of the current event.
});

الأذونات المرتبطة

read_event_metadata


callLater

تحدّد هذه الدالة موعدًا لاستدعاء دالة بشكل غير متزامن. سيتم استدعاء الدالة بعد عرض الرمز الحالي. يعادل هذا المبلغ setTimeout(<function>, 0).

مثال

const callLater = require('callLater');
const logToConsole = require('logToConsole');

callLater(() => {
  logToConsole('Logged asynchronously');
});

البنية

callLater(function)

المعلّمات

المَعلمة النوع الوصف
function الدالة الدالة التي سيتم استدعاؤها

الأذونات المرتبطة

بلا عُري


claimRequest

استخدِم واجهة برمجة التطبيقات هذه في برنامج عميل للمطالبة بالطلب. بعد المطالبة بطلب، لا تشغّل الحاوية برامج إضافية.

تعرض واجهة برمجة التطبيقات هذه استثناءً إذا تم استدعاؤها في علامة أو متغيّر. تُصدر واجهة برمجة التطبيقات هذه استثناءً إذا تم استدعاؤها بعد أن يعرض العميل (على سبيل المثال، إذا تم استدعاؤها في دالة ردّ اتصال غير متزامنة مثل callLater أو الدالة runContainer onComplete).

على العميل إثبات ملكية الطلب باستخدام واجهة برمجة التطبيقات هذه قبل طلب البيانات من واجهة runContainer API.

مثال

const claimRequest = require('claimRequest');

claimRequest();

البنية

claimRequest();

الأذونات المرتبطة

بلا عُري


computeEffectiveTldPlusOne

تعرِض هذه الدالة نطاق المستوى الأعلى الفعّال + 1 (eTLD+1) للنطاق أو عنوان URL المحدّدَين. يتم احتساب eTLD+1 من خلال تقييم النطاق استنادًا إلى قواعد قائمة اللاحقات العلنية. عادةً ما يكون eTLD+1 هو نطاق المستوى الأعلى الذي يمكنك ضبط ملف تعريف ارتباط عليه.

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

مثال

const computeEffectiveTldPlusOne = require('computeEffectiveTldPlusOne');

// Returns 'example.co.uk'
computeEffectiveTldPlusOne('analytics.example.co.uk');

// Returns 'example.co.uk'
computeEffectiveTldPlusOne('https://analytics.example.co.uk/path');

البنية

computeEffectiveTldPlusOne(domainOrUrl);

المعلّمات

المَعلمة النوع الوصف
domainOrUrl string نطاق أو عنوان URL يتم احتساب eTLD+1 عليه

الأذونات المرتبطة

بلا عُري


createRegex

تنشئ هذه الدالة مثيلاً جديدًا للتعبير النمطي وتعرضه ملفوفًا في كائن. لا يمكنك الوصول إلى التعبير النمطي مباشرةً. testRegexومع ذلك، يمكنك تمريرها إلى واجهة برمجة التطبيقات String.replace() وString.match() وString.search().

تعرض الدالة null إذا كان التعبير النمطي غير صالح أو إذا كانت Re2 غير متاحة على الخادم.

تستخدم واجهة برمجة التطبيقات هذه عملية تنفيذ Re2. يجب أن تكون صورة Docker للخادم بالإصدار 2.0.0 أو إصدار أحدث.

مثال

const createRegex = require('createRegex');

const domainRegex = createRegex('\\w+\\.com', 'i');

// Returns '/foobar'
'example.com/foobar'.replace(domainRegex, '');

البنية

createRegex(pattern, flags);

المعلّمات

المَعلمة النوع الوصف
pattern string نص التعبير العادي
flags string سلسلة اختيارية تحتوي على علامات التعبير النمطي الذي يتم إنشاؤه. يتم دعم `g` (عام) و `i` (تجاهل حالة الأحرف). ويتم تجاهل جميع الأحرف الأخرى بدون إشعار.

الأذونات المرتبطة

بلا عُري

الحد الأدنى لإصدار الصورة

2.0.0


decodeUri

تفكّ ترميز أي أحرف مرمّزة في معرّف الموارد الموحّد المقدَّم. تعرض هذه الدالة سلسلة تمثّل معرّف الموارد المنتظم (URI) الذي تم فك ترميزه. تعرض الدالة undefined عند تقديم إدخال غير صالح.

مثال

const decodeUri = require('decodeUri');

const decodedUrl = decodeUri(data.encodedUrl);
if (decodedUrl) {
  // ...
}

البنية

decodeUri(encoded_uri);

المعلّمات

المَعلمة النوع الوصف
encoded_uri string معرّف موارد موحّد تم ترميزه باستخدام encodeUri() أو بطرق أخرى

الأذونات المرتبطة

بلا عُري


decodeUriComponent

تفكّ ترميز أي أحرف مرمّزة في مكوّن معرّف الموارد المنتظم (URI) المقدَّم. تعرض سلسلة تمثّل مكوّن معرّف الموارد المنتظم (URI) الذي تم فك ترميزه. تعرض الدالة undefined عند إدخال قيمة غير صالحة.

مثال

const decodeUriComponent = require('decodeUriComponent');

const decodedQuery = decodeUriComponent(data.query);
if (decodedQuery) {
  // ...
}

البنية

decodeUriComponent(encoded_uri_component);

المعلّمات

المَعلمة النوع الوصف
encoded_uri_component string مكوّن معرّف موارد منتظم (URI) تم ترميزه بواسطة encodeUriComponent() أو بوسائل أخرى

الأذونات المرتبطة

بلا عُري


encodeUri

تعرض معرّف موارد منتظم (URI) مرمّزًا من خلال إلغاء الأحرف الخاصة. تعرض سلسلة تمثّل السلسلة المقدَّمة المرمّزة كمعرّف موارد منتظم (URI).

مثال

const encodeUri = require('encodeUri');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/' + encodeUri(pathInput));

البنية

encodeUri(uri);

المعلّمات

المَعلمة النوع الوصف
uri string معرّف موارد منتظم (URI) كامل

الأذونات المرتبطة

بلا عُري


encodeUriComponent

تعرض هذه الدالة معرّف موارد منتظم (URI) مرمّزًا من خلال إلغاء الأحرف الخاصة. تعرض هذه الدالة سلسلة تمثّل السلسلة المقدَّمة التي تم ترميزها كمعرّف موارد منتظم (URI).

مثال

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');

sendHttpGet('https://www.example.com/?' + encodeUriComponent(queryInput));

البنية

encodeUriComponent(str);

المعلّمات

المَعلمة النوع الوصف
str string مكوّن من معرّف موارد منتظم (URI).

الأذونات المرتبطة

بلا عُري


extractEventsFromMpv1

يتم تحويل طلب Measurement Protocol V1 الوارد إلى قائمة أحداث بتنسيق "المخطط الموحّد". لعرض قائمة الأحداث المستخرَجة يُظهر هذا الإجراء خطأ إذا لم يكن الطلب بالتنسيق الصحيح.

مثال

const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const isRequestMpv1 = require('isRequestMpv1');

if (isRequestMpv1()) {
  const events = extractEventsFromMpv1();
  for (let i = 0; i < events.length; ++i) {
    const event = events[i];
    // Process event.
  }
}

البنية

extractEventsFromMpv1();

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن read_request. يجب ضبط الإذن على السماح بالوصول إلى ما يلي على الأقل:

  • body
  • query parameters

extractEventsFromMpv2

تتم ترجمة طلب Measurement Protocol V2 الوارد إلى قائمة أحداث بتنسيق Unified Schema. تعرض هذه الدالة قائمة بالأحداث المستخرَجة. يتم عرض رسالة خطأ إذا لم يكن الطلب بالتنسيق الصحيح.

مثال

const extractEventsFromMpv2 = require('extractEventsFromMpv2');
const isRequestMpv2 = require('isRequestMpv2');

if (isRequestMpv2()) {
  const events = extractEventsFromMpv2();
  for (let i = 0; i < events.length; ++i) {
    const event = events[i];
    // Process event.
  }
}

البنية

extractEventsFromMpv2();

الأذونات المرتبطة

يتطلّب ذلك إذن read_request. يجب ضبط الإذن على السماح بالوصول إلى ما يلي على الأقل:

  • body
  • query parameters

fromBase64

لفك ترميز سلسلة بترميز base64. تعرض الدالة undefined إذا كانت القيمة المُدخَلة غير صالحة.

البنية

fromBase64(base64EncodedString);

المعلّمات

المَعلمة النوع الوصف
base64EncodedString string سلسلة Base64 المشفّرة

مثال

const fromBase64 = require('fromBase64');

const greeting = fromBase64('aGVsbG8=');
if (greeting === 'hello') {
  // ...
}

الأذونات المرتبطة

بلا عُري


generateRandom

تعرض رقمًا عشوائيًا (عدد صحيح) ضمن النطاق المحدّد.

مثال

const generateRandom = require('generateRandom');

const randomValue = generateRandom(0, 10000000);

البنية

generateRandom(min, max);

المعلّمات

المَعلمة النوع الوصف
min number الحد الأدنى للقيمة المحتملة للعدد الصحيح الذي يتم عرضه (شامل).
max number الحد الأقصى للقيمة المحتملة للعدد الصحيح الذي يتم عرضه (شامل).

الأذونات المرتبطة

بلا عُري


getAllEventData

تعرض هذه السمة نسخة من بيانات الحدث.

البنية

getAllEventData();

الأذونات المرتبطة

read_event_data


getClientName

تعرض هذه السمة سلسلة تحتوي على اسم العميل الحالي.

البنية

getClientName();

الأذونات المرتبطة

read_container_data


getContainerVersion

تعرض هذه الدالة عنصرًا يحتوي على بيانات حول الحاوية الحالية. سيتضمّن العنصر الذي تم عرضه الحقول التالية:

{
  containerId: string,
  debugMode: boolean,
  environmentName: string,
  environmentMode: boolean,
  previewMode: boolean,
  version: string,
}

مثال

const getContainerVersion = require('getContainerVersion');

const containerVersion = getContainerVersion();
const containerId = containerVersion['containerId'];
const isDebug = containerVersion['debugMode'];

البنية

getContainerVersion();

الأذونات المرتبطة

read_container_data


getCookieValues

تعرض هذه الدالة مصفوفة تحتوي على قيم جميع ملفات تعريف الارتباط التي تحمل الاسم المحدّد.

مثال

const getCookieValues = require('getCookieValues');

const lastVisit = getCookieValues('lastVisit')[0];
if (lastVisit) {
  // ...
}

البنية

getCookieValues(name[, noDecode]);

المعلّمات

المَعلمة النوع الوصف
name string اسم ملف تعريف الارتباط
noDecode boolean إذا كانت القيمة true، لن يتم فك ترميز قيم ملفات تعريف الارتباط قبل عرضها. القيمة التلقائية هي false.

الأذونات المرتبطة

get_cookies


getEventData

تعرض نسخة من القيمة في المسار المحدّد في بيانات الحدث. يتم عرض القيمة undefined في حال عدم توفّر بيانات الحدث أو في حال عدم توفّر قيمة في المسار المحدّد.

مثال

const getEventData = require('getEventData');

const campaignId = getEventData('campaign.id');
const itemId = getEventData('items.0.id');
const referrer = getEventData('page_referrer');

المعلّمات

المَعلمة النوع الوصف
keyPath any مسار المفتاح، حيث يتم فصل عناصر المسار بواسطة نقاط. يمكن أن تكون عناصر المسار عبارة عن مفاتيح في عنصر أو مؤشرات في مصفوفة. إذا لم تكن السلسلة keyPath نصية، يتم تحويلها إلى سلسلة نصية.

البنية

getEventData(keyPath);

الأذونات المرتبطة

read_event_data


getGoogleAuth

تعرض هذه الدالة عنصر تفويض يتضمّن عنوان تفويض لواجهات Google Cloud API عند استخدامه مع sendHttpGet أو sendHttpRequest. تستخدم واجهة برمجة التطبيقات هذه بيانات الاعتماد التلقائية للتطبيق للعثور تلقائيًا على بيانات الاعتماد من بيئة الخادم.

مثال

const getGoogleAuth = require('getGoogleAuth');
const logToConsole = require('logToConsole');
const sendHttpGet = require('sendHttpGet');

const auth = getGoogleAuth({
  scopes: ['https://www.googleapis.com/auth/datastore']
});

sendHttpGet(
  'https://firestore.googleapis.com/v1/projects/my-project/databases/(default)/documents/collection/document',
  {authorization: auth}
).then((result) => {
  if (result.statusCode >= 200 && result.statusCode < 300) {
    logToConsole('Result: ' + result.body);
    data.gtmOnSuccess();
  } else {
    data.gtmOnFailure();
  }
});

البنية

getGoogleAuth(scopes);

المعلّمات

المَعلمة النوع الوصف
scopes Array مصفوفة من نطاقات OAuth 2.0 في Google API لطلب الوصول إليها

الأذونات المرتبطة

يتطلّب إذن use_google_credentials. يجب ضبط الإذن باستخدام نطاق واحد أو أكثر من النطاقات المسموح بها.


getGoogleScript

تسترد هذه الطريقة موردًا من مجموعة محدّدة مسبقًا من نصوص Google البرمجية، وتعرض وعدًا يتضمّن النص البرمجي والبيانات الوصفية المرتبطة بالتخزين المؤقت.

سيتم حلّ الوعد إلى كائن يحتوي على مفتاحَين: script وmetadata. إذا تعذّر تنفيذ الطلب، سيتم رفض الوعد باستخدام مفتاح reason.

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

{
  'cache-control': string,
  'expires': string,
  'last-modified': string,
}

مثال

const getGoogleScript = require('getGoogleScript');

getGoogleScript('ANALYTICS').then((result) => {
  // Operate on result.script and result.metadata here.
});

البنية

getGoogleScript(script[, options]);

المعلّمات

المَعلمة النوع الوصف
script string تمثّل هذه السمة اسم البرنامج النصي. النصوص البرمجية المتوافقة هي 'ANALYTICS' و'GTAG' و'GTM'.

يجلب الخيار 'ANALYTICS' النص البرمجي لخدمة "إحصاءات Google" من https://www.google-analytics.com/analytics.js.

يجلب الخيار 'GTAG' نص علامة الموقع الشاملة (gtag.js) من https://www.googletagmanager.com/gtag/js.

يجلب الخيار 'GTM' نص Google Tag Manager البرمجي من https://www.googletagmanager.com/gtm.js.
options object خيارات الطلب الاختيارية يمكنك الاطّلاع أدناه على الخيارات المتاحة.

الخيارات

Option النوع الوصف
id string ينطبق ذلك على 'GTAG' مع رقم تعريف القياس الخاص بـ gtag و'GTM' مع رقم تعريف حاوية الويب (مثلاً GTM-XXXX).
debug any إذا كانت القيمة "صحيح"، يتم طلب نسخة تصحيح الأخطاء من نص القياس البرمجي وعرضها.
timeout number مهلة الطلب بالملي ثانية، ويتم تجاهل القيم غير الموجبة. إذا انتهت مهلة الطلب، سيتم استدعاء دالة الرجوع مع القيمة undefined لقيمة النص البرمجي و{} لكائن البيانات الوصفية.

يتم تجاهل مفاتيح الخيارات غير المعروفة.

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن send_http. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:

  • السماح بنطاقات Google

getRemoteAddress

تعرض هذه السمة تمثيلاً سلسلة لعنوان IP الذي نشأ منه الطلب، مثل 12.345.67.890 لعنوان IPv4 أو 2001:0db8:85a3:0:0:8a2e:0370:7334 لعنوان IPv6، وذلك من خلال قراءة عناوين الطلبات، مثل Forwarded وX-Forwarded-For. ملاحظة: تبذل واجهة برمجة التطبيقات هذه قصارى جهدها للعثور على عنوان IP المصدر، ولكن لا يمكنها ضمان دقة النتيجة.

البنية

getRemoteAddress();

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن read_request. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:

  • العناوين Forwarded وX-Forwarded-For
  • عنوان IP البعيد

getRequestBody

تعرض هذه السمة نص الطلب على شكل سلسلة، إذا كان متوفّرًا، أو undefined في حال عدم توفّره.

البنية

getRequestBody();

الأذونات المرتبطة

read_request


getRequestHeader

تعرض هذه الدالة قيمة عنوان الطلب المحدّد كـ سلسلة، في حال توفّره، أو undefined في الحالات الأخرى. إذا تكرّر العنوان، يتم دمج القيم المعروضة مع ', '.

مثال

const getRequestHeader = require('getRequestHeader');

const host = getRequestHeader('host');

البنية

getRequestHeader(headerName);

المعلّمات

المَعلمة النوع الوصف
headerName string اسم العنوان هذه القيمة غير حساسة لحالة الأحرف.

الأذونات المرتبطة

read_request


getRequestMethod

تعرض هذه الدالة طريقة الطلب، مثل 'GET' أو 'POST'، على شكل سلسلة.

مثال

const getRequestMethod = require('getRequestMethod');

if (getRequestMethod() === 'POST') {
  // Handle the POST request here.
}

البنية

getRequestMethod();

الأذونات المرتبطة

بلا عُري


getRequestPath

تعرض هذه السمة مسار الطلب بدون سلسلة طلب البحث. على سبيل المثال، إذا كان عنوان URL هو '/foo?id=123'، سيعرض هذا '/foo'. تتم تلقائيًا إزالة بادئة عنوان URL لحاوية الخادم من المسار. على سبيل المثال، إذا كان عنوان URL لحاوية الخادم هو https://example.com/analytics ومسار الطلب هو '/analytics/foo'، سيؤدي ذلك إلى عرض '/foo'.

مثال

const getRequestPath = require('getRequestPath');

const requestPath = getRequestPath();
if (requestPath === '/') {
  // Handle a request for the root path.
}

البنية

getRequestPath();

الأذونات المرتبطة

read_request


getRequestQueryParameter

تعرض هذه الدالة القيمة التي تم فك ترميزها لمَعلمة سلسلة طلب البحث المحدّدة كـ سلسلة، أو undefined إذا لم تكن المَعلمة متوفّرة. إذا تكرّرت المَعلمة في سلسلة طلب البحث، سيتم عرض القيمة الأولى التي تظهر في سلسلة طلب البحث.

مثال

const getRequestQueryParameter = require('getRequestQueryParameter');

const query = getRequestQueryParameter('query');
if (query) {
  // Process query here.
}

البنية

getRequestQueryParameter(name);

المعلّمات

المَعلمة النوع الوصف
name string اسم مَعلمة طلب البحث

الأذونات المرتبطة

read_request


getRequestQueryParameters

تعرض هذه الطريقة مَعلمات طلب البحث الواردة في طلب HTTP ككائن يربط أسماء مَعلمات طلب البحث بالقيمة أو القيم المقابلة. يتم فك ترميز أسماء المَعلمات وقيمها.

مثال

const getRequestQueryParameters = require('getRequestQueryParameters');

const queryParameters = getRequestQueryParameters();
if (queryParameters['search']) {
  // Handle the search query here.
  const maxResults = queryParameters['max_results'];
}

البنية

getRequestQueryParameters();

الأذونات المرتبطة

read_request


getRequestQueryString

تعرض هذه السمة طلب البحث كسلسلة، بدون علامة الاستفهام في البداية، أو كسلسلة فارغة إذا لم يتضمّن عنوان URL الخاص بالطلب سلسلة طلب بحث.

مثال

const getRequestQueryString = require('getRequestQueryString');

const queryString = getRequestQueryString();
if (queryString !== '') {
  // Handle the query string.
}

البنية

getRequestQueryString();

الأذونات المرتبطة

read_request


getTimestamp

تمّت إزالة هذا العمود. يُفضّل استخدام getTimestampMillis.

تعرض هذه الدالة رقمًا يمثّل الوقت الحالي بالملي ثانية منذ بداية حقبة يونكس، كما تعرضه الدالة Date.now().

البنية

getTimestamp();

الأذونات المرتبطة

بلا عُري


getTimestampMillis

تعرض هذه الدالة رقمًا يمثّل الوقت الحالي بالملي ثانية منذ حقبة يونكس، كما تعرضه الدالة Date.now().

البنية

getTimestampMillis();

الأذونات المرتبطة

بلا عُري


getType

تعرض هذه الدالة سلسلة تصف نوع القيمة المحدّدة.

نوع الإدخال القيمة المعروضة
string 'string'
number 'number'
boolean 'boolean'
null 'null'
undefined 'undefined'
المصفوفة 'array'
Object 'object'
الوظيفة 'function'

مثال

const getType = require('getType');

const type = getType(value);
if (type === 'string') {
  // Handle string input.
} else if (type === 'number') {
  // Handle numeric input.
} else {
  logToConsole('Unsupported input type: ', type);
}

البنية

getType(value);

المعلّمات

المَعلمة النوع الوصف
value أي قيمة الإدخال

الأذونات المرتبطة

بلا عُري


hmacSha256

تحسب هذه الدالة توقيعًا مرمّزًا باستخدام رمز مصادقة الرسائل المستند إلى التجزئة (HMAC) مع خوارزمية SHA-256. القيمة التلقائية هي ترميز base64url.

لاستخدام واجهة برمجة التطبيقات هذه، اضبط متغيّر البيئة SGTM_CREDENTIALS على الخادم على مسار ملف مفتاح JSON بترميز UTF-8 بالتنسيق التالي:

{
  "keys": {
    "key1": "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5",
    "key2": "OTg3NjU0MzIxMHp5eHd2dXRzcnFwb25tbGtqaWhnZmVkY2Jh",
    ...
  }
}

والقيم هي مفاتيح HMAC بترميز base64. يجب ألا يبدأ نص JSON بعلامة ترتيب البايت.

مثال

const hmacSha256 = require('hmacSha256');
const toBase64 = require('toBase64');

const header = toBase64('{"alg":"HS256","typ":"JWT"}', {urlEncoding: true});
const claim = toBase64('{"sub":"1234567890","iat":1698164946}', {urlEncoding: true});
const signature = hmacSha256(header + '.' + claim, 'key1');

const jwt = header + "." + claim + '.' + signature;

البنية

hmacSha256(data, keyId, options)

المعلّمات

المَعلمة النوع الوصف
data string البيانات المطلوب احتساب قيمة HMAC لها
keyId string معرّف مفتاح من ملف مفتاح JSON يشير إلى المفتاح المطلوب استخدامه.
options object اختياري إعداد واجهة برمجة التطبيقات. (اطّلِع على الخيارات أدناه.)

الخيارات

Option النوع الوصف
outputEncoding string تحدّد هذه السمة تنسيق الترميز الخاص بالقيمة المعروضة. التنسيقات المتوافقة هي hex أو base64 أو base64url. يتم ضبط القيمة تلقائيًا على base64url في حال عدم تحديدها.

الأذونات المرتبطة

use_custom_private_keys

الحد الأدنى لإصدار الصورة

1.0.0


isRequestMpv1

تعرض هذه المَعلمة القيمة true إذا كان الطلب الوارد هو طلب Measurement Protocol V1، أو تعرض القيمة false في الحالات الأخرى.

مثال

const isRequestMpv1 = require('isRequestMpv1');

if (isRequestMpv1()) {
  // Handle Measurement Protocol V1 request.
  const events = extractEventsFromMpv1();
}

البنية

isRequestMpv1();

الأذونات المرتبطة

بلا عُري


isRequestMpv2

تعرض هذه السمة القيمة true إذا كان الطلب الوارد هو طلب Measurement Protocol الإصدار 2، أو false في الحالات الأخرى.

مثال

const isRequestMpv2 = require('isRequestMpv2');

if (isRequestMpv2()) {
  // Handle Measurement Protocol V2 request.
  const events = extractEventsFromMpv2();
}

البنية

isRequestMpv2();

الأذونات المرتبطة

بلا عُري


logToConsole

تسجّل وسيطاتها في وحدة التحكّم.

تظهر هذه السجلّات ضمن مستكشف السجلّات في Google Cloud Console. من "مستكشف السجلّات"، شغِّل طلب البحث logName =~ "stdout" للاطّلاع على الإدخالات في السجلّ التي أنشأتها واجهة برمجة التطبيقات هذه.

مثال

const logToConsole = require('logToConsole');

const that = 123;
const those = { ... };
logToConsole('that is: ', that, ' and those is: ', those);

البنية

logToConsole(argument1[, argument2, ...]);

المعلّمات

تتلقّى واجهة برمجة التطبيقات وسيطة واحدة أو أكثر، ويتم تحويل كل منها إلى سلسلة، إذا لزم الأمر، ويتم تسجيلها في وحدة التحكّم.

الأذونات المرتبطة

logging


makeInteger

تحوّل القيمة المحدّدة إلى رقم (عدد صحيح).

البنية

makeInteger(value);

المعلّمات

المَعلمة النوع الوصف
value أي نوع القيمة المطلوب تحويلها

الأذونات المرتبطة

بلا عُري


makeNumber

تحوّل القيمة المحدّدة إلى رقم.

البنية

makeNumber(value);

المعلّمات

المَعلمة النوع الوصف
value أي نوع القيمة المطلوب تحويلها

الأذونات المرتبطة

بلا عُري


makeString

تعرض القيمة المحدّدة على شكل سلسلة.

البنية

makeString(value);

المعلّمات

المَعلمة النوع الوصف
value أي نوع القيمة المطلوب تحويلها

الأذونات المرتبطة

بلا عُري


makeTableMap

لتحويل كائن جدول بسيط يتضمّن عمودَين إلى Map. يُستخدَم هذا الخيار لتغيير حقل نموذج SIMPLE_TABLE يتضمّن عمودَين إلى تنسيق يسهل إدارته.

على سبيل المثال، يمكن لهذه الدالة تحويل كائن جدول:

[
  {'key': 'k1', 'value': 'v1'},
  {'key': 'k2', 'value': 'v2'}
]

في "خرائط Google":

{
  'k1': 'v1',
  'k2': 'v2'
}

تعرض كائنًا: تمت إضافة Map المحوَّل لأزواج المفتاح/القيمة إليه، أو null في الحالات الأخرى.

البنية

makeTableMap(tableObj, keyColumnName, valueColumnName);

المعلّمات

المَعلمة النوع الوصف
tableObj قائمة عنصر الجدول المطلوب تحويله. وهي قائمة بالخرائط حيث يمثّل كل Map صفًا في الجدول. اسم كل سمة في عنصر الصف هو اسم العمود، وقيمة السمة هي قيمة العمود في الصف.
keyColumnName string اسم العمود الذي ستصبح قيمه مفاتيح في Map المحوَّل.
valueColumnName string اسم العمود الذي ستصبح قيمه قيمًا في Map المحوَّل.

الأذونات المرتبطة

بلا عُري


parseUrl

تعرِض هذه السمة عنصرًا يحتوي على جميع الأجزاء المكوّنة لعنوان URL معيّن، على غرار العنصر URL.

ستعرض واجهة برمجة التطبيقات هذه القيمة undefined لأي عنوان URL مكتوب بصيغة غير صحيحة. بالنسبة إلى عناوين URL المنسَّقة بشكل صحيح، ستكون قيمة الحقول غير المتوفّرة في سلسلة عنوان URL سلسلة فارغة، أو كائنًا فارغًا في حالة searchParams.

سيحتوي العنصر المعروض على الحقول التالية:

{
  href: string,
  origin: string,
  protocol: string,
  username: string,
  password: string,
  host: string,
  hostname: string,
  port: string,
  pathname: string,
  search: string,
  searchParams: Object<string, (string|Array)>,
  hash: string,
}

مثال

const parseUrl = require('parseUrl');

const urlObject = parseUrl('https://abc:xyz@example.com:8080/foo?param=val%2Cue#bar');

البنية

parseUrl(url);

المعلّمات

المَعلمة النوع الوصف
url string عنوان URL الكامل الذي سيتم تحليله.

الأذونات المرتبطة

بلا عُري


returnResponse

تؤدي هذه الدالة إلى محو الاستجابة التي تم ضبطها سابقًا بواسطة نماذج أخرى باستخدام واجهات برمجة التطبيقات التي تعدّل الاستجابة، بما في ذلك setCookie وsetPixelResponse وsetResponseBody وsetResponseHeader وsetResponseStatus. يتم ضبط القيمة التلقائية على رمز حالة HTTP ‏200، ونص فارغ، وبدون عناوين.

ننصح باستخدام واجهة برمجة التطبيقات هذه من نموذج عميل.

البنية

returnResponse();

مثال

اطّلِع على مثال runContainer.

الأذونات المرتبطة

return_response


runContainer

تشغيل منطق الحاوية (المتغيّرات والمشغّلات والعلامات) في نطاق حدث معيّن إذا تم استدعاء واجهة برمجة التطبيقات هذه أثناء تنفيذ الحاوية، سيتم تشغيل الحاوية مرة أخرى.

تتلقّى دوال رد الاتصال onComplete وonStart دالة تُسمى bindToEvent. استخدِم bindToEvent لتشغيل واجهة برمجة تطبيقات في سياق الحدث. يمكنك الاطّلاع على مثال addEventCallback لمزيد من التفاصيل.

يُنصح باستخدام واجهة برمجة التطبيقات هذه من نموذج عميل.

مثال

const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

// Runs the container with a simple pageview event and then returns a response.
runContainer({'event_name': 'pageview'}, () => returnResponse());

البنية

runContainer(event, onComplete, onStart);

المعلّمات

المَعلمة النوع الوصف
event object مَعلمات الحدث
onComplete الدالة دالة رد اتصال يتم استدعاؤها بعد انتهاء تنشيط جميع العلامات.
onStart دالة عملية استدعاء يتم استدعاؤها على الفور، قبل بدء تنشيط العلامات.

الأذونات المرتبطة

run_container


sendEventToGoogleAnalytics

يتم إرسال حدث واحد باستخدام بيانات الأحداث الشائعة إلى "إحصاءات Google" وعرض وعد يتم تحليله إلى عنصر يتضمّن مفتاح location أو رفضه إلى عنصر يتضمّن مفتاح reason. تستند الوجهة، وهي "إحصاءات Google"، إلى رقم تعريف القياس في بيانات الأحداث.

يتم ضبط الحقل location على العنوان location، إذا كان متوفّرًا.

مثال

const logToConsole = require('logToConsole');
const sendEventToGoogleAnalytics = require('sendEventToGoogleAnalytics');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');

// Sends an event to Google Analytics and returns failure if the request did not
// succeed. Additionally, if the request resulted in a redirect request, the
// code nominates a redirect response to be returned.
sendEventToGoogleAnalytics(event).then((response) => {
  if (response.location) {
    setResponseHeader('location', response.location);
    setResponseStatus(302);
  } else {
    setResponseStatus(200);
  }
  data.gtmOnSuccess();
}).catch((error) => {
  logToConsole(error.reason);
  setResponseStatus(500);
  data.gtmOnFailure();
});

البنية

sendEventToGoogleAnalytics(event);

المعلّمات

المَعلمة النوع الوصف
event object الحدث بتنسيق المخطط الموحّد

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن send_http. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:

  • السماح بنطاقات Google

sendHttpGet

يرسل طلب HTTP GET إلى عنوان URL المحدّد، ويعرض وعدًا يتم تنفيذه مع النتيجة بعد اكتمال الطلب أو انتهاء مهلته.

النتيجة التي تم تحليلها هي عنصر يحتوي على ثلاثة مفاتيح: statusCode وheaders وbody. إذا تعذّر تنفيذ الطلب (على سبيل المثال، عنوان URL غير صالح، أو عدم توفّر مسار إلى المضيف، أو تعذُّر التفاوض بشأن طبقة المقابس الآمنة، وما إلى ذلك)، سيتم رفض الوعد مع ظهور: {reason: 'failed'}. إذا تم ضبط الخيار timeout وانتهت مهلة الطلب، سيتم رفض الوعد مع ظهور: {reason: 'timed_out'}

مثال

const sendHttpGet = require('sendHttpGet');

// Returns the response body as the value for a variable.
return sendHttpGet('https://example.com/item/' + data.itemId, {
  headers: {key: 'value'},
  timeout: 500,
}).then((result) => result.body, () => undefined);

البنية

sendHttpGet(url[, options]);

المعلّمات

المَعلمة النوع الوصف
url string عنوان URL المطلوب
options object اختياري خيارات الطلب (اطّلِع على الخيارات أدناه.)

الخيارات

Option النوع الوصف
headers string عناوين الطلبات الإضافية
timeout number المهلة بالمللي ثانية قبل إلغاء الطلب القيمة التلقائية هي 15000.
authorization object كائن التفويض الاختياري من الطلب إلى getGoogleAuth لتضمين عناوين التفويض عند إجراء الطلبات إلى googleapis.com.

الأذونات المرتبطة

send_http


sendHttpRequest

يُرسل طلب HTTP إلى عنوان URL المحدّد، ويعرض وعدًا يتم حلّه بالاستجابة بعد اكتمال الطلب أو انتهاء مهلته.

النتيجة التي تم تحليلها هي عنصر يحتوي على ثلاثة مفاتيح: statusCode وheaders وbody. إذا تعذّر تنفيذ الطلب (مثل عنوان URL غير صالح أو عدم توفّر مسار إلى المضيف أو تعذّر التفاوض بشأن بروتوكول SSL وما إلى ذلك)، سيتم رفض الوعد مع: {reason: 'failed'}. إذا تم ضبط الخيار timeout وانتهت مهلة الطلب، سيتم رفض الوعد مع ظهور: {reason: 'timed_out'}

مثال

const sendHttpRequest = require('sendHttpRequest');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');

const postBody = 'interaction=click&campaign=promotion&medium=email';
// Sends a POST request and nominates response based on the response to the POST
// request.
sendHttpRequest('https://example.com/collect', {
  headers: {key: 'value'},
  method: 'POST',
  timeout: 500,
}, postBody).then((result) => {
  setResponseStatus(result.statusCode);
  setResponseBody(result.body);
  setResponseHeader('cache-control', result.headers['cache-control']);
});

البنية

sendHttpRequest(url[, options[, body]]);

المعلّمات

المَعلمة النوع الوصف
url string عنوان URL المطلوب
options object اختياري خيارات الطلب (اطّلِع على الخيارات أدناه.)
body string اختياري: نص الطلب

الخيارات

Option النوع الوصف
headers string عناوين الطلبات الإضافية
method object طريقة الطلب القيمة التلقائية هي GET.
timeout number المهلة بالمللي ثانية قبل إلغاء الطلب القيمة التلقائية هي 15000.
authorization object عنصر تفويض اختياري من الطلب إلى getGoogleAuth لتضمين عناوين التفويض عند إرسال الطلبات إلى googleapis.com.

الأذونات المرتبطة

send_http


sendPixelFromBrowser

يتم إرسال أمر إلى المتصفّح لتحميل عنوان URL المقدَّم كعلامة <img>. يتوافق بروتوكول الأوامر هذا مع علامة Google في &quot;إحصاءات Google&quot; وعلامات الويب إحصاءات Google: حدث في &quot;إحصاءات Google&quot;. يجب ضبط عنوان URL لحاوية الخادم. لمزيد من التفاصيل، يُرجى الاطّلاع على التعليمات.

تعرض واجهة برمجة التطبيقات هذه القيمة false إذا كان الطلب الوارد لا يتوافق مع بروتوكول الأوامر، أو إذا تم بالفعل إفراغ الاستجابة. وفي حال عدم توفّرها، تعرض واجهة برمجة التطبيقات هذه القيمة true.

مثال:

const sendPixelFromBrowser = require('sendPixelFromBrowser');

sendPixelFromBrowser('https://example.com/?id=123');

البنية

sendPixelFromBrowser(url)

المعلّمات

المَعلمة النوع الوصف
url string عنوان URL المطلوب إرساله إلى المتصفّح.

الأذونات المرتبطة

send_pixel_from_browser


setCookie

تضبط هذه الدالة ملف تعريف ارتباط أو تحذفه باستخدام الخيارات المحدّدة.

لحذف ملف تعريف ارتباط، يجب ضبط ملف تعريف ارتباط بنفس المسار والنطاق اللذين تم إنشاء ملف تعريف الارتباط بهما، وتعيين قيمة انتهاء صلاحية له في الماضي، مثل "Thu, 01 Jan 1970 00:00:00 GMT".

يُرجى العِلم أنّه يجب استدعاء returnResponse لإرسال الردّ إلى العميل.

مثال

const setCookie = require('setCookie');

// Sets an httpOnly cookie with a max-age of 3600.
setCookie('cookieName', 'cookieValue', {'max-age': 3600, httpOnly: true});

البنية

setCookie(name, value[, options[, noEncode]]);

المعلّمات

المَعلمة النوع الوصف
name string اسم ملف تعريف الارتباط الاسم غير حسّاس لحالة الأحرف.
value string قيمة ملف تعريف الارتباط
options object سمات ملفات تعريف الارتباط الاختيارية:domain وexpires وfallbackDomain وhttpOnly وmax- age وpath وsecure وsameSite. (راجِع الخيارات أدناه.)
noEncode boolean إذا كانت القيمة صحيحة، لن يتم ترميز قيمة ملف تعريف الارتباط. القيمة التلقائية هي false.

الخيارات

  • النطاق: المضيف الذي سيتم إرسال ملف تعريف الارتباط إليه. في حال ضبطه على القيمة الخاصة "auto"، سيتم احتساب المضيف تلقائيًا باستخدام الاستراتيجية التالية:

    • النطاق ذو المستوى الأعلى الفعلي (eTLD) + 1 لرأس Forwarded، إن توفّر.
    • النطاق ذو المستوى الأعلى الفعلي (eTLD) + 1 لرأس X-Forwarded-Host، إن توفّر.
    • ‫eTLD+1 من عنوان Host
  • expires: الحد الأقصى لمدة صلاحية ملف تعريف الارتباط. يجب أن تكون هذه القيمة سلسلة تاريخ بتنسيق UTC، مثل "Sat, 26 Oct 1985 08:21:00 GMT". إذا تم ضبط كل من expires وmax-age، تكون الأولوية لـ max-age.

  • httpOnly: يمنع JavaScript من الوصول إلى ملف تعريف الارتباط إذا كانت القيمة true.

  • max-age: عدد الثواني حتى تنتهي صلاحية ملف تعريف الارتباط. سيؤدي الرقم صفر أو الرقم السالب إلى انتهاء صلاحية ملف تعريف الارتباط على الفور. في حال ضبط كل من expires وmax-age، تكون الأولوية لـ max-age.

  • path: مسار يجب أن يكون متوفّرًا في عنوان URL المطلوب، وإلا لن يرسل المتصفّح عنوان Cookie.

  • ‫secure: إذا تم ضبطه على true، لا يتم إرسال ملف تعريف الارتباط إلى الخادم إلا عند تقديم طلب من نقطة نهاية https:.

  • ‫sameSite: تؤكّد أنّه يجب عدم إرسال ملف تعريف ارتباط مع طلبات متعدّدة المصادر. يجب أن تكون القيمة 'strict' أو 'lax' أو 'none'.

الأذونات المرتبطة

set_cookie


setPixelResponse

يضبط نص الردّ على ملف GIF بحجم 1x1، ويضبط عنوان Content-Type على 'image/gif'، ويضبط عناوين التخزين المؤقت بحيث لا تخزّن برامج وكلاء المستخدمين الردّ مؤقتًا، ويضبط حالة الردّ على 200.

يُرجى العِلم أنّه يجب استدعاء returnResponse لإرسال الردّ إلى العميل.

البنية

setPixelResponse();

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن access_response. يجب ضبط الإذن على السماح بالوصول إلى ما يلي على الأقل:

  • headers - يجب السماح باستخدام المفاتيح التالية
    • content-type
    • cache-control
    • expires
    • pragma
  • body
  • status

setResponseBody

يضبط هذا الإجراء نص الرد على الوسيطة.

يُرجى العِلم أنّه يجب استدعاء returnResponse لإرسال الردّ إلى العميل.

البنية

setResponseBody(body[, encoding]);

المعلّمات

المَعلمة النوع الوصف
body string القيمة التي يجب ضبطها كنص الاستجابة
encoding string ترميز الأحرف لنص الاستجابة (القيمة التلقائية هي 'utf8'). تشمل القيم المسموح بها 'ascii' و'utf8' و'utf16le' و'ucs2' و'base64' و'latin1' و'binary' و'hex'.

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن access_response. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:

  • body

setResponseHeader

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

يُرجى العِلم أنّه يجب استدعاء returnResponse لإرسال الردّ إلى العميل.

البنية

setResponseHeader(name, value);

المعلّمات

المَعلمة النوع الوصف
name string اسم العنوان لا تكون أسماء عناوين HTTP غير حساسة لحالة الأحرف، لذا سيتم استخدام الأحرف الصغيرة في اسم العنوان.
value string undefined قيمة العنوان إذا كانت القيمة فارغة أو غير محدّدة، سيؤدي ذلك إلى محو العنوان المحدّد الاسم من الرد الذي سيتم إرجاعه.

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن access_response. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:

  • headers

setResponseStatus

يتم ضبط رمز حالة HTTP للاستجابة التي سيتم عرضها.

يُرجى العِلم أنّه يجب استدعاء returnResponse لإرسال الردّ إلى العميل.

البنية

setResponseStatus(statusCode);

المعلّمات

المَعلمة النوع الوصف
statusCode number رمز حالة HTTP الذي سيتم عرضه

الأذونات المرتبطة

يتطلّب هذا الإجراء إذن access_response. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:

  • status

sha256

يتم احتساب ملخّص SHA-256 للإدخال واستدعاء دالة رد اتصال باستخدام الملخّص المرمّز بتنسيق base64، ما لم يحدّد عنصر options ترميزًا مختلفًا للإخراج.

يتطابق توقيع واجهة برمجة التطبيقات هذا وسلوكها مع واجهة برمجة التطبيقات sha256 لحاويات الويب، ولكن يجب أن تستخدم النماذج المخصّصة في حاويات الخادم واجهة برمجة التطبيقات sha256Sync للحصول على رمز أبسط.

مثال

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256 = require('sha256');

sha256('inputString', (digest) => {
  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
});

sha256('inputString', (digest) => {
  sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digest));
}, {outputEncoding: 'hex'});

البنية

sha256(input, onSuccess, options = undefined);

المعلّمات

المَعلمة النوع الوصف
input string السلسلة المطلوب تجزئتها
onSuccess دالة يتم استدعاؤها مع الملخّص الناتج، المرمّز في base64، ما لم يحدّد الكائن options ترميزًا مختلفًا للناتج.
options object اختياري كائن خيارات لتحديد ترميز الإخراج. في حال تحديدها، يجب أن يحتوي العنصر على المفتاح outputEncoding مع إحدى القيمتين base64 أو hex.

الأذونات المرتبطة

بلا عُري


sha256Sync

تحتسب هذه الدالة ملخّص SHA-256 للإدخال وترجعه، بترميز base64، ما لم يحدّد العنصر options ترميزًا مختلفًا للناتج.

مثال

const encodeUriComponent = require('encodeUriComponent');
const sendHttpGet = require('sendHttpGet');
const sha256Sync = require('sha256Sync');

const digestBase64 = sha256Sync('inputString');
const digestHex = sha256Sync('inputString', {outputEncoding: 'hex'});
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestBase64));
sendHttpGet('https://example.com/collect?id=' + encodeUriComponent(digestHex));

البنية

sha256Sync(input, options = undefined);

المعلّمات

المَعلمة النوع الوصف
input string السلسلة المطلوب تجزئتها
options object اختياري كائن خيارات لتحديد ترميز الإخراج. في حال تحديدها، يجب أن يحتوي العنصر على المفتاح outputEncoding مع إحدى القيمتين base64 أو hex.

الأذونات المرتبطة

بلا عُري


templateDataStorage

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

تشير كلمة "data" في الاسم "templateDataStorage" إلى أنّه لا يمكن تخزين سوى أنواع البيانات العادية غير الوظيفية باستخدام واجهة برمجة التطبيقات هذه. سيتم تخزين أي دوال أو مراجع لدوال تم تمريرها إلى واجهة برمجة التطبيقات على شكل null بدلاً من ذلك.

البنية

const templateDataStorage = require('templateDataStorage');

// Returns a copy of the value stored for the given key, or null if nothing
// is stored with that key.
templateDataStorage.getItemCopy(key);

// Stores a copy of the value for the given key (or removes the data stored
// for the given key if the input value is null).
templateDataStorage.setItemCopy(key, value);

// Removes the value stored for the given key, if present.
templateDataStorage.removeItem(key);

// Deletes all values stored for the current template.
templateDataStorage.clear();

مثال

const sendHttpGet = require('sendHttpGet');
const setResponseBody = require('setResponseBody');
const setResponseStatus = require('setResponseStatus');
const templateDataStorage = require('templateDataStorage');

// Check to see if the item is in the cache.
const cachedBody = templateDataStorage.getItemCopy(data.key);
if (cachedBody) {
  setResponseBody(cachedBody);
  data.gtmOnSuccess();
  return;
}

sendHttpGet(data.url).then((result) => {
  if (result.statusCode >= 200 && result.statusCode < 300) {
    setResponseBody(result.body);
    templateDataStorage.setItemCopy(data.key, result.body);
    data.gtmOnSuccess();
  } else {
    data.gtmOnFailure();
  }
  setResponseStatus(result.statusCode);
});

الأذونات المرتبطة

access_template_storage


testRegex

تختبر هذه الدالة سلسلة نصية مقابل تعبير نمطي تم إنشاؤه من خلال واجهة برمجة التطبيقات createRegex. تعرض true إذا كان التعبير العادي مطابقًا. وتعرض false في الحالات الأخرى.

يكون التعبير النمطي الذي تم إنشاؤه باستخدام العلامة العامة ذو حالة. لمزيد من التفاصيل، يُرجى الاطّلاع على مستندات RegExp.

مثال

const createRegex = require('createRegex');
const testRegex = require('testRegex');

const domainRegex = createRegex('\\w+\\.com', 'i');

// createRegex returns null if the regex is invalid or Re2 is not available.
if (domainRegex === null) return;

// Returns true
testRegex(domainRegex, 'example.com/foobar');

البنية

testRegex(regex, string);

المعلّمات

المَعلمة النوع الوصف
regex الكائن التعبير النمطي الذي سيتم اختباره، ويتم عرضه من createRegex API.
string string سلسلة اختبارية للاختبار.

الأذونات المرتبطة

بلا عُري


toBase64

لترميز سلسلة كـ base64 أو base64url القيمة التلقائية هي ترميز base64.

البنية

toBase64(input, options);

المعلّمات

المَعلمة النوع الوصف
input string السلسلة المطلوب ترميزها
options object اختياري إعداد واجهة برمجة التطبيقات. (اطّلِع على الخيارات أدناه.)

الخيارات

Option النوع الوصف الحد الأدنى للإصدار
urlEncoding boolean إذا كانت القيمة صحيحة، سيتم ترميز النتيجة باستخدام تنسيق base64url. 1.0.0

مثال

const toBase64 = require('toBase64');

const base64Hello = toBase64('hello');
const base64UrlHello = toBase64('hello', {urlEncoding: true});

الأذونات المرتبطة

بلا عُري


BigQuery

تعرِض هذه الدالة كائنًا يوفّر وظائف BigQuery.

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

عند نجاح عملية الإدراج، يتم تنفيذ الوعد بدون أي وسيطات.

عندما يتعذّر الإدراج، يتم رفض الوعد مع قائمة بالكائنات التي تتضمّن سبب الخطأ وربما كائن صف إذا حدث خطأ. من المحتمل أن يكتمل جزء من الطلب بنجاح، بينما لا تكتمل الأجزاء الأخرى. يتم رفض الوعد في هذه الحالة مع قائمة بالأخطاء لكل صف مع عنصر صف للمساعدة في تمييز الصفوف التي تم إدراجها (انظر أمثلة على الأخطاء أدناه). لمزيد من المعلومات، يُرجى الاطّلاع على مستندات BigQuery حول رسائل الخطأ.

البنية

BigQuery.insert(connectionInfo, rows[, options]);

المَعلمات

المَعلمة النوع الوصف
connectionInfo object تحدّد هذه السمة المعلومات المطلوبة للربط بجدول BigQuery. هناك معلّمة اختيارية واحدة ومعلّمتان مطلوبتان:
  • projectId - اختياري: رقم تعريف مشروع Google Cloud Platform. في حال عدم توفّره، يتم استرداد projectId من متغيّر البيئة GOOGLE_CLOUD_PROJECT طالما أنّ إعداد الإذن access_bigquery لرقم تعريف المشروع مضبوط على * أو GOOGLE_CLOUD_PROJECT. إذا كانت حاوية الخادم تعمل على Google Cloud، سيتم ضبط GOOGLE_CLOUD_PROJECT على رقم تعريف مشروع Google Cloud.
  • ‫datasetId: رقم تعريف مجموعة بيانات BigQuery
  • ‫tableId: رقم تعريف جدول BigQuery
rows المصفوفة تمثّل هذه السمة الصفوف التي سيتم إدراجها في الجدول.
options object خيارات الطلب الاختيارية الخيارات المتوافقة هي: ignoreUnknownValues و skipInvalidRows. يتم تجاهل مفاتيح الخيارات غير المعروفة. (راجِع الخيارات أدناه).

الخيارات

المَعلمة النوع الوصف
ignoreUnknownValues boolean إذا تم ضبطها على true، سيتم قبول الصفوف التي تحتوي على قيم لا تتطابق مع المخطط. ويتم تجاهل القيم غير المعروفة. القيمة التلقائية هي false.
skipInvalidRows boolean إذا تم ضبطها على true، سيتم إدراج جميع الصفوف الصالحة في الطلب، حتى إذا كانت هناك صفوف غير صالحة. القيمة التلقائية هي false.

أمثلة على الأخطاء

يعني ظهور خطأ "لم يتم العثور على الوحدة" أنّ حاوية الخادم من المحتمل أن تكون قيد التشغيل بإصدار قديم من صورتنا لم يتضمّن وحدة BigQuery بعد. يُرجى إعادة نشر حاوية الخادم بالإعدادات نفسها باستخدام نص النشر البرمجي. سيتم تضمين الوحدة تلقائيًا عند انتهاء العملية.

عادةً ما يحتوي خطأ عدم الإدراج على عنصر خطأ واحد يتضمّن مفتاح reason:

[{reason: 'invalid'}]

يمكن أن يحتوي خطأ الإدراج على عناصر خطأ متعدّدة مع مصفوفة errors وعنصر row. في ما يلي مثال على استجابة خطأ من إدراج صفين حيث يحتوي صف واحد فقط على خطأ:

[
  {
    "errors": [
      {
        "reason":"invalid"
      }
    ],
    "row": {
      "string_col":"otherString",
      "number_col":-3,
      "bool_col":3
    }
  },
  {
    "errors": [
      {
        "reason":"stopped"
      }
    ],
    "row": {
      "string_col":"stringValue",
      "number_col":5,
      "bool_col:false
    }
  }
]

مثال

const BigQuery = require('BigQuery');

const connectionInfo = {
  'projectId': 'gcp-cloud-project-id',
  'datasetId': 'destination-dataset',
  'tableId': 'destination-table',
};

const rows = [{
  'column1': 'String1',
  'column2': 1234,
}];

const options = {
  'ignoreUnknownValues': true,
  'skipInvalidRows': false,
};

BigQuery.insert(connectionInfo, rows, options)
  .then(data.gtmOnSuccess, data.gtmOnFailure);

الأذونات المرتبطة

access_bigquery


Firestore

تعرض هذه السمة عنصرًا يوفّر دوال Firestore.

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

Firestore.read

تقرأ الدالة Firestore.read البيانات من مستند Firestore وتعرض وعدًا يتم تحليله إلى عنصر يحتوي على مفتاحَين: id وdata. إذا لم يكن المستند متوفّرًا، يتم رفض الوعد باستخدام عنصر يحتوي على مفتاح reason يساوي not_found.

البنية

Firestore.read(path[, options]);

المَعلمات

المَعلمة النوع الوصف
path string تمثّل هذه السمة المسار إلى المستند أو المجموعة. يجب ألا يبدأ أو ينتهي بـ "/".
options object اختياري خيارات الطلب الخيارات المتاحة هي: projectId وdisableCache وtransaction. يتم تجاهل مفاتيح الخيارات غير المعروفة. (راجِع الخيارات أدناه).

الخيارات

المَعلمة النوع الوصف
projectId string Optional. رقم تعريف مشروع Google Cloud Platform في حال حذفها، يتم استرداد projectId من متغيّر البيئة GOOGLE_CLOUD_PROJECT طالما أنّ إعداد الإذن access_firestore لرقم تعريف المشروع مضبوط على * أو GOOGLE_CLOUD_PROJECT. إذا كانت حاوية الخادم تعمل على Google Cloud، سيتم ضبط GOOGLE_CLOUD_PROJECT على رقم تعريف مشروع على السحابة الإلكترونية لـ Google Cloud.
disableCache boolean Optional. تحدِّد هذه السمة ما إذا كان سيتم إيقاف ذاكرة التخزين المؤقت أم لا. يتم تفعيل التخزين المؤقت تلقائيًا، ما يؤدي إلى تخزين النتائج مؤقتًا لمدة الطلب.
transaction string Optional. تمثّل هذه المَعلمة القيمة التي تم استردادها من Firestore.runTransaction()‎، وتحدّد العملية التي سيتم استخدامها ضمن معاملة.

مثال

const Firestore = require('Firestore');

return Firestore.read('collection/document', {
  projectId: 'gcp-cloud-project-id',
}).then((result) => result.data.key, () => undefined);

Firestore.write

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

البنية

Firestore.write(path, input[, options]);

المعلّمات

المَعلمة النوع الوصف
path string تمثّل هذه السمة المسار إلى المستند أو المجموعة. يجب ألا يبدأ أو ينتهي بـ "/".
input object القيمة المطلوب كتابتها في المستند. في حال ضبط خيار الدمج، ستدمج واجهة برمجة التطبيقات المفاتيح من الإدخال في المستند.
options object اختياري خيارات الطلب الخيارات المتاحة هي: projectId وmerge وtransaction. يتم تجاهل مفاتيح الخيارات غير المعروفة. (راجِع الخيارات أدناه.)

الخيارات

المَعلمة النوع الوصف
projectId string Optional. رقم تعريف مشروع Google Cloud Platform في حال حذفها، يتم استرداد projectId من متغيّر البيئة GOOGLE_CLOUD_PROJECT طالما تم ضبط إعدادات الإذن access_firestore لرقم تعريف المشروع على * أو GOOGLE_CLOUD_PROJECT. إذا كانت حاوية الخادم تعمل على Google Cloud، سيتم ضبط GOOGLE_CLOUD_PROJECT تلقائيًا على معرّف مشروع على السحابة الإلكترونية في Google Cloud.
merge boolean Optional. إذا تم ضبطها على true، يتم دمج المفاتيح من الإدخال في المستند، وإلا ستلغي الطريقة المستند بأكمله. القيمة التلقائية هي false.
transaction string Optional. تمثّل هذه المَعلمة القيمة التي تم استردادها من Firestore.runTransaction()‎، وتحدّد العملية التي سيتم استخدامها ضمن معاملة.

مثال

const Firestore = require('Firestore');

const input = {key1: 'value1', key2: 12345};

Firestore.write('collection/document', input, {
  projectId: 'gcp-cloud-project-id',
  merge: true,
}).then((id) => {
  data.gtmOnSuccess();
}, data.gtmOnFailure);

Firestore.query

تستعلم الدالة Firestore.query عن المجموعة المحدّدة وتعرض وعدًا يتم تنفيذه في مصفوفة من مستندات Firestore التي تتطابق مع شروط طلب البحث. يكون عنصر مستند Firestore هو نفسه المذكور أعلاه في Firestore.read. إذا لم تكن هناك مستندات تتطابق مع شروط طلب البحث، سيتم حلّ الوعد الذي تم إرجاعه إلى مصفوفة فارغة.

البنية

Firestore.query(collection, queryConditions[, options]);

المعلَمات

المَعلمة النوع الوصف
collection string مسار المجموعة يجب ألا يبدأ أو ينتهي بـ "/".
queryConditions Array مصفوفة من شروط طلب البحث يتم تقديم كل طلب بحث في شكل مصفوفة تتضمّن ثلاث قيم: key وoperator وexpectedValue. مثلاً: [[‘id’, ‘<’, ‘5’], [‘state’, ‘==’, ‘CA’]].

يتم دمج الشروط معًا لإنشاء نتيجة طلب البحث. يُرجى الرجوع إلى عوامل تشغيل طلبات البحث في Firestore للاطّلاع على قائمة بعوامل تشغيل طلبات البحث المتوافقة.
options object اختياري خيارات الطلب الخيارات المتوافقة هي: projectId وdisableCache وlimit وtransaction. يتم تجاهل مفاتيح الخيارات غير المعروفة. (راجِع الخيارات أدناه).

الخيارات

المَعلمة النوع الوصف
projectId string Optional. رقم تعريف مشروع Google Cloud Platform في حال حذفها، يتم استرداد projectId من متغيّر البيئة GOOGLE_CLOUD_PROJECT طالما أنّ إعدادات الإذن access_firestore لرقم تعريف المشروع مضبوطة على * أو GOOGLE_CLOUD_PROJECT. إذا كانت حاوية الخادم تعمل على Google Cloud، سيتم ضبط GOOGLE_CLOUD_PROJECT تلقائيًا على معرّف مشروع على السحابة الإلكترونية في Google Cloud.
disableCache boolean Optional. تحدّد هذه السياسة ما إذا كان سيتم إيقاف ذاكرة التخزين المؤقت أم لا. يتم تفعيل التخزين المؤقت تلقائيًا، ما يؤدي إلى تخزين النتائج مؤقتًا طوال مدة الطلب.
limit number Optional. تغيير الحد الأقصى لعدد النتائج التي يعرضها طلب البحث، وتكون القيمة التلقائية هي 5.
transaction string Optional. تمثّل هذه المَعلمة القيمة التي تم استردادها من Firestore.runTransaction()‎، وتحدّد العملية التي سيتم استخدامها ضمن معاملة.

مثال

const Firestore = require('Firestore');

const queries = const queries = [['id', '==', '5']];

return Firestore.query('collection', queries, {
  projectId: 'gcp-cloud-project-id',
  limit: 1,
}).then((documents) => documents[0].data.key, () => undefined);

Firestore.runTransaction

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

البنية

Firestore.runTransaction(callback[, options]);

المعلّمات

المَعلمة النوع الوصف
callback function عملية استدعاء يتم تنفيذها باستخدام معرّف معاملة من نوع سلسلة ويمكن تمرير معرّف المعاملة إلى طلبات البيانات من واجهة برمجة التطبيقات للقراءة/الكتابة/الاستعلام. يجب أن تعرض دالّة ردّ الاتصال هذه عملية غير مكتملة. قد يتم تشغيل دالة الاستدعاء ثلاث مرات كحد أقصى قبل أن يتعذّر تنفيذها.
options object خيارات الطلب الاختيارية الخيار الوحيد المتوافق هو projectId. يتم تجاهل مفاتيح الخيارات غير المعروفة. (راجِع الخيارات أدناه).

الخيارات

المَعلمة النوع الوصف
projectId string Optional. رقم تعريف مشروع Google Cloud Platform في حال حذفها، يتم استرداد projectId من متغيّر البيئة GOOGLE_CLOUD_PROJECT طالما تم ضبط إعدادات الإذن access_firestore لرقم تعريف المشروع على * أو GOOGLE_CLOUD_PROJECT. إذا كانت حاوية الخادم تعمل على Google Cloud، سيتم ضبط GOOGLE_CLOUD_PROJECT على رقم تعريف مشروع على السحابة الإلكترونية لـ Google Cloud.

مثال

const Firestore = require('Firestore');

const path = 'collection/document';
const projectId = 'gcp-cloud-project-id';

Firestore.runTransaction((transaction) => {
  const transactionOptions = {
    projectId: projectId,
    transaction: transaction,
  };
  // Must return a promise.
  return Firestore.read(path, transactionOptions).then((result) => {
    const newInputCount = result.data.inputCount + 1;
    const input = {key1: 'value1', inputCount: newInputCount};
    return Firestore.write(path, input, transactionOptions);
  });
}, {
  projectId: projectId
}).then((ids) => {
  data.gtmOnSuccess();
}, data.gtmOnFailure);

مثال على الخطأ

سيتم رفض الأخطاء المتوفّرة في كل دالة من دوال Firestore باستخدام عنصر يحتوي على المفتاح reason:

Firestore.read(...).then(onSuccess, (error) => {
  if (error.reason === 'unknown') {
    // Handle the unknown error here.
  }
});

يمكن أن تتضمّن أسباب الخطأ رموز أخطاء واجهة برمجة التطبيقات REST API في Firestore، على سبيل المثال لا الحصر.

الأذونات المرتبطة

access_firestore


JSON

تعرض هذه الدالة كائنًا يوفّر دوال JSON.

تحلّل الدالة parse() سلسلة JSON لإنشاء القيمة أو العنصر الموصوفَين بالسلسلة. إذا تعذّر تحليل القيمة (على سبيل المثال، JSON غير صالح)، ستعرض الدالة undefined. إذا لم تكن قيمة الإدخال سلسلة، سيتم فرض الإدخال على سلسلة.

تحوّل الدالة stringify() الإدخال إلى سلسلة JSON. إذا تعذّر تحليل القيمة (على سبيل المثال، إذا كان العنصر يحتوي على دورة)، ستعرض الطريقة undefined.

مثال

const JSON = require('JSON');

// The JSON input string is converted to an object.
const object = JSON.parse('{"foo":"bar"}');

// The input object is converted to a JSON string.
const str = JSON.stringify({foo: 'bar'});

البنية

JSON.parse(stringInput);
JSON.stringify(value);

الأذونات المرتبطة

بلا عُري


Math

عنصر يوفّر دوال Math.

البنية

const Math = require('Math');

// Retrieve the absolute value.
const absolute = Math.abs(-3);

// Round the input down to the nearest integer.
const roundedDown = Math.floor(3.6);

// Round the input up to the nearest integer.
const roundedUp = Math.ceil(2.2);

// Round the input to the nearest integer.
const rounded = Math.round(3.1);

// Return the largest argument.
const biggest = Math.max(1, 3);

// Return the smallest argument.
const smallest = Math.min(3, 5);

// Return the first argument raised to the power of the second argument.
const powerful = Math.pow(3, 1);

// Return the square root of the argument.
const unsquared = Math.sqrt(9);

المعلّمات

يتم تحويل مَعلمات الدوال الرياضية إلى أرقام.

الأذونات المرتبطة

بلا عُري


Messages

تعمل واجهات برمجة التطبيقات التالية معًا للسماح بتبادل الرسائل بين الأجزاء المختلفة من الحاوية.


addMessageListener

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

  1. messageType:string
  2. message:Object

إذا تمت إضافة دالة معاودة الاتصال في أحد العملاء، ستتلقّى الدالة رسائل من جميع الأحداث التي ينشئها هذا العميل. إذا كان من المفترض أن تتلقّى دالة الاستدعاء رسائل من حدث معيّن فقط، اربط واجهة برمجة التطبيقات هذه بالحدث باستخدام bindToEvent في دالة onStart ضمن واجهة برمجة التطبيقات runContainer. اطّلِع على المثال.

البنية

const addMessageListener = require('addMessageListener');

addMessageListener('send_pixel', (messageType, message) => {
  // This will be run whenever something sends a 'send_pixel' message.
});

المعلّمات

المَعلمة النوع الوصف
messageType string نوع الرسالة المطلوب الاستماع إليها إذا لم تكن القيمة سلسلة، سيتم تحويلها إلى سلسلة.
callback function عملية رد الاتصال التي يتم تشغيلها عند إرسال رسالة من نوع الرسالة الساري. إذا لم تكن دالة ردّ الاتصال دالة، لن تتخذ واجهة برمجة التطبيقات أي إجراء.

مثال

const addMessageListener = require('addMessageListener');
const claimRequest = require('claimRequest');
const extractEventsFromMpv1 = require('extractEventsFromMpv1');
const returnResponse = require('returnResponse');
const runContainer = require('runContainer');

claimRequest();
addMessageListener('send_pixel', (messageType, message) => {
  // This will be run whenever a tag sends a 'send_pixel' message.
});

const events = extractEventsFromMpv1();
let eventsCompleted = 0;
events.forEach((event, i) => {
  runContainer(events[i], /* onComplete= */ () => {
    if (events.length === ++eventsCompleted) {
      returnResponse();
    }
  }, /* onStart= */ (bindToEvent) => {
    if (i === 0) {
      bindToEvent(addMessageListener)('send_pixel', (messageType, message) => {
        // This will be called whenever a tag for the first event sends a
        // 'send_pixel' message.
      });
    }
  });
});

الأذونات المرتبطة

يتطلّب إذن use_message. يجب ضبط الإذن للسماح بما يلي على الأقل:

  • نوع رسالة يتضمّن Usage من listen أو listen_and_send

hasMessageListener

تعرض هذه الدالة القيمة "صحيح" إذا تمت إضافة مستمع للرسائل لنوع الرسالة المحدّد. وفي حال عدم عرض هذه البيانات، تُظهر القيمة "خطأ".

البنية

const hasMessageListener = require('hasMessageListener');

hasMessageListener('send_pixel');

الأذونات المرتبطة

بلا عُري


sendMessage

يتم إرسال رسالة من النوع المحدّد إلى مستمع مسجَّل. ويمكن استخدامها لإرسال رسائل من علامة إلى العميل الذي شغّل الحاوية.

البنية

const sendMessage = require('sendMessage');

sendMessage('send_pixel', {url: 'https://analytics.example.com/collect'});

المعلّمات

المَعلمة النوع الوصف
messageType string نوع الرسالة المطلوب إرسالها إذا لم تكن القيمة سلسلة، سيتم فرضها على سلسلة.
message object الرسالة المطلوب إرسالها إذا لم تكن الرسالة كائنًا، فلن تتخذ واجهة برمجة التطبيقات أي إجراء.

الأذونات المرتبطة

يتطلّب ذلك إذن use_message. يجب ضبط الإذن للسماح بما يلي على الأقل:

  • نوع رسالة يتضمّن Usage من listen_and_send أو send.

Object

تعرض هذه السمة عنصرًا يوفّر طرق Object.

توفّر الطريقة keys() سلوك Object.keys() في المكتبة العادية. تعرض هذه الدالة مصفوفة من أسماء السمات القابلة للتعداد الخاصة بكائن معيّن بالترتيب نفسه الذي تعرضه حلقة for...in.... إذا لم تكن قيمة الإدخال كائنًا، سيتم فرضها على كائن.

توفّر الطريقة values() سلوك Object.values() في "المكتبة العادية". تعرض هذه الطريقة مصفوفة من قيم السمات القابلة للتعداد الخاصة بعنصر معيّن بالترتيب نفسه الذي تعرضه حلقة for...in.... إذا لم تكن قيمة الإدخال كائنًا، سيتم فرضها على كائن.

توفّر الطريقة entries() سلوك Object.entries() في &quot;المكتبة العادية&quot;. تعرض هذه الطريقة مصفوفة من أزواج للسمات القابلة للتعداد الخاصة بكائن معيّن [key, value] بالترتيب نفسه الذي تعرضه حلقة for...in.... إذا لم تكن قيمة الإدخال كائنًا، سيتم فرضها على كائن.

توفّر الطريقة freeze() سلوك Object.freeze() في المكتبة العادية. لا يمكن تغيير الكائن المجمّد بعد ذلك؛ يمنع تجميد الكائن إضافة خصائص جديدة إليه، وإزالة الخصائص الموجودة، وتغيير قيم الخصائص الموجودة. تعرض الدالة freeze() العنصر نفسه الذي تم تمريره. سيتم التعامل مع الوسيطة الأساسية أو الفارغة كما لو كانت عنصرًا مجمّدًا، وسيتم إرجاعها.

توفّر طريقة delete() سلوك عامل الحذف في المكتبة العادية. تزيل هذه الدالة المفتاح المحدّد من الكائن ما لم يكن الكائن مجمّدًا. مثل عامل التشغيل delete في Standard Library، تعرض هذه الدالة القيمة true إذا كانت قيمة الإدخال الأولى (objectInput) عبارة عن كائن غير مجمّد حتى إذا كانت قيمة الإدخال الثانية (keyToDelete) تحدّد مفتاحًا غير موجود. وتعرض false في جميع الحالات الأخرى. ومع ذلك، يختلف عن عامل الحذف في المكتبة العادية في ما يلي:

  • لا يمكن أن تكون السمة keyToDelete سلسلة نصية محدّدة بنقاط تحدّد مفتاحًا مدمجًا.
  • لا يمكن استخدام delete() لإزالة عناصر من مصفوفة.
  • لا يمكن استخدام delete() لإزالة أي سمات من النطاق العام.

البنية

Object.keys(objectInput)
Object.values(objectInput)
Object.entries(objectInput)
Object.freeze(objectInput)
Object.delete(objectInput, keyToDelete)

المعلّمات

Object.keys

المَعلمة النوع الوصف
objectInput أي تمثّل هذه السمة الكائن الذي سيتم تعداد مفاتيحه. إذا لم يكن الإدخال عنصرًا، سيتم تحويله إلى عنصر.

Object.values

المَعلمة النوع الوصف
objectInput أي تمثّل هذه السمة الكائن الذي سيتم تعداد قيمه. إذا لم يكن الإدخال عنصرًا، سيتم تحويله إلى عنصر.

Object.entries

المَعلمة النوع الوصف
objectInput any تمثّل هذه المَعلمة الكائن الذي سيتم تعداد أزواج المفتاح/القيمة الخاصة به. إذا لم يكن الإدخال كائنًا، سيتم تحويله إلى كائن.

Object.freeze

المَعلمة النوع الوصف
objectInput أي العنصر المطلوب تجميده. إذا لم يكن الإدخال كائنًا، سيتم التعامل معه ككائن مجمّد.

Object.delete

المَعلمة النوع الوصف
objectInput any تمثّل هذه المَعلمة العنصر الذي سيتم حذف مفتاحه.
keyToDelete string مفتاح المستوى الأعلى المطلوب حذفه.

مثال

const Object = require('Object');

// The keys of an object are enumerated in an array.
const keys = Object.keys({foo: 'bar'});

// The values of an object are enumerated in an array.
const values = Object.values({foo: 'bar'});

// The key/value pairs of an object are enumerated in an array.
const entries = Object.entries({foo: 'bar'});

// The input object is frozen.
const frozen = Object.freeze({foo: 'bar'});

// The key is removed from the input object.
const obj1 = {deleteme: 'value'};
Object.delete(obj1, 'deleteme');
// Only a top-level key can be specified as the key to delete.
const obj2 = {nested: {key: 'value'}};
Object.delete(obj2, 'nested.key'); // This has no effect.
Object.delete(obj2.nested, 'key'); // This deletes the nested key.

Promise

تعرض هذه السمة عنصرًا يوفّر طرقًا للتفاعل مع الوعود.

تُعدّ الوعود مكافئة من الناحية الوظيفية لوعود JavaScript. يحتوي كل مثيل على ثلاث طرق تعرض كائن Promise يسمح باتخاذ إجراء إضافي عند تسوية كائن Promise:

  • ‫.then(): يعالج هذا الدور الطلبات التي تم حلّها وتلك التي تم رفضها. تتلقّى هذه الدالة ردَّي استدعاء كمعلَمات، أحدهما لحالة النجاح والآخر لحالة الخطأ.
  • ‫.catch(): يعالج الحالات المرفوضة فقط. تتلقّى دالة رد اتصال واحدة كمعلَمة.
  • .finally() - Provides a way for code to be run whether the promise was resolved or rejected. تتطلب دالة رد اتصال واحدة كمعلَمة يتم استدعاؤها بدون وسيطة.

يساوي المتغيّر الذي يعرض وعدًا القيمة التي تم حلّها للوعد، أو false إذا تم رفض الوعد.

مثال

promise.then((resolvedValue) => {
    // Handles when promise resolves.
  }, (rejectedValue) => {
    // Handles when promise rejects.
  });
promise.catch((rejectedValue) => {
    // Handles when promise rejects.
  });
promise.finally(() => {
    // Runs regardless of whether or not the previous promise resolves or
    // rejects.
  });

Promise.all

تعرض هذه الدالة وعدًا بأحد الخيارَين التاليَين:

  • يتم حلّها عندما يتم حلّ جميع المدخلات، أو
  • يتم رفضها عندما يتم رفض أي من المدخلات

البنية

Promise.all(inputs);

المعلّمات

المَعلمة النوع الوصف
inputs Array مصفوفة من القيم أو الوعود إذا لم يكن الإدخال وعدًا، يتم تمرير الإدخال كما لو كان القيمة التي تم حلّها للوعد. يتم عرض خطأ إذا لم يكن الإدخال مصفوفة.

مثال

const Promise = require('Promise');
const sendHttpGet = require('sendHttpGet');

return Promise.all(['a', sendHttpGet('https://example.com')])
  .then((results) => {
    // results will equal: ['a', {statusCode: 200, headers: {}, body: ''}]
  });

الأذونات المرتبطة

بلا عُري

Promise.create

تنشئ هذه الدالة وعدًا مكافئًا من الناحية الوظيفية لوعد JavaScript.

البنية

Promise.create(resolver);

المعلّمات

المَعلمة النوع الوصف
resolver الدالة دالة يتم استدعاؤها باستخدام دالتين: resolve وreject. سيتم تنفيذ الوعد الذي تم إرجاعه أو رفضه عند استدعاء المَعلمة المقابلة. يتم عرض خطأ إذا لم يكن المحلّل دالة.

مثال

const Promise = require('Promise');

return Promise.create((resolve, reject) => {
  // Do asynchronous work that eventually calls resolve() or reject()
});

الأذونات المرتبطة

بلا عُري

واجهات برمجة التطبيقات الاختبارية

تعمل واجهات برمجة التطبيقات هذه مع اختبارات JavaScript المعزولة لإنشاء اختبارات للقوالب المخصّصة في Google Tag Manager. لا تحتاج واجهات برمجة التطبيقات الاختبارية هذه إلى عبارة require(). [مزيد من المعلومات عن اختبارات النماذج المخصّصة]


assertApi

تعرض هذه الطريقة كائن مطابقة يمكن استخدامه لإجراء تأكيدات بطلاقة حول واجهة برمجة التطبيقات المحدّدة.

البنية

assertApi(apiName)

المعلّمات

المَعلمة النوع الوصف
apiName string اسم واجهة برمجة التطبيقات المطلوب التحقّق منها، وهو السلسلة نفسها التي تم تمريرها إلى require().

المطابقات

  • Subject.wasCalled()
  • Subject.wasNotCalled()
  • Subject.wasCalledWith(...expected)
  • Subject.wasNotCalledWith(...expected)

أمثلة

assertApi('sendPixel').wasCalled();
assertApi('getUrl').wasNotCalled();
assertApi('makeNumber').wasCalledWith('8');
assertApi('setInWindow').wasNotCalledWith('myVar', 'theWrongValue');

assertThat

تم تصميم واجهة برمجة التطبيقات assertThat وفقًا لمكتبة [Truth] من Google. وتعرض كائنًا يمكن استخدامه لإجراء تأكيدات بطلاقة حول قيمة الموضوع. سيؤدي فشل التأكيد إلى إيقاف الاختبار على الفور ووضع علامة عليه على أنه فاشل. ومع ذلك، فإن الفشل في اختبار واحد لن يؤثر على إطارات الاختبار الأخرى.

البنية

assertThat(actual, opt_message)

المعلّمات

المَعلمة النوع الوصف
actual any القيمة المطلوب استخدامها في عمليات التحقّق السلسة
opt_message string رسالة اختيارية للطباعة في حال تعذُّر التأكيد.

المطابقات

Matcher الوصف
isUndefined() تؤكّد هذه السمة أنّ الموضوع هو undefined.
isDefined() تؤكّد هذه السمة أنّ الموضوع ليس undefined.
isNull() يؤكّد أنّ الموضوع هو null.
isNotNull() تؤكّد هذه السمة أنّ الموضوع ليس null.
isFalse() يؤكّد أنّ الموضوع هو false.
isTrue() تؤكّد هذه السمة أنّ الموضوع هو true.
isFalsy() تؤكّد أنّ الموضوع خاطئ. القيم الخاطئة هي undefined وnull وfalse وNaN و0 و '' (سلسلة فارغة).
isTruthy() تؤكّد أنّ الموضوع صحيح. القيم الخاطئة هي undefined وnull وfalse وNaN و0 و"" (سلسلة فارغة).
isNaN() تؤكّد هذه السمة أنّ الموضوع هو القيمة NaN.
isNotNaN() تؤكّد هذه السمة أنّ الموضوع هو أي قيمة غير NaN.
isInfinity() تؤكّد أنّ الموضوع هو "ما لا نهاية" موجب أو سالب.
isNotInfinity() تؤكّد أنّ الموضوع هو أي قيمة غير اللانهاية الموجبة أو السالبة.
isEqualTo(expected) تؤكّد أنّ الموضوع يساوي القيمة المحدّدة. هذه مقارنة بين القيم، وليست مقارنة بين المراجع. تتم مقارنة محتوى العناصر والمصفوفات بشكل متكرر.
isNotEqualTo(expected) تؤكّد هذه السمة أنّ الموضوع لا يساوي القيمة المحدّدة. هذه مقارنة بين القيم، وليست مقارنة بين المراجع. تتم مقارنة محتوى العناصر والمصفوفات بشكل متكرر.
isAnyOf(...expected) تؤكّد أنّ الموضوع يساوي إحدى القيم المحدّدة. هذه مقارنة بين القيم، وليست مقارنة بين المراجع. تتم مقارنة محتويات الكائنات والمصفوفات بشكل متكرّر.
isNoneOf(...expected) تؤكّد أنّ الموضوع لا يساوي أيًا من القيم المحدّدة. هذه مقارنة قيم، وليست مقارنة مراجع. تتم مقارنة محتويات الكائنات والمصفوفات بشكل متكرّر.
isStrictlyEqualTo(expected) تؤكّد أنّ الموضوع يساوي تمامًا (===) القيمة المحدّدة.
isNotStrictlyEqualTo(expected) تؤكّد هذه السمة أنّ الموضوع ليس مساويًا تمامًا (!==) للقيمة المحدّدة.
isGreaterThan(expected) تؤكّد أنّ الموضوع أكبر من (>) القيمة المحدّدة في مقارنة مرتّبة.
isGreaterThanOrEqualTo(expected) تؤكّد أنّ الموضوع أكبر من أو يساوي (>=) القيمة المحدّدة في مقارنة مرتّبة.
isLessThan(expected) تؤكّد هذه السمة أنّ الموضوع أقل من (<) القيمة المحدّدة في مقارنة مرتّبة.
isLessThanOrEqualTo(expected) تؤكّد أنّ الموضوع أقل من أو يساوي (<=) القيمة المحدّدة في مقارنة مرتّبة.
contains(...expected) تؤكّد أنّ الموضوع عبارة عن مصفوفة أو سلسلة تحتوي على جميع القيم المحدّدة بأي ترتيب. هذه مقارنة قيم، وليست مقارنة مراجع. تتم مقارنة محتويات الكائنات والمصفوفات بشكل متكرّر.
doesNotContain(...expected) تؤكّد هذه السمة أنّ الموضوع عبارة عن مصفوفة أو سلسلة لا تحتوي على أي من القيم المحدّدة. هذه مقارنة بين القيم، وليست مقارنة بين المراجع. تتم مقارنة محتويات الكائنات والمصفوفات بشكل متكرّر.
containsExactly(...expected) تؤكّد أنّ الموضوع هو مصفوفة تحتوي على جميع القيم المحدّدة بأي ترتيب وبدون أي قيم أخرى. هذه مقارنة بين القيم، وليست مقارنة بين المراجع. تتم مقارنة محتويات الكائنات والمصفوفات بشكل متكرّر.
doesNotContainExactly(...expected) تؤكّد أنّ الموضوع عبارة عن مصفوفة تحتوي على مجموعة مختلفة من القيم من القيم المحدّدة بأي ترتيب. هذه مقارنة قيم، وليست مقارنة مراجع. تتم مقارنة محتويات الكائنات والمصفوفات بشكل متكرّر.
hasLength(expected) تؤكّد أنّ الموضوع عبارة عن مصفوفة أو سلسلة بالطول المحدّد. يتعذّر التأكيد دائمًا إذا لم تكن القيمة صفيفًا أو سلسلة.
isEmpty() تؤكّد أنّ الموضوع عبارة عن مصفوفة أو سلسلة فارغة (الطول = 0). يفشل التأكيد دائمًا إذا لم تكن القيمة مصفوفة أو سلسلة.
isNotEmpty() تؤكّد هذه القاعدة أنّ الموضوع عبارة عن مصفوفة أو سلسلة غير فارغة (الطول > 0). ويتعذّر دائمًا التحقّق من الصحة إذا لم تكن القيمة مصفوفة أو سلسلة.
isArray() تؤكّد هذه السمة أنّ نوع الموضوع هو مصفوفة.
isBoolean() تؤكّد هذه السمة أنّ نوع الموضوع هو قيمة منطقية.
isFunction() تؤكّد أنّ نوع الموضوع هو دالة.
isNumber() تؤكّد أنّ نوع الموضوع هو رقم.
isObject() تؤكّد أنّ نوع الموضوع هو كائن.
isString() تؤكّد أنّ نوع الموضوع هو سلسلة.

أمثلة

assertThat(undefined).isUndefined();
assertThat(id, 'ID must be defined').isDefined();
assertThat(null).isNull();
assertThat(undefined).isNotNull();
assertThat(true).isTrue();
assertThat(false).isFalse();
assertThat(1).isTruthy();
assertThat('').isFalsy();
assertThat(1/0).isInfinity();
assertThat(0).isNotInfinity();
assertThat(-'foo').isNaN();
assertThat(100).isNotNaN();
assertThat(sentUrl).isEqualTo('https://endpoint.example.com/?account=12345');
assertThat(category).isNotEqualTo('premium');
assertThat(5).isAnyOf(1, 2, 3, 4, 5);
assertThat(42).isNoneOf('the question', undefined, 41.9);
assertThat('value').isStrictlyEqualTo('value');
assertThat('4').isNotStrictlyEqualTo(4);
assertThat(['a', 'b', 'c']).contains('a', 'c');
assertThat(['x', 'y', 'z']).doesNotContain('f');
assertThat(['1', '2', '3']).containsExactly('3', '2', '1');
assertThat(['4', '5']).doesNotContainExactly('4');
assertThat('a string').hasLength(8);
assertThat([]).isEmpty();
assertThat('another string').isNotEmpty();

fail

يتعذّر اجتياز الاختبار الحالي على الفور ويتم طباعة الرسالة المحدّدة، إذا تم تقديمها.

البنية

fail(opt_message);

المعلّمات

المَعلمة النوع الوصف
opt_message string نص رسالة الخطأ الاختياري

مثال

fail('This test has failed.');

mock

تتيح لك واجهة برمجة التطبيقات mock إلغاء سلوك واجهات برمجة التطبيقات المحصورة في بيئة الاختبار. يمكن استخدام واجهة برمجة التطبيقات الوهمية بأمان في رمز النموذج، ولكنّها تعمل فقط في وضع الاختبار. تتم إعادة ضبط عمليات المحاكاة قبل تشغيل كل اختبار.

البنية

mock(apiName, returnValue);

المعلّمات

المَعلمة النوع الوصف
apiName string اسم واجهة برمجة التطبيقات المطلوب محاكاتها، وهو السلسلة نفسها التي تم تمريرها إلى require()
returnValue any القيمة التي يتم عرضها لواجهة برمجة التطبيقات أو دالة يتم استدعاؤها بدلاً من واجهة برمجة التطبيقات. إذا كانت السمة returnValue دالة، يتم استدعاء هذه الدالة بدلاً من واجهة برمجة التطبيقات في وضع الحماية. وإذا كانت السمة returnValue أي شيء آخر غير الدالة، يتم عرض هذه القيمة بدلاً من واجهة برمجة التطبيقات في وضع الحماية.

أمثلة

mock('encodeUri', "https://endpoint.example.com/?account=12345");
mock('sendPixel', function(url, onSuccess, onFailure) {
    onSuccess();
});

mockObject

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

البنية

mockObject(apiName, objectMock);

المعلّمات

المَعلمة النوع الوصف
apiName string اسم واجهة برمجة التطبيقات المطلوب محاكاتها، وهو السلسلة نفسها التي تم تمريرها إلى require()
objectMock object القيمة التي سيتم عرضها لواجهة برمجة التطبيقات أو دالة تم طلبها بدلاً من واجهة برمجة التطبيقات يجب أن يكون كائنًا.

أمثلة

const storage = {};
let firestoreId = 1;

function asTestPromise(result) {
  return {
    then: (callback) => callback(result)
  };
}

mockObject('Firestore', {
  write: (collection, input) => {
    storage[collection + '/' + (++firestoreId)] = input;
    return asTestPromise(firestoreId);
  },
  read: (document) => asTestPromise({data: storage[document]})
});

runCode

يتم تشغيل الرمز البرمجي للنموذج، أي محتوى علامة التبويب الرمز البرمجي، في بيئة الاختبار الحالية مع عنصر بيانات إدخال معيّن.

البنية

runCode(data)

المعلّمات

المَعلمة النوع الوصف
data object عنصر البيانات الذي سيتم استخدامه في الاختبار.

قيمة العائد

تعرض قيمة متغيّر لنماذج المتغيّرات، وتعرض undefined لجميع أنواع النماذج الأخرى.

مثال

runCode({field1: 123, field2: 'value'});