使用YouTube视频时Google Ads API如何填充AdVideoAsset的asset字段
核心逻辑说明
AdVideoAsset.setAsset()需要传入的是Google Ads账户下已创建的YouTube视频素材的资源名称(Resource Name),格式为customers/{客户ID}/assets/{素材ID}。你不需要通过Google Ads API上传视频到YouTube,只需要提前将视频上传到YouTube拿到视频ID,再将该ID绑定为Google Ads账户下的Youtube视频类型Asset即可。
具体实现步骤
1. 实现Youtube视频绑定为Google Ads Asset的方法
调用AssetService将指定YouTube视频注册为账户下的视频素材,返回创建成功的Asset资源名称:
// 入参:GoogleAds客户端、客户ID、YouTube视频ID private String createYoutubeVideoAsset(GoogleAdsClient googleAdsClient, long customerId, String youtubeVideoId) { YoutubeVideoAsset youtubeVideoAsset = YoutubeVideoAsset.newBuilder() .setYoutubeVideoId(youtubeVideoId) .build(); Asset asset = Asset.newBuilder() .setYoutubeVideoAsset(youtubeVideoAsset) .build(); AssetOperation operation = AssetOperation.newBuilder().setCreate(asset).build(); try (AssetServiceClient assetServiceClient = googleAdsClient.getLatestVersion().createAssetServiceClient()) { MutateAssetsResponse response = assetServiceClient.mutateAssets(Long.toString(customerId), ImmutableList.of(operation)); // 返回创建好的Asset的资源名称,直接用于AdVideoAsset赋值 return response.getResults(0).getResourceName(); } }
2. 修改原有创建应用广告的代码
将第一步拿到的Asset资源名称传入AdVideoAsset.setAsset(),再添加到AppAdInfo中:
private void createAppAd(GoogleAdsClient googleAdsClient, long customerId, String adGroupResourceName, String youtubeVideoId) { // 先获取Youtube视频对应的Asset资源名 String videoAssetResourceName = createYoutubeVideoAsset(googleAdsClient, customerId, youtubeVideoId); // 填充AdVideoAsset AdVideoAsset adVideoAsset = AdVideoAsset.newBuilder().setAsset(videoAssetResourceName).build(); AppAdInfo appAdInfo = AppAdInfo.newBuilder() .addAllHeadlines( ImmutableList.of( AdTextAsset.newBuilder().setText("test").build(), AdTextAsset.newBuilder().setText("test").build())) .addAllDescriptions( ImmutableList.of( AdTextAsset.newBuilder().setText("test").build(), AdTextAsset.newBuilder().setText("test").build())) .addYoutubeVideos(adVideoAsset) // 绑定视频素材到应用广告 .build(); // 后续原有逻辑保持不变 Ad ad = Ad.newBuilder().setAppAd(appAdInfo).build(); AdGroupAd adGroupAd = AdGroupAd.newBuilder() .setStatus(AdGroupAdStatusEnum.AdGroupAdStatus.ENABLED) .setAdGroup(adGroupResourceName) .setAd(ad) .build(); AdGroupAdOperation operation = AdGroupAdOperation.newBuilder().setCreate(adGroupAd).build(); try (AdGroupAdServiceClient adGroupAdServiceClient = googleAdsClient.getLatestVersion().createAdGroupAdServiceClient()) { MutateAdGroupAdsResponse response = adGroupAdServiceClient.mutateAdGroupAds( Long.toString(customerId), ImmutableList.of(operation)); log.info("Created an ad group ad with ad with resource name '%s'%n", response.getResults(0).getResourceName()); } }
注意事项
- 你使用的YouTube视频必须设为公开或者不公开(Unlisted),不能设为私有,否则Google Ads无法拉取视频内容
- 如果同一个YouTube视频已经在你的Google Ads账户里创建过Asset,可以直接通过GAQL查询已有的Asset资源名,不需要重复创建,查询语句参考:
SELECT asset.resource_name, asset.youtube_video_asset.youtube_video_id FROM asset WHERE asset.type = 'YOUTUBE_VIDEO' AND asset.youtube_video_asset.youtube_video_id = '你的目标视频ID'
内容的提问来源于stack exchange,提问作者qingmu
相关产品推荐
相关产品推荐

