يوضّح هذا المستند واجهات برمجة التطبيقات لوضع العلامات من جهة الخادم.
addEventCallback
يُسجِّل دالة ردّ اتصال سيتمّ استدعاؤها في نهاية حدث. سيتمّ استدعاء الدالة callback عند تنفيذ جميع علامات الحدث. يتم تمرير قيمتَين إلى الدالة callback: رقم تعريف الحاوية التي تستدعي الدالة وكائن يحتوي على معلومات عن الحدث.
عند استخدام واجهة برمجة التطبيقات هذه في علامة، يتم ربطها بالحدث الحالي. عند استخدام
واجهة برمجة التطبيقات هذه في أحد العملاء، يجب ربطها بحدث معيّن باستخدام الدالةbindToEvent
في runContainer
API. اطّلِع على
المثال لمعرفة المزيد من التفاصيل.
البنية
const addEventCallback = require('addEventCallback');
addEventCallback((containerId, eventData) => {
// Take some action based on the event data.
});
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
callback |
function | الدالة التي سيتمّ استدعاؤها في نهاية الحدث. |
يحتوي عنصر eventData
على البيانات التالية:
اسم المفتاح | النوع | الوصف |
---|---|---|
tags |
صفيف |
مصفوفة من عناصر بيانات العلامات وسيكون لكل علامة تمّ تفعيلها أثناء الحدث
إدخال في هذه الصفيف. يحتوي عنصر بيانات العلامة على
رقم تعريف العلامة (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.
});
الأذونات المرتبطة
callLater
تُحدِّد موعدًا لإجراء طلب إلى دالة بشكل غير متزامن. سيتم استدعاء الدالة
بعد عرض الرمز الحالي. وهذا يعادل
setTimeout(<function>, 0)
.
مثال
const callLater = require('callLater');
const logToConsole = require('logToConsole');
callLater(() => {
logToConsole('Logged asynchronously');
});
البنية
callLater(function)
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
function |
function | الدالة المطلوب استدعاؤها. |
الأذونات المرتبطة
بلا عُري
claimRequest
استخدِم واجهة برمجة التطبيقات هذه في أحد العملاء للمطالبة بالطلب. بعد المطالبة بطلب، لا تشغّل الحاوية عملاء إضافيين.
تُظهر واجهة برمجة التطبيقات هذه استثناءً إذا تمّ استدعاؤها في علامة أو متغيّر. تُعرِض واجهة برمجة التطبيقات هذه
استثناءً في حال تمّ استدعاؤها بعد عودة العميل (مثلاً، في حال تمّ استدعاؤها في دالة ردّ اتصال غير متزامن مثل callLater
أو دالة runContainer
onComplete
).
على العميل المطالبة بالطلب باستخدام واجهة برمجة التطبيقات هذه قبل طلب بيانات من واجهة برمجة التطبيقات
runContainer
.
مثال
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 (تجاهل حالة الأحرف). ويتم تجاهل جميع الأحرف الأخرى بصمت. |
الأذونات المرتبطة
بلا عُري
الحد الأدنى لإصدار الصورة
decodeUri
فك ترميز أي أحرف مُشفَّرة في معرّف الموارد المنتظم (URI) المقدَّم لعرض سلسلة تمثل معرّف الموارد المنتظم (URI) الذي تم فك ترميزه. تعرِض القيمة undefined
عند تقديم إدخال
غير صالح.
مثال
const decodeUri = require('decodeUri');
const decodedUrl = decodeUri(data.encodedUrl);
if (decodedUrl) {
// ...
}
البنية
decodeUri(encoded_uri);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
encoded_uri |
string |
عنوان URL تم ترميزه باستخدام
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 واردًا إلى قائمة بالأحداث بتنسيق المخطّط الموحّد. عرض قائمة بالأحداث المستخرَجة يُعرِض خطأ إذا كان الطلب بتنسيق غير صحيح.
مثال
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();
الأذونات المرتبطة
getClientName
تعرِض هذه الدالة سلسلة تحتوي على اسم العميل الحالي.
البنية
getClientName();
الأذونات المرتبطة
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();
الأذونات المرتبطة
getCookieValues
تعرِض صفيفًا يحتوي على قيم جميع ملفات تعريف الارتباط التي تحمل الاسم المحدّد.
مثال
const getCookieValues = require('getCookieValues');
const lastVisit = getCookieValues('lastVisit')[0];
if (lastVisit) {
// ...
}
البنية
getCookieValues(name[, noDecode]);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
name |
string | اسم ملف تعريف الارتباط |
noDecode |
boolean |
إذا كانت القيمة true ، لن يتم فك ترميز قيم ملفات تعريف الارتباط قبل
عرضها. الإعداد التلقائي هو false .
|
الأذونات المرتبطة
getEventData
لعرض نسخة من القيمة في المسار المحدّد في بيانات الحدث. تعرِض
undefined
إذا لم تتوفّر بيانات عن الحدث أو إذا لم تتوفّر قيمة في المسار المحدّد.
مثال
const getEventData = require('getEventData');
const campaignId = getEventData('campaign.id');
const itemId = getEventData('items.0.id');
const referrer = getEventData('page_referrer');
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
keyPath |
أي |
يشير ذلك إلى مسار المفتاح، حيث يتم فصل مكوّنات المسار بواسطة نقاط. يمكن أن تكون
مكونات المسار عبارة عن مفاتيح في عنصر أو مؤشرات في مصفوفة. إذا
keyPath لم تكن سلسلة، يتم تحويلها إلى سلسلة.
|
البنية
getEventData(keyPath);
الأذونات المرتبطة
getGoogleAuth
تُعيد هذه الدالة عنصر تفويض الذي سيتضمّن عند استخدامه مع
sendHttpGet
أو sendHttpRequest
عنوان تفويض لواجهات برمجة تطبيقات Google Cloud. تستخدِم واجهة برمجة التطبيقات هذه
بيانات الاعتماد التلقائية للتطبيق للعثور تلقائيًا على بيانات الاعتماد من
بيئة الخادم.
مثال
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
|
صفيف | صفيف من نطاقات OAuth 2.0 لواجهات برمجة تطبيقات Google لطلب الوصول إليها |
الأذونات المرتبطة
يتطلب إذن 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"
من https://www.googletagmanager.com/gtm.js .
|
options |
object | خيارات الطلب الاختيارية يمكنك الاطّلاع أدناه على الخيارات المتاحة. |
الخيارات
Option | النوع | الوصف |
---|---|---|
id |
string |
تنطبق على 'GTAG' التي تستخدم رقم تعريف القياس gtag و
'GTM' التي تستخدم رقم تعريف حاوية الويب (مثل GTM-XXXX).
|
debug |
أي | إذا كان الحقل صحيحًا، يطلب الإجراء إصدار تصحيح الأخطاء من ملف برمجي القياس ويعرضه. |
timeout |
number |
مهلة الطلب بالملي ثانية، ويتم تجاهل القيم غير الموجبة. إذا
انتهت مهلة الطلب، سيتمّ استدعاء الدالة المُعاد الاتصال بها باستخدام undefined لقيمة النص البرمجي و{} لملف
البيانات الوصفية.
|
يتم تجاهل مفاتيح الخيارات غير المعروفة.
الأذونات المرتبطة
يتطلب إذن send_http
. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:
- السماح باستخدام Google Domains
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();
الأذونات المرتبطة
getRequestHeader
عرض قيمة عنوان الطلب المُسمّى كـ سلسلة، إذا كان متوفّرًا، أو
undefined
بخلاف ذلك إذا تكرّر العنوان، يتمّ دمج القيم المعروضة
معًا باستخدام ', '
.
مثال
const getRequestHeader = require('getRequestHeader');
const host = getRequestHeader('host');
البنية
getRequestHeader(headerName);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
headerName |
string | اسم العنوان هذه القيمة غير حسّاسة لحالة الأحرف. |
الأذونات المرتبطة
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();
الأذونات المرتبطة
getRequestQueryParameter
تعرض القيمة غير المشفّرة لمَعلمة سلسلة طلب البحث المُسمّاة كـ سلسلة،
أو undefined
إذا لم تكن المَعلمة متوفّرة. إذا تكررت المَعلمة في
سلسلة طلب البحث، سيتم عرض
القيمة الأولى التي تظهر في سلسلة طلب البحث.
مثال
const getRequestQueryParameter = require('getRequestQueryParameter');
const query = getRequestQueryParameter('query');
if (query) {
// Process query here.
}
البنية
getRequestQueryParameter(name);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
name |
string | اسم مَعلمة طلب البحث |
الأذونات المرتبطة
getRequestQueryParameters
تعرِض مَعلمات طلب HTTP الواردة كعنصر يربط أسماء مَعلمات الطلب بالقيمة أو القيم المقابلة. يتم فك ترميز أسماء المَعلمات وقيمتها.
مثال
const getRequestQueryParameters = require('getRequestQueryParameters');
const queryParameters = getRequestQueryParameters();
if (queryParameters['search']) {
// Handle the search query here.
const maxResults = queryParameters['max_results'];
}
البنية
getRequestQueryParameters();
الأذونات المرتبطة
getRequestQueryString
تعرِض هذه السمة طلب البحث كسلسلة، بدون علامة الاستفهام البادئة، أو سلسلة فارغة إذا لم يتضمّن عنوان URL للطلب سلسلة طلب بحث.
مثال
const getRequestQueryString = require('getRequestQueryString');
const queryString = getRequestQueryString();
if (queryString !== '') {
// Handle the query string.
}
البنية
getRequestQueryString();
الأذونات المرتبطة
getTimestamp
تمّ إيقاف هذا العمود نهائيًا. استخدِم getTimestampMillis بدلاً من ذلك.
تعرِض هذه الدالة رقمًا يمثّل الوقت الحالي بالمللي ثانية منذ بداية حقبة Unix، كما تعرضه الدالة Date.now()
.
البنية
getTimestamp();
الأذونات المرتبطة
بلا عُري
getTimestampMillis
تعرِض هذه الدالة رقمًا يمثّل الوقت الحالي بالمللي ثانية منذ بداية حقبة Unix، كما تعرضه الدالة Date.now()
.
البنية
getTimestampMillis();
الأذونات المرتبطة
بلا عُري
getType
لعرض سلسلة تصف نوع القيمة المحدّدة.
نوع الإدخال | القيمة المعروضة |
---|---|
string | 'string' |
number | 'number' |
boolean | 'boolean' |
null | 'null' |
undefined | 'undefined' |
صفيف | 'array' |
العنصر | '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 في حال عدم تحديدها. |
الأذونات المرتبطة
الحد الأدنى لإصدار الصورة
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 V2، أو
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, ...]);
المعلّمات
تأخذ واجهة برمجة التطبيقات وسيطة واحدة أو أكثر، ويتم تحويل كل وسيطة إلى سلسلة، إذا كان ذلك ضروريًا، ويتم تسجيلها في وحدة التحكّم.
الأذونات المرتبطة
makeInteger
لتحويل القيمة المحدّدة إلى رقم (عدد صحيح).
البنية
makeInteger(value);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
value |
أي نوع | القيمة المطلوب تحويلها. |
الأذونات المرتبطة
بلا عُري
makeNumber
لتحويل القيمة المحدّدة إلى رقم.
البنية
makeNumber(value);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
value |
أي نوع | القيمة المطلوب تحويلها. |
الأذونات المرتبطة
بلا عُري
makeString
لعرض القيمة المحدّدة كـ سلسلة.
البنية
makeString(value);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
value |
أي نوع | القيمة المطلوب تحويلها. |
الأذونات المرتبطة
بلا عُري
makeTableMap
لتحويل عنصر جدول بسيط يحتوي على عمودَين إلى Map
يُستخدَم هذا الإجراء ل
تغيير حقل نموذج SIMPLE_TABLE
يتضمّن عمودَين إلى تنسيق
أكثر سهولة في الإدارة.
على سبيل المثال، يمكن أن تحوّل هذه الدالة عنصر جدول:
[
{'key': 'k1', 'value': 'v1'},
{'key': 'k2', 'value': 'v2'}
]
في خريطة:
{
'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
.
الأذونات المرتبطة
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 |
function | دالة استدعاء يتمّ تنفيذها بعد انتهاء تنشيط جميع العلامات. |
onStart |
function | طلب إعادة اتصال يتمّ استدعاؤه على الفور، قبل بدء تنشيط العلامات. |
الأذونات المرتبطة
sendEventToGoogleAnalytics
تُرسِل حدثًا واحدًا باستخدام بيانات الأحداث الشائعة إلى "إحصاءات Google" وتُعرِض
وعدًا يُحدِّد كائنًا يحتوي على مفتاح location
أو
يرفض كائنًا يحتوي على مفتاح reason
. تستند الوجهة، وهي "إحصاءات Google 4"،
إلى رقم تعريف القياس في بيانات الحدث.
يتم ضبط الحقل 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 | الحدث بتنسيق مخطّط Unified Schema |
الأذونات المرتبطة
يتطلب إذن send_http
. يجب ضبط الإذن للسماح بالوصول إلى ما يلي على الأقل:
- السماح باستخدام Google Domains
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 . |
الأذونات المرتبطة
sendHttpRequest
يُرسِل طلب HTTP إلى عنوان URL المحدّد، ويعرض وعدًا يحلّ مع الردّ بعد اكتمال الطلب أو انتهاء مهلته.
النتيجة التي تم حلّها هي عنصر يحتوي على ثلاثة مفاتيح: statusCode
وheaders
وbody
. إذا تعذّر إكمال الطلب (مثل عنوان URL غير صالح أو عدم توفّر مسار إلى المضيف،
أو تعذّر التفاوض على طبقة المقابس الآمنة، وما إلى ذلك)، سيتم رفض الوعد باستخدام الرمز: {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 . |
الأذونات المرتبطة
sendPixelFromBrowser
يُرسِل هذا الإجراء أمرًا إلى المتصفّح لتحميل عنوان URL المقدَّم كعلامة <img>
. يتوفّر
بروتوكول الأوامر هذا في علامة Google لخدمة "إحصاءات Google 4" وعلامات الويب
إحصاءات Google: حدث في "إحصاءات Google". يجب ضبط عنوان URL ل حاوية الخادم. اطّلِع على التعليمات للحصول على مزيد من التفاصيل.
تعرض واجهة برمجة التطبيقات هذه القيمة false
إذا كان الطلب الوافد لا يتوافق مع بروتوكول
الطلبات، أو إذا سبق أن تم تفريغ الاستجابة. بخلاف ذلك، تعرِض واجهة برمجة التطبيقات هذهtrue
.
مثال:
const sendPixelFromBrowser = require('sendPixelFromBrowser');
sendPixelFromBrowser('https://example.com/?id=123');
البنية
sendPixelFromBrowser(url)
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
url |
string | عنوان URL المراد إرساله إلى المتصفّح. |
الأذونات المرتبطة
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
- النطاق في المستوى الأعلى مسبوقًا باسم (eTLD+1) لعنوان
expires: الحد الأقصى لمدة ملف تعريف الارتباط. يجب أن تكون هذه القيمة سلسلة تاريخ بتنسيق التوقيت العالمي المتفق عليه، مثلاً "السبت 26 تشرين الأول (أكتوبر) 1985 08:21:00 GMT". في حال ضبط كل من
expires
وmax-age
، تكونmax-age
لها الأولوية.httpOnly: يمنع JavaScript من الوصول إلى ملف تعريف الارتباط في حال
true
.max-age: عدد الثواني إلى أن تنتهي صلاحية ملف تعريف الارتباط سيؤدي إدخال صفر أو رقم سالب إلى انتهاء صلاحية ملف تعريف الارتباط على الفور. في حال ضبط كل من
expires
وmax-age
، تكون الأولوية لـmax-age
.المسار: مسار يجب أن يكون متوفّرًا في عنوان URL المطلوب، وإلا لن يُرسِل المتصفّح عنوان ملف تعريف الارتباط.
آمن: في حال ضبطه على
true
، لا يتم إرسال ملف تعريف الارتباط إلى الخادم إلا عند إرسال طلب من نقطة نهايةhttps:
.sameSite: يُؤكد أنّه يجب عدم إرسال ملف تعريف ارتباط مع طلبات من مصادر مختلفة. يجب أن تكون
'strict'
أو'lax'
أو'none'
.
الأذونات المرتبطة
setPixelResponse
تضبط نص الاستجابة على ملف GIF أبعاده 1×1، وتضبط عنوان 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 |
function |
يتمّ استدعاؤه باستخدام الملخّص الناتج، الذي يتم تشفيره بترميز 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);
});
الأذونات المرتبطة
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. هناك
مَعلمة اختيارية ومَعلمتَان مطلوبتَان:
|
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);
الأذونات المرتبطة
Firestore
تعرِض دالة Firebase هذه عنصرًا يقدّم دوال 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 |
صفيف | مصفوفة من شروط طلبات البحث يأتي كل طلب بحث على شكل
مصفوفة تحتوي على ثلاث قيم: المفتاح،
عامل التشغيل، والقيمة المتوقّعة. مثلاً:
[[‘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.
الأذونات المرتبطة
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
(عادةً من خلال علامة)، سيتم تنفيذ callback
بشكل متزامن. يتم تشغيل دالة ردّ الاتصال بمَعلمتَين:
messageType:string
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
تعرِض القيمة "صحيح" إذا تمت إضافة مستمع رسائل لنوع الرسالة المحدّد. تعرِض القيمة False في الحالات الأخرى.
البنية
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...
التي يمكن عدّها للكائن المحدَّد بالترتيب نفسه الذي ستُعرِضه حلقة for...in...
. إذا كانت قيمة الإدخال
ليست عنصرًا، سيتم تحويلها إلى عنصر.
توفّر الطريقة values()
سلوك Object.values()
المتوفّر في المكتبة العادية. تعرض هذه الدالة صفيفًا من قيم السمات التي يمكن عدّها للكائن المحدّد
بالترتيب نفسه الذي ستستخدمه حلقة for...in...
. إذا لم تكن قيمة الإدخال
عنصرًا، سيتم تحويلها إلى عنصر.
توفّر الطريقة entries()
سلوك Object.entries()
المكتبة العادية. ويعرِض صفيفًا من أزواج سمة [key, value]
التي يمكن عدّها للكائن المحدَّد بالترتيب نفسه الذي ستتبعه حلقة for...in...
. إذا كانت قيمة
الإدخال ليست عنصرًا، سيتم تحويلها إلى عنصر.
توفّر الطريقة freeze()
سلوك Object.freeze()
المتوفّر في المكتبة العادية. لا يمكن تغيير كائن مجمّد بعد الآن، لأنّ تجميد الكائن يمنع
إضافة خصائص جديدة إليه، وإزالة الخصائص الحالية،
وتغيير قيم الخصائص الحالية. تعرِض freeze()
العنصر نفسه الذي تم تمريره. سيتم التعامل مع الوسيطة البدائية أو الفارغة كما يلي:
كما لو كانت عنصرًا مجمّدًا، وسيتم إرجاعها.
توفّر الطريقة delete()
سلوك عامل الحذف
في المكتبة العادية. تزيل هذه الطريقة المفتاح المحدّد من العنصر ما لم يكن العنصر مجمّدًا.
مثل عامل التشغيل delete في المكتبة العادية، يعرض الرمز true
إذا كانت قيمة الإدخال
الأولى (objectInput
) عنصرًا غير مجمّد حتى إذا كانت قيمة الإدخال
الثانية (keyToDelete
) تحدّد مفتاحًا غير متوفّر. ويعرض الرمز false
في
جميع الحالات الأخرى. ومع ذلك، يختلف عن عامل التشغيل delete في المكتبة العادية
بالأساليب التالية:
- لا يمكن أن تكون
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 | أي | الكائن الذي يجب سرد أزواج المفتاح/القيمة له إذا لم يكن الإدخال هو عنصر، سيتم تحويله إلى عنصر. |
Object.freeze
المَعلمة | النوع | الوصف |
---|---|---|
objectInput | أي | العنصر المطلوب تجميده إذا لم يكن الإدخال عنصرًا، سيتم التعامل معه كعنصر مجمّد. |
Object.delete
المَعلمة | النوع | الوصف |
---|---|---|
objectInput | أي | العنصر الذي تريد حذف مفتاحه |
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. يحتوي كل مثيل على ثلاث طرق تُعرِض وعدًا يسمح باتخاذ إجراء إضافي عند اكتمال الوعد:
.then()
- يعالج كلاً من الحالات التي تم حلّها والحالات المرفوضة. يأخذ المكوّن اثنَين من وظائف callback كمَعلمتَين: واحدة لحالة النجاح وأخرى لحالة الانهيار..catch()
- يعالج الحالات المرفوضة فقط. تأخذ دالة ردّ الاتصال معلَمة واحدة كأحد المَعلمات.-
.finally()
: يوفّر طريقة لتشغيل الرمز البرمجي سواء تم حلّ الوعد أو رفضه. تأخذ دالة ردّ اتصال واحدة كمَعلمة يتمّ استدعاؤها بدون واسِطة.
المتغيّر الذي يعرِض وعدًا يساوي القيمة التي تم حلّها للوعد، أو
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 |
صفيف | صفيف من القيم أو الوعود إذا لم يكن الإدخال وعدًا، يتم تمرير الإدخال كما لو كان القيمة التي تم حلّها للوعد. تُعرِض القيمة خطأً إذا لم يكن الإدخال صفيفًا. |
مثال
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 |
function | دالة يتمّ استدعاؤها بدالتَين: حلّ ورفض. سيتم حلّ الوعد المعروض أو رفضه عند استدعاء المَعلمة المقابلة له. يُعرِض خطأ إذا لم تكن أداة التحليل دالة. |
مثال
const Promise = require('Promise');
return Promise.create((resolve, reject) => {
// Do asynchronous work that eventually calls resolve() or reject()
});
الأذونات المرتبطة
بلا عُري
واجهات برمجة التطبيقات الاختبارية
تعمل واجهات برمجة التطبيقات هذه مع اختبارات JavaScript في وضع الحماية لإنشاء اختبارات للنماذج المخصّصة
في أداة "إدارة العلامات من Google". لا تحتاج واجهات برمجة التطبيقات الاختبارية هذه إلى 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 |
أي | القيمة المطلوب استخدامها في عمليات التحقّق من الطلاقة. |
opt_message |
string | رسالة اختيارية للطباعة في حال تعذّر تأكيد القيمة. |
المطابقون
أداة المطابقة | الوصف |
---|---|
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
API بإلغاء سلوك واجهات برمجة التطبيقات في وضع الحماية. إنّ واجهة برمجة التطبيقات mock
API آمنة للاستخدام في رمز النموذج، ولكنّها لا تعمل إلا في وضع الاختبار.
تتم إعادة ضبط النماذج الاختبارية قبل إجراء كل اختبار.
البنية
mock(apiName, returnValue);
المعلّمات
المَعلمة | النوع | الوصف |
---|---|---|
apiName |
string | اسم واجهة برمجة التطبيقات التي سيتم محاكاتها، وهي السلسلة نفسها التي تم تمريرها إلى
require() |
returnValue |
أي | القيمة التي سيتم عرضها لواجهة برمجة التطبيقات أو دالة يتم استدعاؤها بدلاً من
واجهة برمجة التطبيقات إذا كانت 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'});