syntax = "proto3";
option go_package = "./;xy";
package xy;

message BidRequest {
  // 请求 id, 每个请求唯一
  string id = 1;
  // 协议版本, 当前协议版本 2.0.0
  string version = 2;
  // Ad 数组，目前只支持传一个 Ad 对象
  repeated Ad ads = 3;
  // App 对象
  App app = 4;
  // Device 对象
  Device device = 5;
  // User 对象
  User user = 6;
  // 是否需要 https 链接, 默认不需要
  bool need_https = 7;
  message Ad {
    // 广告位 token
    string ad_unit_token = 1;
    // 广告位宽度
    int64 width = 2;
    // 广告位高度
    int64 height = 3;
    // 底价, 单位为分
    double floor_price = 4;
    // 是否支持将 html 广告放在 webview 里面展示, 默认不支持
    bool support_js = 5;
    // 视频最小播放时长, 单位 秒, 0表示不限制
    int64 video_min_duration = 6;
    // 视频最大播放时长, 单位 秒, 0表示不限制
    int64 video_max_duration = 7;
  }
  message App {
    // 应用名
    string name = 1;
    // 应用包名
    string bundle = 2;
    // 应用版本
    string version = 3;
    // -1: 不支持 deeplink
    // 0: 在浏览器打开的目标页面中触发 deeplink (默认)
    // 1: 表示可在广告页面触发 deeplink, 失败则打开 target_url
    int64 deeplink_mode = 4;
  }
  enum DeviceType {
    UNKNOWN = 0; //未知
    PHONE = 1;   //手机
    PAD = 2;     //平板
    TV = 3;      //电视
    PC = 4;      //电脑
  }
  message Device {
    // IP 地址
    string ip = 1;
    // IPv6 地址
    string ipv6 = 2;
    // WebView User-Agent
    string user_agent = 3;
    // 生产厂商，例如:"Samsung"
    string make = 4;
    // 手机品牌，例如:"MI4"
    string brand = 5;
    // 手机型号
    string model = 6;
    // 操作系统，取值范围: "android", "ios"
    string os = 7;
    // 操作系统版本
    string os_version = 8;
    // 网络连接类型，取值范围: "wifi", "2g", "3g", "4g", "5g"
    string connection_type = 9;
    // 屏幕方向，取值范围: "landscape", "portrait"
    string orientation = 10;
    // 移动网络运营商，取值范围: "46000", "46002", "46001", "46003"
    // 46000: 中国移动
    // 46002: 中国移动
    // 46001: 中国联通
    // 46003: 中国电信
    string plmn = 11;
    // Mac 地址
    string mac = 12;
    // Mac 地址的 md5 值
    string mac_md5 = 13;
    // 系统语言
    string language = 14;
    // 屏幕宽度, 单位: 像素
    int64 screen_width = 15;
    // 屏幕高度, 单位: 像素
    int64 screen_height = 16;
    // 屏幕像素密度
    int64 screen_dpi = 17;
    // 屏幕物理像素密度
    double screen_pxratio = 18;
    // 地理位置经度
    double geo_longitude = 19;
    // 地理位置纬度
    double geo_latitude = 20;
    // 用户设备安装包名列表, 用逗号分隔
    string installed_apps = 21;
    // 用户设备类型
    DeviceType device_type = 22;
    // 无线网 SSID
    string ssid = 23;
    // WIFI 路由器 Mac 地址
    string wifi_mac = 24;
    // 设备 IMEI，不传会影响填充，CDMA 手机请传 MEID 码
    string imei = 25;
    // 设备 IMEI 的 MD5 值，IMEI 获取不到时请传这个字段
    string imei_md5 = 26;
    // Android ID
    string android_id = 27;
    // Android ID 的 md5 值
    string android_id_md5 = 28;
    // 设备 IMSI
    string imsi = 29;
    // Android 广告 ID
    string android_advertising_id = 30;
    // 匿名设备标识符 OAID
    // 对于 Android 设备，当 oaid 不填时，imei(或 imei_md5) 和 android_id(或
    // android_id_md5) 必填
    string oaid = 31;
    // OAID 的 md5 值
    string oaid_md5 = 32;
    // 手机 ROM 的版本号（例如 MIUI 11.0.6, EMUI 10.1 等)
    string rom_version = 33;
    // 系统编译时间（时间戳）
    int64 sys_compiling_time = 34;
    // IDFA, 不传会影响填充
    string idfa = 35;
    // IDFA 的 md5 值，IDFA 获取不到时请传这个字段
    string idfa_md5 = 36;
    // IDFV
    string idfv = 37;
    // 中广协推出的 iOS 设备 ID，支持同时传两个版本
    string caid = 38;
    // CAID 的 md5 值
    string caid_md5 = 39;
    // CAID 的版本号
    string caid_version = 40;
    string caid2 = 41;
    string caid2_md5 = 42;
    string caid2_version = 43;
    string openudid = 44;
    string boot_mark = 45;
    string update_mark = 46;
    // 拼多多设备指纹
    string paid = 47;
    // 设备启动时间
    string device_startup_time = 48;
    // 系统更新时间
    string system_update_time = 49;
    // 系统初始化时间
    string system_init_time = 50;
    // 设备 machine 值（iOS），示例："iPhone10,3"
    string hardware_machine = 51;
    // 设备 model 值（仅限 iOS），示例："D22AP"
    string hardware_model = 52;
  }
  message User {
    // 年龄
    int64 age = 1;
    // 性别，取值范围："男", "女", "未知"
    string gender = 2;
    // 用户感兴趣关键字
    repeated string keywords = 3;
  }
}

