要向广告系列添加附加连接,您须要完成如下几个步骤:
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