使用Feed服務添加手機聚合平臺教程

要向廣告系列添加附加連接,您須要完成如下幾個步驟:
1.建立附加連接Feed。
2.填充Feed。
3.映射Feed和佔位符字段。
4.將Feed與廣告系列關聯起來。

1. 建立附加連接Feed。
咱們使用FeedService來描述要上傳的數據的具體形態。Feed包含關於數據的所有形態信息。Feed具備指定名稱,幷包括一組FeedAttribute(列)。每一個FeedAttribute還具備本身的名稱和類型。
注意:每一個帳戶極限使用20個Feed。建議您爲每一個附近信息類型使用一個Feed。

createSiteLinksFeed()使用FeedService來添加和建立附加連接Feed:
private static void createSiteLinksFeed(
AdWordsServices adWordsServices, AdWordsSession session, SiteLinksDataHolder siteLinksData)
throws Exception {

// 獲取FeedService。
FeedServiceInterface feedService = adWordsServices.get(session, FeedServiceInterface.class);

// 建立屬性。
FeedAttribute textAttribute = new FeedAttribute();
textAttribute.setType(FeedAttributeType.STRING);
textAttribute.setName("Link Text");
FeedAttribute urlAttribute = new FeedAttribute();
urlAttribute.setType(FeedAttributeType.URL);
urlAttribute.setName("Link URL");
FeedAttribute line1Attribute = new FeedAttribute();
line1Attribute.setType(FeedAttributeType.STRING);
line1Attribute.setName("Line 1 Description");
FeedAttribute line2Attribute = new FeedAttribute();
line2Attribute.setType(FeedAttributeType.STRING);
line2Attribute.setName("Line 2 Description");

// 建立Feed。
Feed siteLinksFeed = new Feed();
siteLinksFeed.setName("Feed For Sitelinks");
siteLinksFeed.setAttributes( new FeedAttribute[] {textAttribute, urlAttribute, line1Attribute, line2Attribute});
siteLinksFeed.setOrigin(FeedOrigin.USER);

// 建立運算。
FeedOperation operation = new FeedOperation();
peration.setOperand(siteLinksFeed);
operation.setOperator(Operator.ADD);

// 添加Feed。
FeedReturnValue result = feedService.mutate(new FeedOperation[] {operation});

Feed savedFeed = result.getValue()[0];
siteLinksData.siteLinksFeedId=savedFeed.getId();
FeedAttribute[] savedAttributes=savedFeed.getAttributes();
siteLinksData.linkTextFeedAttributeId=savedAttributes[0].getId();
siteLinksData.linkUrlFeedAttributeId=savedAttributes[1].getId();
siteLinksData.line1FeedAttributeId = savedAttributes[2].getId();
siteLinksData.line2FeedAttributeId = savedAttributes[3].getId();
System.out.printf("Feed with name '%s' and ID %d with linkTextAttributeId %d"+ " and linkUrlAttributeId %d and line1AttributeId %d"+ " and line2AttributeId %d was created.\n",
savedFeed.getName(),
savedFeed.getId(),
savedAttributes[0].getId(),
savedAttributes[1].getId(),
savedAttributes[2].getId(),
savedAttributes[3].getId());
  }

爲描述用於附加連接的表格數據,該方法會建立一個Feed,此Feed包含2個FeedAttribute:Link Text和Link URL,其類型分別爲STRING和URL。咱們將此Feed命名爲Feed For Sitelinks,因爲Feed數據來源於廣告客戶,所以咱們將Feed類型設置爲FeedOrigin.USER。

系統會在FeedService上調用Mutate操做,從而建立Feed。成功添加Feed後,FeedService將返回Feed ID以及全部屬性ID。咱們存儲這些ID用於以後的其餘服務。

