我正在尝试为广告组制作广告但收到以下错误:
faultString: [AdError.INVALID_AD_TYPE @ operations[0].operand.ad]
这是我的代码:
AdGroupAdProxy adGroupAdProxy= new AdGroupAdProxy(session, services);
adGroupAdProxy.createNewAd("TextAd", "http://example/12123.html", adGroupId);
public Long createNewAd(String adType, String displayUrl, Long adGroupId) throws ApiException, RemoteException{
Ad newAd = new Ad();
newAd.setAdType(adType);
newAd.setDisplayUrl(displayUrl);
AdGroupAd newAdGroupAd = new AdGroupAd();
newAdGroupAd.setAd(newAd);
newAdGroupAd.setAdGroupId(adGroupId);
AdGroupAdOperation operations = new AdGroupAdOperation();
operations.setOperand(newAdGroupAd);
operations.setOperator(Operator.ADD);
Long adId = adGroupAdService.mutate(new AdGroupAdOperation[] {operations}).getValue(0).getAd().getId();
return adId;
}
我正在研究应该提供给API的广告类型,但没有运气找到它。你能指点我的问题吗?
答案 0 :(得分:2)
在Google AdWords中,广告系列可以定位多个不同的广告网络。搜索网络用于文字广告;展示广告网络适用于图片广告。有些广告系列仅针对单个网络,而其他广告系列仅针对两个广告系列。
您可能正在尝试将文字广告上传到"仅限展示广告网络"广告活动。
还值得注意的是,在mutate操作中指示广告类型时,实际上指定的是xsi:type而不是Ad.Type(看起来这会在您的AdGroupAd类中处理,但只是想到我' d彻底!)。
答案 1 :(得分:0)
我看到了一个与此问题类似的问题。它正在设置广告的类型。您不应使用以下方式设置类型:
newAd.setAdType(adType);
而是通过基于您接收为参数的 adType 字符串创建不同的对象来创建某种类型的 Ad 。也许您甚至可以使用父类型 Ad 传递对象。当你读它时,它可能听起来有点模糊。让我演示一下:
AdGroupAdProxy adGroupAdProxy= new AdGroupAdProxy(session, services);
adGroupAdProxy.createNewAd(new TextAd(), "http://example/12123.html", adGroupId);
public Long createNewAd(Ad newAd, String displayUrl, Long adGroupId) throws ApiException, RemoteException{
newAd.setDisplayUrl(displayUrl);
AdGroupAd newAdGroupAd = new AdGroupAd();
newAdGroupAd.setAd(newAd);
newAdGroupAd.setAdGroupId(adGroupId);
AdGroupAdOperation operations = new AdGroupAdOperation();
operations.setOperand(newAdGroupAd);
operations.setOperator(Operator.ADD);
Long adId = adGroupAdService.mutate(new AdGroupAdOperation[] {operations}).getValue(0).getAd().getId();
return adId;
}
这样,Adwords库将在内部处理该类型。
这也是在以下PHP示例中完成的(它应该与Java完全相同),它们使用TextAd而不仅仅是Ad。 See line 53
P.S。我知道这个问题有点老了,但它解决了我的问题,所以它也可以为其他人解决;)