java - 使用 Java 在 openRTB 中创建 protobuf 扩展

标签 java protocol-buffers

我正在尝试在 openRTB protobuf 请求中创建扩展,但我不知道如何创建。 正如他们在文档(https://github.com/google/openrtb/wiki)中所说,我应该可以做这样的事情:

BidRequest request = BidRequest.newBuilder()
    // ... add Imp, etc.
    .addDevice(Device.newBuilder()
        .setModel("Nexus 85")
        // ... other standard Device fields
        .setGeo(Geo.newBuilder()
            .setCountry("USA")
            .setCity("Newer York")
            .zetZip("102879")
            .setExtension(SpaceAdsExt.planet, "Mars")))
    .build();

在此示例中,他们设置了一个名为 SpaceAdsExt.planet 的自定义扩展。我如何实现这样的扩展?

最佳答案

BidRequest 原型(prototype)为扩展保留了一定范围的标签号。根据其定义here ,标签200到999和2000到9999保留供交易所和项目扩展。您需要创建一个 .proto 文件,通过为这些标签编号之一定义扩展名来扩展 BidRequest。看起来像这样:

extend com.google.openrtb.BidRequest {
  optional MyExtension my_extension = 2111;
}

有关更多详细信息,请参阅 Protocol Buffer 文档 here 。需要注意的一件事是,您必须为您的扩展选择一个唯一的标签号 - 如果其他人定义了与您选择的标签号相同的扩展,则可能会导致数据损坏。我建议与 OpenRTB 开发人员联系,看看他们是否有确保分机号唯一性的约定。

关于java - 使用 Java 在 openRTB 中创建 protobuf 扩展,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37143416/

相关文章:

tcp - 如何编写一个高性能的 Netty 客户端

go - 如何允许 .proto 文件中包名称的减号?

java - 从数组列表 java 中删除/删除对象

java - PreparedStatements 或 callableStatements

java - Java 函数执行的时间限制

java - 如何在不创建任何新文件的情况下访问 zip 文件中目录中的文件?

java - 为什么我在执行时没有获取值,但在调试时获取它们?

serialization - Protocol Buffers - 如何实现可扩展性和向后兼容性?

c# - protobuf-net 和重复字段

go - protoc-gen-go-grpc : program not found or is not executable