2. 填充Feed。
向AdWords描述完數據形態後,能夠使用FeedItemService填充附加連接數據:
private static void createSiteLinksFeedItems(
AdWordsServices adWordsServices, AdWordsSession session, SiteLinksDataHolder siteLinksData)
throws Exception {

// 獲取FeedItemService。
FeedItemServiceInterface feedItemService =
adWordsServices.get(session, FeedItemServiceInterface.class);

// 建立運算以添加FeedItem。
FeedItemOperation home = newSiteLinkFeedItemAddOperation(siteLinksData, "Home",
"http://www.example.com", "Home line 1", "Home line 2");
FeedItemOperation stores = newSiteLinkFeedItemAddOperation(siteLinksData, "Stores",
"http://www.example.com/stores", "Stores line 1", "Stores line 2");
FeedItemOperation onSale = newSiteLinkFeedItemAddOperation(siteLinksData, "On Sale",
"http://www.example.com/sale", "On Sale line 1", "On Sale line 2");
FeedItemOperation support = newSiteLinkFeedItemAddOperation(siteLinksData, "Support",
"http://www.example.com/support", "Support line 1", "Support line 2");
FeedItemOperation products = newSiteLinkFeedItemAddOperation(siteLinksData, "Products",
"http://www.example.com/prods", "Products line 1", "Products line 2");
FeedItemOperation aboutUs = newSiteLinkFeedItemAddOperation(siteLinksData, "About Us",
"http://www.example.com/about", "About Us line 1", "About Us line 2");

FeedItemOperation[] operations =
new FeedItemOperation[] {home, stores, onSale, support, products, aboutUs};

FeedItemReturnValue result = feedItemService.mutate(operations);
for (FeedItem item : result.getValue()) {
System.out.printf("FeedItem with feedItemId %d was added.\n", item.getFeedItemId());
siteLinksData.siteLinkFeedItemIds.add(item.getFeedItemId());
    }

  }

createSiteLinksFeedItems爲Feed建立各個項目。每一個Feed項均以調用newSiteLinkFeedItemAddOperation的方式建立;系統將siteLinksData對象做爲參數傳遞,使Feed項可以訪問Feed屬性。

Mutate調用返回的Feed項包含咱們剛纔存儲在siteLinkFeedItemsIds中(以便以後使用)的ID。createSiteLinksFeed()使用FeedService來添加和建立附加連接Feed:

private static void createSiteLinksFeed(
AdWordsServices adWordsServices, AdWordsSession session, SiteLinksDataHolder siteLinksData)
throws Exception {

// 獲取FeedService。
FeedServiceInterface feedService = adWordsServices.get(session, FeedServiceInterface.class);

// 建立屬性。
    FeedAttribute textAttribute = new FeedAttribute();
    textAttribute.setType(FeedAttributeType.STRING);
    textAttribute.setName("Link Text");
    FeedAttribute urlAttribute = new FeedAttribute();
    urlAttribute.setType(FeedAttributeType.URL);
    urlAttribute.setName("Link URL");
    FeedAttribute line1Attribute = new FeedAttribute();
    line1Attribute.setType(FeedAttributeType.STRING);
    line1Attribute.setName("Line 1 Description");
    FeedAttribute line2Attribute = new FeedAttribute();
    line2Attribute.setType(FeedAttributeType.STRING);
    line2Attribute.setName("Line 2 Description");

    // 建立Feed。
    Feed siteLinksFeed = new Feed();
    siteLinksFeed.setName("Feed For Sitelinks");
    siteLinksFeed.setAttributes(
    new FeedAttribute[] {textAttribute, urlAttribute, line1Attribute, line2Attribute});
    siteLinksFeed.setOrigin(FeedOrigin.USER);

    // 建立運算。
    FeedOperation operation = new FeedOperation();
    operation.setOperand(siteLinksFeed);
    operation.setOperator(Operator.ADD);

    // 添加Feed。
    FeedReturnValue result = feedService.mutate(new FeedOperation[] {operation});

    Feed savedFeed = result.getValue()[0];
    siteLinksData.siteLinksFeedId = savedFeed.getId();
    FeedAttribute[] savedAttributes = savedFeed.getAttributes();
    siteLinksData.linkTextFeedAttributeId = savedAttributes[0].getId();
    siteLinksData.linkUrlFeedAttributeId = savedAttributes[1].getId();
    siteLinksData.line1FeedAttributeId = savedAttributes[2].getId();
    siteLinksData.line2FeedAttributeId = savedAttributes[3].getId();
    System.out.printf("Feed with name '%s' and ID %d with linkTextAttributeId %d"
        + " and linkUrlAttributeId %d and line1AttributeId %d"
        + " and line2AttributeId %d was created.\n",
        savedFeed.getName(),
        savedFeed.getId(),
        savedAttributes[0].getId(),
        savedAttributes[1].getId(),
        savedAttributes[2].getId(),
        savedAttributes[3].getId());
  }