message BidResponse {
  // 回填 Request 中的 id
  string id = 1;
  // Ad 对象数组，目前只支持返回一个 Ad 对象
  repeated Ad ads = 2;
  message Ad {
    // 广告宽度
    int64 width = 1;
    // 广告高度
    int64 height = 2;
    // 广告 ID
    string ad_id = 3;
    // 素材 ID
    string creative_id = 4;
    // 广告价格, 单位 分
    double price = 5;

    // 标题
    string title = 6;
    // 副标题
    string subtitle = 7;
    // 描述
    string description = 8;
    // 广告主名称
    string advertiser_name = 9;
    // 按钮文字
    string button_text = 10;
    // 图片数组
    repeated Image images = 11;
    // 图标
    Image icon = 12;
    // Logo
    Image logo = 13;
    // 视频
    Video video = 14;
    // 视频封面图
    Image video_cover = 15;
    // html 代码片段, 在 webview 中加载
    string html_snippet = 16;
    // html 代码地址, 在 webview 中加载
    string html_url = 17;

    // 广告动作类型
    // 1: 在应用内用 webview 打开 target_url
    // 2: 在系统浏览器打开 target_url
    // 6: 下载应用
    // 7: 打开 deeplink_url
    // 8: 打开小程序
    int64 action = 18;
    // 目标地址, 里面的宏需要替换
    string target_url = 19;
    // 下载应用包名
    string download_app_bundle = 20;
    // 下载应用名称
    string download_app_name = 21;
    // 下载应用版本
    string download_app_version = 22;
    // 下载应用大小, 单位 Bytes
    int64 download_app_size = 23;
    // 下载应用描述
    string download_app_desc = 24;
    // 下载应用隐私协议地址
    string privacy_url = 25;
    // 下载应用权限列表地址
    string permission_url = 26;
    // 小程序原始id
    string mini_program_id = 27;
    // 小程序页面路径
    string mini_program_path = 28;
    // Deeplink 或 Universal Link，里面的宏需要替换
    string deeplink_url = 29;

    // 竞价获胜上报地址
    string win_notice_tracker = 30;
    // 曝光上报地址, 里面的宏需要替换
    repeated string impression_trackers = 31;
    // 点击上报地址, 里面的宏需要替换
    repeated string click_trackers = 32;
    // 应用下载开始上报地址, 里面的宏需要替换
    repeated string download_begin_trackers = 33;
    // 应用下载完成上报地址, 里面的宏需要替换
    repeated string download_ended_trackers = 34;
    // 应用下载完成上报地址, 里面的宏需要替换
    repeated string install_ended_trackers = 35;
    // 视频播放开始上报地址, 里面的宏需要替换
    repeated string video_play_begin_trackers = 36;
    // 视频播放中止上报地址, 里面的宏需要替换
    repeated string video_play_break_trackers = 37;
    // 视频播放结束上报地址, 里面的宏需要替换
    repeated string video_play_ended_trackers = 38;
    // deeplink 唤醒时，发现应用没有安装的上报地址
    repeated string deeplink_app_not_installed_trackers = 39;
    // deeplink 唤醒时，发现应用有安装的上报地址
    repeated string deeplink_app_installed_trackers = 40;
    // deeplink 唤醒时，应用有安装, 但唤起失败的上报地址
    repeated string deeplink_app_invoke_failed_trackers = 41;
    // deeplink 唤醒时，应用唤起成功的上报地址
    repeated string deeplink_app_invoke_success_trackers = 42;
    // 汇川预算 点击坐标打点（具体细节，参考文档）
    string click_area_report_url = 43;
    // 口令
    string passcode = 44;
    // 下载应用介绍页 URL；最终值为空时不编码
    string download_app_desc_url = 45;
  }
  message Image {
    // 图片地址
    string url = 1;
    // 图片宽度
    int64 width = 2;
    // 图片高度
    int64 height = 3;
  }
  message Video {
    // 视频地址
    string url = 1;
    // 视频时长, 单位 秒
    int64 duration = 2;
  }
}
