You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 15:54:04