爲描述用於附加連接的表格數據,該方法會建立一個Feed,此Feed包含2個FeedAttribute:Link Text和Link URL,其類型分別爲STRING和URL。咱們將此Feed命名爲Feed For Sitelinks,因爲Feed數據來源於廣告客戶,所以咱們將Feed類型設置爲FeedOrigin.USER。

系統會在FeedService上調用Mutate操做,從而建立Feed。成功添加Feed後,FeedService將返回Feed ID以及全部屬性ID。咱們存儲這些ID用於以後的其餘服務。

2. 填充Feed。
向AdWords描述完數據形態後,能夠使用FeedItemService填充附加連接數據:

  private static void createSiteLinksFeedItems(
      AdWordsServices adWordsServices, AdWordsSession session, SiteLinksDataHolder siteLinksData)
      throws Exception {
    // 獲取FeedItemService。
    FeedItemServiceInterface feedItemService =
        adWordsServices.get(session, FeedItemServiceInterface.class);

    // 建立運算以添加FeedItem。
    FeedItemOperation home = newSiteLinkFeedItemAddOperation(siteLinksData, "Home",
        "http://www.example.com", "Home line 1", "Home line 2");
    FeedItemOperation stores = newSiteLinkFeedItemAddOperation(siteLinksData, "Stores",
        "http://www.example.com/stores", "Stores line 1", "Stores line 2");
    FeedItemOperation onSale = newSiteLinkFeedItemAddOperation(siteLinksData, "On Sale",
        "http://www.example.com/sale", "On Sale line 1", "On Sale line 2");
    FeedItemOperation support = newSiteLinkFeedItemAddOperation(siteLinksData, "Support",
        "http://www.example.com/support", "Support line 1", "Support line 2");
    FeedItemOperation products = newSiteLinkFeedItemAddOperation(siteLinksData, "Products",
        "http://www.example.com/prods", "Products line 1", "Products line 2");
    FeedItemOperation aboutUs = newSiteLinkFeedItemAddOperation(siteLinksData, "About Us",
        "http://www.example.com/about", "About Us line 1", "About Us line 2");

    FeedItemOperation[] operations =
        new FeedItemOperation[] {home, stores, onSale, support, products, aboutUs};

    FeedItemReturnValue result = feedItemService.mutate(operations);
    for (FeedItem item : result.getValue()) {
      System.out.printf("FeedItem with feedItemId %d was added.\n", item.getFeedItemId());
      siteLinksData.siteLinkFeedItemIds.add(item.getFeedItemId());
    }

  }

createSiteLinksFeedItems爲Feed建立各個項目。每一個Feed項均以調用newSiteLinkFeedItemAddOperation的方式建立;系統將siteLinksData對象做爲參數傳遞,使Feed項可以訪問Feed屬性。

Mutate調用返回的Feed項包含咱們剛纔存儲在siteLinkFeedItemsIds中(以便以後使用)的ID。

