Tài liệu này trình bày các quyền đối với mẫu tuỳ chỉnh phía máy chủ.
Mỗi quyền:
- Được kiểm tra bằng các API yêu cầu các quyền này.
- Tự động phát hiện trong JavaScript hộp cát, dựa trên các API được sử dụng. Điều này xảy ra khi bạn chỉnh sửa trong trình chỉnh sửa mẫu tùy chỉnh (để có vòng hồi tiếp nhanh) và khi mã được biên dịch (để xác thực rằng các quyền chính xác được thực thi).
- Có thể chỉnh sửa trong trình chỉnh sửa mẫu tùy chỉnh để làm cho quyền cụ thể hơn.
- Có thể truy vấn trong JavaScript hộp cát thông qua API
queryPermission.
access_bigquery
Tên hiển thị: Truy cập vào BigQuery
Nội dung mô tả: Cho phép truy cập vào BigQuery trên Google Cloud Platform.
Cấu hình: Lựa chọn cho phép sử dụng các tổ hợp dự án, tập dữ liệu và bảng được chỉ định với BigQuery. Việc đặt cấu hình mã dự án của GOOGLE_CLOUD_PROJECT sẽ cho phép sử dụng biến môi trường GOOGLE_CLOUD_PROJECT làm mã dự án khi projectId bị loại trừ khỏi BigQuery API
parameter.
Ngày đến hạn: BigQuery
Chữ ký truy vấn:
queryPermission('access_bigquery', <operation>, <options>)
Lưu ý: <operation> là một chuỗi và có thể có các giá trị sau:
- viết
<options> là một đối tượng chứa các mục sau:
{
'projectId': <project_id>,
'datasetId': <dataset_id>,
'tableId': <table_id>
}
Mã ví dụ
const BigQuery = require('BigQuery');
const queryPermission = require('queryPermission');
const connectionInfo = {
'projectId': 'gcp-cloud-project-id',
'datasetId': 'destination-dataset',
'tableId': 'destination-table',
};
if (queryPermission('access_bigquery', 'write', connectionInfo)) {
const rows = [{
'column1': 'String1',
'column2': 1234,
}];
const options = {
'ignoreUnknownValues': true,
'skipInvalidRows': false,
};
BigQuery.insert(connectionInfo, rows, options)
.then(data.gtmOnSuccess, data.gtmOnFailure);
}
access_firestore
Tên hiển thị: Truy cập vào Google Firestore
Mô tả: Cho phép truy cập vào Google Firestore.
Cấu hình: Lựa chọn cho phép sử dụng các tổ hợp dự án và đường dẫn được chỉ định (hỗ trợ cú pháp ký tự đại diện) với Firestore. Việc đặt cấu hình mã dự án của GOOGLE_CLOUD_PROJECT sẽ cho phép sử dụng biến môi trường GOOGLE_CLOUD_PROJECT làm mã dự án khi projectId bị loại trừ khỏi Firestore API parameter.
Ngày đến hạn: Firestore
Chữ ký truy vấn:
queryPermission('access_firestore', <operation>, <options>)
Lưu ý: <operation> là một chuỗi và có thể có các giá trị sau:
- read – Cấp quyền đọc và truy vấn API
- write – Cấp quyền ghi API
- read_write – Cấp quyền đọc, ghi và truy vấn API
<options> là một đối tượng chứa các mục sau:
{
'projectId': <project_id>,
'path': <path>
}
Mã ví dụ
const Firestore = require('Firestore');
const queryPermission = require('queryPermission');
const options = {
'projectId': 'gcp-cloud-project-id',
'path': 'collection/document',
};
if (queryPermission('access_firestore', 'read', options)) {
Firestore.read('collection/document', {
projectId: 'gcp-cloud-project-id',
}).then(data.gtmOnSuccess, data.gtmOnFailure);
}
access_response
Tên hiển thị: Truy cập vào thông tin phản hồi
Mô tả: Truy cập vào nội dung, tiêu đề hoặc trạng thái của thông tin phản hồi.
Cấu hình: Lựa chọn cho phép truy cập bất kỳ hoặc truy cập cụ thể, với các lựa chọn phụ để kiểm soát quyền truy cập vào nhiều thành phần phụ.
Bắt buộc theo: setPixelResponse, setResponseBody,
setResponseHeader, setResponseStatus
Chữ ký truy vấn:
queryPermission('access_response', 'write', <component>[, <optional component name>])
Lưu ý: Quy định xem có thể truy cập vào thành phần phản hồi HTTP gửi đi hay không.
Mã ví dụ
const queryPermission = require('queryPermission');
const setResponseBody = require('setResponseBody');
const setResponseHeader = require('setResponseHeader');
const setResponseStatus = require('setResponseStatus');
if (queryPermission('access_response', 'write', 'header', 'Content-Type')) {
setResponseHeader('Content-Type', 'text/plain');
}
if (queryPermission('access_response', 'write', 'body')) {
setResponseBody('Not Found');
}
if (queryPermission('access_response', 'write', 'status')) {
setResponseStatus(404);
}
access_template_storage
Tên hiển thị: Truy cập vào bộ nhớ mẫu
Mô tả: Cho phép truy cập vào bộ nhớ tạm thời cho các mẫu có thể tồn tại trong suốt thời gian hoạt động của quy trình phía máy chủ.
Cấu hình: Không có
Ngày đến hạn: templateDataStorage
Chữ ký truy vấn: queryPermission('access_template_storage')
Mã ví dụ
const queryPermission = require('queryPermission');
const templateDataStorage = require('templateDataStorage');
const key = 'my_key';
if (queryPermission('access_template_storage')) {
const value = templateDataStorage.getItemCopy(key);
}
get_cookies
Tên hiển thị: Đọc(các) giá trị cookie
Nội dung mô tả: Đọc các giá trị của cookie có tên được chỉ định.
Cấu hình: Danh sách tên cookie được phép đọc.
Ngày đến hạn: getCookieValues
Chữ ký truy vấn: queryPermission('get_cookies', <name>)
Ghi chú: Cho phép đọc cookie hay không, tuỳ thuộc vào tên của cookie.
Mã ví dụ
const queryPermission = require('queryPermission');
const getCookieValues = require('getCookieValues');
const cookieName = 'info';
let cookieValues;
if (queryPermission('get_cookies', cookieName)) {
cookieValues = getCookieValues(cookieName);
}
ghi nhật ký
Tên hiển thị: Ghi nhật ký vào bảng điều khiển
Mô tả: Ghi dữ liệu vào Play Console và chế độ xem trước của Trình quản lý thẻ.
Cấu hình: Tuỳ chọn bật tính năng ghi nhật ký trong phiên bản chính thức. Theo mặc định, chỉ bật tính năng ghi nhật ký trong chế độ gỡ lỗi/xem trước. Nếu quyền bị từ chối, logToConsole sẽ không gửi lỗi mà sẽ chặn thông báo nhật ký.
Ngày đến hạn: logToConsole
Chữ ký truy vấn: queryPermission('logging')
Ghi chú: Kiểm soát việc một mẫu tùy chỉnh có thể ghi nhật ký vào bảng điều khiển dành cho nhà phát triển hay không.
Mã ví dụ
const queryPermission = require('queryPermission');
const logToConsole = require('logToConsole');
// Note that it's fine to call log, since the log call will be ignored if
// logging isn't permitted in the current environment.
logToConsole('diagnostic info');
use_message
Tên hiển thị: Sử dụng thông báo
Nội dung mô tả: Gửi hoặc nhận thông báo bằng API addMessageListener hoặc sendMessage.
Cấu hình: Tuỳ chọn để chỉ định loại thông báo và liệu mẫu có thể nghe, gửi hay cả hai.
Bắt buộc theo: addMessageListener, sendMessage
Chữ ký truy vấn: queryPermission('use_message', <usage>, <message type>)
Lưu ý: Cách sử dụng có thể là một trong các cách sau: listen, send hoặc listen_and_send.
Mã ví dụ
const queryPermission = require('queryPermission');
const sendMessage = require('sendMessage');
if (queryPermission('use_message', 'send', 'set_cookie')) {
sendMessage('set_cookie', {name: 'foo', value: 'bar'});
}
read_container_data
Tên hiển thị: Đọc dữ liệu vùng chứa
Nội dung mô tả: Đọc dữ liệu về vùng chứa.
Cấu hình: Không có.
Bắt buộc theo: getClientName, getContainerVersion
Chữ ký truy vấn: queryPermission('read_container_data')
Lưu ý: Kiểm soát việc mẫu tùy chỉnh có thể đọc dữ liệu vùng chứa hay không.
Mã ví dụ
const getContainerVersion = require('getContainerVersion');
const queryPermission = require('queryPermission');
if (queryPermission('read_container_data')) {
return getContainerVersion();
}
read_event_data
Tên hiển thị: Đọc dữ liệu sự kiện
Nội dung mô tả: Đọc dữ liệu từ sự kiện.
Cấu hình: Tuỳ chọn cho phép mọi quyền truy cập hoặc quyền truy cập cụ thể do danh sách đường dẫn khoá được phép kiểm soát (hỗ trợ cú pháp ký tự đại diện).
Bắt buộc theo: getAllEventData, getEventData
Chữ ký truy vấn: queryPermission('read_event_data'[, <optional key>])
Lưu ý: Kiểm soát việc mẫu tuỳ chỉnh có thể đọc dữ liệu sự kiện tại một đường dẫn khoá nhất định hay không (hoặc tất cả dữ liệu sự kiện, nếu không có đường dẫn khoá nào được cung cấp).
Mã ví dụ
const getAllEventData = require('getAllEventData');
const queryPermission = require('queryPermission');
if (queryPermission('read_event_data')) {
return getAllEventData();
}
const getEventData = require('getEventData');
const queryPermission = require('queryPermission');
const keyPath = 'parentField.childField';
if (queryPermission('read_event_data', keyPath)) {
return getEventData(keyPath);
}
read_event_metadata
Tên hiển thị: Đọc siêu dữ liệu sự kiện
Nội dung mô tả: Đọc siêu dữ liệu sự kiện trong lệnh gọi lại sự kiện
Cấu hình: Không có
Ngày đến hạn: addEventCallback
Chữ ký truy vấn: queryPermission('read_event_metadata')
Lưu ý: Kiểm soát việc một mẫu tuỳ chỉnh có thể đọc siêu dữ liệu sự kiện trong lệnh gọi lại hay không.
Mã ví dụ
const queryPermission = require('queryPermission');
const addEventCallback = require('addEventCallback');
if (queryPermission('read_event_metadata')) {
addEventCallback((containerId, eventMetadata) => {
// Read event metadata.
});
}
read_request
Tên hiển thị: Đọc yêu cầu HTTP
Nội dung mô tả: Đọc tiêu đề của yêu cầu, tham số truy vấn, nội dung, đường dẫn hoặc địa chỉ IP từ xa.
Cấu hình: Lựa chọn cho phép truy cập bất kỳ hoặc truy cập cụ thể, với các lựa chọn phụ để kiểm soát quyền truy cập vào nhiều thành phần phụ.
Bắt buộc theo: extractEventsFromMpv1, extractEventsFromMpv2,
getRemoteAddress, getRequestBody, getRequestHeader,
getRequestPath, getRequestQueryParameter, getRequestQueryParameters,
getRequestQueryString
Chữ ký truy vấn:
queryPermission('read_request', <component>[, <optional component name>])
Lưu ý: Quy định xem có thể truy cập vào thành phần phản hồi HTTP đến hay không.
Mã ví dụ
const queryPermission = require('queryPermission');
const getRequestBody = require('getRequestBody');
const getRequestHeader = require('getRequestHeader');
let body, contentType;
if (queryPermission('read_request', 'body')) {
body = getRequestBody();
}
if (queryPermission('read_request', 'header', 'content-type')) {
contentType = getRequestHeader('content-type');
}
if (body && contentType == 'application/json') { ... }
return_response
Tên hiển thị: Trả về phản hồi
Mô tả: Trả về thông tin phản hồi cho người gọi.
Cấu hình: Không có
Ngày đến hạn: returnResponse
Chữ ký truy vấn: queryPermission('return_response')
Lưu ý: Quyền này không có trường nào để thu hẹp và thường không được truy vấn.
run_container
Tên hiển thị: Chạy vùng chứa
Nội dung mô tả: Kích hoạt vùng chứa bằng một sự kiện
Cấu hình: Không có
Ngày đến hạn: runContainer
Chữ ký truy vấn: queryPermission('run_container')
Lưu ý: Quyền này không có trường nào để thu hẹp và thường không được truy vấn.
send_http
Tên hiển thị: Gửi yêu cầu HTTP
Nội dung mô tả: Gửi yêu cầu HTTP đến một URL đã chỉ định.
Bắt buộc theo: getGoogleScript, sendEventToGoogleAnalytics,
sendHttpGet, sendHttpRequest
Chữ ký truy vấn: queryPermission('send_http', <url>)
Lưu ý: Quy định việc có thể thực hiện yêu cầu HTTP hay không, tuỳ thuộc vào URL. Để đảm bảo kết nối an toàn, chỉ những URL an toàn (HTTPS) mới được cho phép.
Mã ví dụ
const queryPermission = require('queryPermission');
const sendHttpGet = require('sendHttpGet');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_http', url)) {
sendHttpGet(url);
}
send_pixel_from_browser
Tên hiển thị: Gửi pixel từ trình duyệt
Nội dung mô tả: Gửi yêu cầu GET đến một URL đã chỉ định từ trình duyệt.
Ngày đến hạn: sendPixelFromBrowser
Chữ ký truy vấn: queryPermission('send_pixel_from_browser', <url>)
Lưu ý: Quy định việc có thể gửi yêu cầu từ trình duyệt hay không, tuỳ thuộc vào URL.
Mã ví dụ
const queryPermission = require('queryPermission');
const sendPixelFromBrowser = require('sendPixelFromBrowser');
const url = 'https://example.com/search?query=foo&results=10';
if (queryPermission('send_pixel_from_browser', url)) {
sendPixelFromBrowser(url);
}
set_cookies
Tên hiển thị: Đặt cookie
Mô tả: Đặt một cookie có tên và tham số đã chỉ định.
Cấu hình: Bảng tên cookie được phép, mỗi tên có các quy định hạn chế (không bắt buộc) về tên, miền, đường dẫn, thuộc tính secure và thời gian hết hạn.
Ngày đến hạn: setCookie
Chữ ký truy vấn: queryPermission('set_cookies', <name>, <options>)
Lưu ý: Quy định xem có thể thêm một tiêu đề "Set-Cookie" nhất định vào phản hồi hay không, tuỳ thuộc vào tên cookie, miền, đường dẫn, thuộc tính secure và ngày hết hạn.
Mã ví dụ
const queryPermission = require('queryPermission');
const setCookie = require('setCookie');
const options = {
'domain': 'www.example.com',
'path': '/',
'max-age': 60*60*24*365,
'secure': true
};
if (queryPermission('set_cookies', 'info', options)) {
setCookie('info', 'xyz', options);
}
use_custom_private_keys
Tên hiển thị: Sử dụng khoá riêng tư tuỳ chỉnh
Nội dung mô tả: Sử dụng khoá riêng tư trong tệp khoá JSON cho các thao tác mã hoá.
Cấu hình: Danh sách mã khoá được phép. Mã nhận dạng phải khớp với khoá trong
tệp khoá JSON được tham chiếu bởi biến môi trường SGTM_CREDENTIALS
trên máy chủ.
Ngày đến hạn: hmacSha256
Chữ ký truy vấn: queryPermission('use_custom_private_keys', <key id>)
Ghi chú: Quản lý danh sách các khoá riêng tư được phép.
Mã ví dụ
const hmacSha256= require('hmacSha256');
const queryPermission = require('queryPermission');
const keyId = 'key1';
let result;
if (queryPermission('use_custom_private_keys', keyId)) {
result = hmacSha256('my_data', keyId);
}
use_google_credentials
Tên hiển thị: Sử dụng thông tin xác thực mặc định của ứng dụng trên Google
Mô tả: Sử dụng thông tin xác thực mặc định trên Google để thực hiện lệnh gọi đến các API của Google.
Cấu hình: Danh sách phạm vi Google OAuth 2.0 được phép.
Ngày đến hạn: getGoogleAuth
Chữ ký truy vấn: queryPermission('use_google_credentials', <scopes>)
Lưu ý: Hạn chế các phạm vi Google OAuth 2.0 được phép để sử dụng với các API của Google.
Mã ví dụ
const getGoogleAuth = require('getGoogleAuth');
const queryPermission = require('queryPermission');
const scopes = [
'https://www.googleapis.com/auth/datastore'
];
let auth;
if (queryPermission('use_google_credentials', scopes)) {
auth = getGoogleAuth(scopes);
}
user_ip
Tên hiển thị: Đọc địa chỉ IP của người dùng
Nội dung mô tả: Đọc địa chỉ IP của người dùng.
Cấu hình: Không có
Ngày đến hạn: getAnonymizedIpAddress
Chữ ký truy vấn: queryPermission('user_ip')
Lưu ý: Kiểm soát việc mẫu tùy chỉnh có thể đọc địa chỉ IP của người dùng hay không.
Mã ví dụ
const getAnonymizedIpAddress = require('getAnonymizedIpAddress');
const queryPermission = require('queryPermission');
if (queryPermission('user_ip')) {
return getAnonymizedIpAddress();
}