將廣告 ID 上傳到使用者名單

您可以使用大量上傳工具 API,在指定目標時將廣告 ID 新增至授權買家使用者名單。

以下是 HTTPS 大量上傳工具 API 網址範例:

https://cm.g.doubleclick.net/upload?nid={GoogleNetworkId}

端點會接受 HTTPS POST 要求。

GoogleNetworkId 的值應為 Cookie 比對聯播網 ID (NID),可用於識別大量上傳工具和 Cookie 比對 的帳戶。

HTTPS POST 要求的酬載是經過編碼的通訊協定緩衝區,用於說明要修改的清單。請參閱 cookie-bulk-upload-proto.txt 中的大量上傳工具服務結構定義。每項要求的酬載大小上限為 100 KB

如要進一步瞭解如何編譯並使用 cookie-bulk-upload.proto 將訊息序列化及剖析,請參閱教學課程 (支援您偏好的語言)。

您可以上傳下列 ID 類型:

  • Google 使用者 ID
  • 合作夥伴提供的 ID
  • iOS IDFA
  • Android 廣告 ID
  • Roku ID
  • Amazon Fire TV ID
  • Xbox 或 Microsoft ID

上傳 Google 使用者 ID

Google 使用者 ID 是來自 doubleclick.net 網域的加密 ID。

上傳 Google 使用者 ID 的方法如下:

  1. 與 Google 設定Cookie 比對,並代管對照表。
  2. 使用比對表將使用者 ID 轉換為 Google 使用者 ID。
  3. 將 Google 使用者 ID 上傳至使用者清單。

舉例來說,如果您在 Cookie 比對期間收到以下訊息:

https://ad.network.com/pixel?google_gid=CAESEHIV8HXNp0pFdHgi2rElMfk&google_cver=1

google_gid 參數是經過加密的 Google 使用者 ID。

如要將其加入使用者清單,請將其複製到 UpdateUsersDataRequest 主體:

ops {
  user_id: "CAESEHIV8HXNp0pFdHgi2rElMfk"
  user_list_id: 111
  delete: false
  user_id_type: GOOGLE_USER_ID
}

上傳合作夥伴提供的 ID

合作夥伴提供的 ID 是合作夥伴自有網域下的 ID。以下說明如何上傳合作夥伴提供的 ID:

  1. 請與 Google 設定Cookie 比對,並允許 Google 代管對照表。

  2. 將合作夥伴提供的 ID 上傳至使用者名單。

    舉例來說,如果您將網域的使用者 ID 設為 123456,可以透過 Cookie 比對,在 Google 代管的比對表中填入該 ID。比對標記應包含指派給 google_hm 參數的 ID 的網路安全Base64 編碼版本,例如以下範例:

    https://cm.g.doubleclick.net/pixel?google_nid=cookie-monster&google_hm=MTIzNDU2&google_cm
    
  3. 接著,您可以使用 UpdateUsersDataRequest 將合作夥伴提供的 ID 上傳至使用者名單:

    ops {
     user_id: "123456"
     user_list_id: 123
     delete: false
     user_id_type: PARTNER_PROVIDED_ID
    }
    
  4. Google 會將使用者清單從合作夥伴提供的 ID 轉換為 Google 使用者 ID,並將 ID 新增至使用者清單。

上傳廣告識別碼或 Android 廣告 ID

您也可以上傳裝置 ID。

  1. 使用 UpdateUsersDataRequest 上傳裝置 ID:

    ops {
     user_id: "2024D65F-EBBD-11FF-23AB-823FC255913A"
     user_list_id: 111
     delete: false
     user_id_type: IDFA
    }
    
  2. Google 接著會將使用者清單從裝置 ID 轉換為 Google 使用者 ID,並將 ID 新增至使用者清單。

工作流程

所有大量上傳工具要求和回應範例均以文字格式編寫。您必須將這些資料以序列化的 Protocol Buffer 訊息格式傳送至大量上傳工具 API 端點。

舉例來說,如要將 IDFA 和合作夥伴提供的 ID 上傳至使用者名單 123,請建立 UpdateUsersDataRequest

ops {
  user_id: "2024D65F-EBBD-11FF-23AB-823FC255913A"
  user_list_id: 123
  delete: false
  user_id_type: IDFA
}
ops {
  user_id: "1234567"
  user_list_id: 123
  delete: false
  user_id_type: PARTNER_PROVIDED_ID
}
# See warning before use. Requires affirmative end-user consent.
process_consent: true

然後,傳送 HTTPS POST 要求,並將序列化的 UpdateUsersDataRequest 訊息做為酬載。