完整的newSiteLinkFeedItemAddOperation方法以下:

  private static FeedItemOperation newSiteLinkFeedItemAddOperation(
      SiteLinksDataHolder siteLinksData, String text, String url, String line1,
      String line2) {

    // 爲文本值建立FeedItemAttributeValue。
    FeedItemAttributeValue linkTextAttributeValue = new FeedItemAttributeValue();
    linkTextAttributeValue.setFeedAttributeId(siteLinksData.linkTextFeedAttributeId);
    linkTextAttributeValue.setStringValue(text);
    FeedItemAttributeValue linkUrlAttributeValue = new FeedItemAttributeValue();
    linkUrlAttributeValue.setFeedAttributeId(siteLinksData.linkUrlFeedAttributeId);
    linkUrlAttributeValue.setStringValue(url);
    FeedItemAttributeValue line1TextAttributeValue = new FeedItemAttributeValue();
    line1TextAttributeValue.setFeedAttributeId(siteLinksData.line1FeedAttributeId);
    line1TextAttributeValue.setStringValue(line1);
    FeedItemAttributeValue line2TextAttributeValue = new FeedItemAttributeValue();
    line2TextAttributeValue.setFeedAttributeId(siteLinksData.line2FeedAttributeId);
    line2TextAttributeValue.setStringValue(line2);

    // 建立Feed項和運算。
    FeedItem item = new FeedItem();
    item.setFeedId(siteLinksData.siteLinksFeedId);
    item.setAttributeValues(
   new FeedItemAttributeValue[] {linkTextAttributeValue, linkUrlAttributeValue,
   line1TextAttributeValue, line2TextAttributeValue});

3. 映射Feed和佔位符字段。
FeedMappingService用於指定Feed的使用方法。在本例中,咱們將Feed用於附加連接。

  // 查看包含全部佔位符類型和字段的列表。
  private static final int PLACEHOLDER_SITELINKS = 1;

  // 查看包含全部佔位符類型和字段的列表。
  private static final int PLACEHOLDER_FIELD_SITELINK_LINK_TEXT = 1;
  private static final int PLACEHOLDER_FIELD_SITELINK_URL = 2;
  private static final int PLACEHOLDER_FIELD_LINE_1_TEXT = 3;
  private static final int PLACEHOLDER_FIELD_LINE_2_TEXT = 4;

  private static void createSiteLinksFeedMapping(
      AdWordsServices adWordsServices, AdWordsSession session, SiteLinksDataHolder siteLinksData)
      throws Exception {

    // 獲取FeedItemService。
    FeedMappingServiceInterface feedMappingService =
        adWordsServices.get(session, FeedMappingServiceInterface.class);

    // 將FeedAttributeId映射到fieldId常量。
    AttributeFieldMapping linkTextFieldMapping = new AttributeFieldMapping();
    linkTextFieldMapping.setFeedAttributeId(siteLinksData.linkTextFeedAttributeId);
    linkTextFieldMapping.setFieldId(PLACEHOLDER_FIELD_SITELINK_LINK_TEXT);
    AttributeFieldMapping linkUrlFieldMapping = new AttributeFieldMapping();
    linkUrlFieldMapping.setFeedAttributeId(siteLinksData.linkUrlFeedAttributeId);
    linkUrlFieldMapping.setFieldId(PLACEHOLDER_FIELD_SITELINK_URL);
    AttributeFieldMapping line1FieldMapping = new AttributeFieldMapping();
    line1FieldMapping.setFeedAttributeId(siteLinksData.line1FeedAttributeId);
    line1FieldMapping.setFieldId(PLACEHOLDER_FIELD_LINE_1_TEXT);
    AttributeFieldMapping line2FieldMapping = new AttributeFieldMapping();
    line2FieldMapping.setFeedAttributeId(siteLinksData.line2FeedAttributeId);
    line2FieldMapping.setFieldId(PLACEHOLDER_FIELD_LINE_2_TEXT);

    // 建立FieldMapping和運算。
    FeedMapping feedMapping = new FeedMapping();
    feedMapping.setPlaceholderType(PLACEHOLDER_SITELINKS);
    feedMapping.setFeedId(siteLinksData.siteLinksFeedId);
    feedMapping.setAttributeFieldMappings(
    new AttributeFieldMapping[] {linkTextFieldMapping,
    linkUrlFieldMapping, line1FieldMapping, line2FieldMapping});
    FeedMappingOperation operation = new FeedMappingOperation();
    operation.setOperand(feedMapping);
    operation.setOperator(Operator.ADD);

    // 保存字段映射。
    FeedMappingReturnValue result =
        feedMappingService.mutate(new FeedMappingOperation[] {operation});
    for (FeedMapping savedFeedMapping : result.getValue()) {
      System.out.printf(
          "Feed mapping with ID %d and placeholderType %d was saved for feed with ID %d.\n",
          savedFeedMapping.getFeedMappingId(), savedFeedMapping.getPlaceholderType(),
          savedFeedMapping.getFeedId());
    }

  }

此方法將Feed配置爲用於附加連接。具體配置方法是將FeedMapping上的一個佔位符類型設置爲常量PLACEHOLDER_SITELINKS。此常量的值爲1。此方法還會將FeedAttribute映射到附加連接所需的佔位符字段:link text和link URL。此映射關係能夠告訴投放系統,哪些Feed屬性被用在附加連接的不一樣方面。

4. 將Feed與廣告系列或廣告組關聯起來。
此時,咱們建立的Feed已經能夠用於附加連接了。最後一步是將Feed與廣告系列(CampaignFeedService)或廣告組(AdGroupFeedService)關聯起來,以便投放廣告時使用附加連接。

是否將Feed與廣告系列或廣告組關聯起來,這取決於映射所需的控制級別。若是某個Feed適用於整個廣告系列,則該Feed應該映射到廣告系列一級。可是,若是一個廣告系列包含多個能夠使用的Feed,那麼就應該在廣告組一級映射Feed。

private static void createSiteLinksCampaignFeed(AdWordsServices adWordsServices,
      AdWordsSession session, SiteLinksDataHolder siteLinksData, Long campaignId) throws Exception {

    // 獲取CampaignFeedService。
    CampaignFeedServiceInterface campaignFeedService =
        adWordsServices.get(session, CampaignFeedServiceInterface.class);

    RequestContextOperand requestContextOperand = new RequestContextOperand();
    requestContextOperand.setContextType(RequestContextOperandContextType.FEED_ITEM_ID);

    Function function = new Function();
    function.setLhsOperand(new FunctionArgumentOperand[] {requestContextOperand});
    function.setOperator(FunctionOperator.IN);

    List<FunctionArgumentOperand> operands = new ArrayList<FunctionArgumentOperand>();
    for (long feedItemId : siteLinksData.siteLinkFeedItemIds) {
      ConstantOperand constantOperand = new ConstantOperand();
      constantOperand.setLongValue(feedItemId);
      constantOperand.setType(ConstantOperandConstantType.LONG);
      operands.add(constantOperand);

    }

    function.setRhsOperand(operands.toArray(new FunctionArgumentOperand[operands.size()]));
    CampaignFeed campaignFeed = new CampaignFeed();
    campaignFeed.setFeedId(siteLinksData.siteLinksFeedId);
    campaignFeed.setCampaignId(campaignId);

    campaignFeed.setMatchingFunction(function);
    // 在CampaignFeed上指定佔位符類型可容許相同的Feed

    // 針對不一樣廣告系列的不一樣佔位符使用。
    campaignFeed.setPlaceholderTypes(new int[] {PLACEHOLDER_SITELINKS});

    CampaignFeedOperation operation = new CampaignFeedOperation();
    operation.setOperand(campaignFeed);
    operation.setOperator(Operator.ADD);
    CampaignFeedReturnValue result =
        campaignFeedService.mutate(new CampaignFeedOperation[] {operation});
    for (CampaignFeed savedCampaignFeed : result.getValue()) {
      System.out.printf("Campaign with ID %d was associated with feed with ID %d.\n",
          savedCampaignFeed.getCampaignId(), savedCampaignFeed.getFeedId());
    }

  }

此方法在廣告系列和Feed間創建了關聯。此數據中有兩個部分配置了此關聯:匹配函數和佔位符類型。

您可能想知道,爲何佔位符類型(sitelinks)須要針對CampaignFeed進行配置。在FeedMapping調用中,咱們會將Feed配置爲用於附加連接。在CampaignFeedService中配置佔位符類型後,您能夠爲同一Feed靈活建立多個Feed映射。這樣一來,該Feed就能針對不一樣廣告系列中的不一樣佔位符使用。

在CampaignFeed中設置匹配函數可告訴投放系統,哪些Feed項可以用做附加連接。在本例中,咱們使用了FEED_ITEM_ID做爲匹配函數中的RequestContextOperand;但咱們也能夠使用另外一種簡便的方法,即:使用其餘RequestContextOperand類型,或者使用FeedAttributeOperand(例如FeedAttributeId)實現匹配。

對廣告組也能夠使用相同的流程。您能夠使用AdGroupFeedService將Feed與廣告組關聯起來。惟一一個比較大的區別是,您須要使用AdGroupFeed和AdGroupFeedPage。

KeyMob移動聚合平臺傾向於爲開發者服務,提供主要針對開發者方便的如交叉推廣,互換廣告。支持移動廣告平臺和手機廣告,涵蓋包括Android、IOS和WindowsPhone在內的全部主流操做系統。





session

相關文章
相關標籤/搜索