如果所有作業都成功,您會收到下列 UpdateUsersDataResponse

status: NO_ERROR

如果部分作業成功,回應會包含 UpdateUsersDataResponse,其中包含每個失敗作業的錯誤:

status: PARTIAL_SUCCESS
errors {
  user_id: "1234567"
  error_code: UNKNOWN_ID
  user_id_type: PARTNER_PROVIDED_ID
}

如果所有作業都沒有成功,回應會包含 UpdateUsersDataResponse,其中 status 設為 BAD_COOKIE

status: BAD_COOKIE

範例

以下是 Python 指令碼範例,說明如何使用 cookie-bulk-upload.proto 產生的程式庫,透過大量上傳工具服務,為使用者清單填入特定 ID:

  #!/usr/bin/python
#
# Copyright 2023 Google Inc. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""A sample demonstrating usage of the Authorized Buyers Bulk Upload service.

Successfully running this example will add the provided ID to the given user
list. To learn more about the bulk uploader service, see:
https://developers.google.com/authorized-buyers/rtb/bulk-uploader
"""


import argparse

import gen.cookie_bulk_upload_pb2

import requests


BULK_UPLOAD_ENDPOINT_TEMPLATE = 'https://cm.g.doubleclick.net/upload?nid=%s'


def main(account_nid, user_list_id, user_id, user_id_type):
    # Build the bulk upload request.
    update_request = gen.cookie_bulk_upload_pb2.UpdateUsersDataRequest()
    update_request.send_notifications = True

    ops = update_request.ops
    op = ops.add()
    op.user_list_id = user_list_id
    op.user_id = user_id
    op.user_id_type = user_id_type

    user_id_type_value = gen.cookie_bulk_upload_pb2.UserIdType.Name(
        user_id_type)

    print(f'For NID "{account_nid}", adding user ID "{user_id}" of type '
          f'"{user_id_type_value}" to user list ID "{user_list_id}"')

    # Execute the bulk upload request.
    response = requests.post(BULK_UPLOAD_ENDPOINT_TEMPLATE % account_nid,
                             data=update_request.SerializeToString())

    # Parse and display the response.
    update_response = gen.cookie_bulk_upload_pb2.UpdateUsersDataResponse()
    update_response.ParseFromString(response.content)

    print('Operation completed with the following:')
    print(f'\tHTTP Status code: {response.status_code}')
    status_value = gen.cookie_bulk_upload_pb2.ErrorCode.Name(
        update_response.status)
    print(f'\tUpdateUsersDataResponse.status: {status_value}')
    print(f'\tUpdateUsersDataResponse.errors: {update_response.errors}')
    print('\tUpdateUsersDataResponse.notifications: '
          f'{update_response.notifications}')
    n_status_value = gen.cookie_bulk_upload_pb2.NotificationStatus.Name(
        update_response.notification_status)
    print(f'\tUpdateUsersDataResponse.notification_status: {n_status_value}')


if __name__ == '__main__':
    parser = argparse.ArgumentParser(
        description=('A sample demonstrating usage of the Authorized Buyers '
                     'bulk uploader service.'))
    parser.add_argument('-n', '--account_nid',
                        required=True, help='The Account NID.')
    parser.add_argument('-u', '--user_id',
                        required=True, help='The User ID to be added.')
    parser.add_argument('-l', '--user_list_id', type=int, required=True,
                        help='The user list that the ID is being added to.')
    parser.add_argument('-t', '--user_id_type', type=int, required=True,
                        help=('The type of user ID being added. See '
                              '"UserIdType" enum for more details.'))
    args = parser.parse_args()

    main(args.account_nid, args.user_list_id, args.user_id, args.user_id_type)

使用 Batch Upload API 的合作夥伴必須使用 process_consent 參數,表明自己有適當的法律依據,可將使用者資料與 Google 分享,以便進行大量上傳。這項規定適用於所有大量上傳要求。

如果使用者資料需要取得使用者同意聲明 (符合 Google 的《歐盟地區使用者同意授權政策》(https://www.google.com/about/company/user-consent-policy/) 或其他當地法律規定),合作夥伴必須取得使用者同意聲明,並透過設定 process_consent=True 表示已收集到同意聲明。

如果使用者資料不受使用者同意聲明規定的約束,合作夥伴必須透過設定 process_consent=True 表示不需要徵得同意聲明。

系統會篩除缺少 process_consent 的要求,並傳回以下錯誤:

status: MISSING_CONSENT_WILL_BE_DROPPED

系統會篩除 process_consent 設為 false 的要求,並傳回以下錯誤:

status: MISSING_CONSENT