您的位置:首页 > 其它

使用服务帐户访问AdWords API集成KeyMob手机聚合平台

2015-12-07 11:09 483 查看
一:将服务帐户与AdWords API配合使用的优势

用服务帐户主要有以下两个优势:

1.Google API的应用访问权限授权是以配置步骤的形式执行的,因为如果不采取这种方式,其他OAuth 2.0流程可能会要求用户干预,或者会要求您的应用缓存令牌以避免将来的用户干预,而配置步骤可以免除此类麻烦。

2.通过OAuth 2.0断言流程,您的应用可以在必要时模拟其他用户。

二:前提条件

1.属于您的Google Apps域名。

2.AdWords API开发者令牌;测试帐户(可选)。

3.适用于AdWords API的Google API广告Java客户端库。

4.Google API Java客户端库。此客户端库已与Google API广告Java客户端库依赖项绑定,因此您无需单独下载,但我们会使用其中的类。

三:使用服务帐户访问AdWords API的步骤

1.在您的Google API控制台中生成一个服务帐户密钥:

a.转到Google API控制台。

b.点击API访问权限标签。

c.点击再创建一个客户端ID…

d.选择服务帐户作为应用类型,然后点击创建客户端ID。

e.下载您的私钥,并将其存储在只有您可以访问的安全位置。

f.“API访问权限”信息下应该会新增一个名为“服务帐户”的部分。请确保此页随手就能打开,因为您稍后还需要复制“电子邮件地址”。

2.如果要通过Google OAuth 2.0服务使用服务帐户和断言流程,您需要向Google Apps注册您自己的域。这是因为用户模拟在域级别控制,没有更加细致的访问控制级别了。也就是说,如果服务帐户已列入白名单并且具有模拟权限,那么使用这个服务帐户的某个域的所有用户都可以模拟该域中的任何用户。例如,这就是服务帐户无法模拟Gmail帐户的原因。

三:安全考虑

考虑到Google Apps域名级别的控制权限,请务必保护好*.p12密钥文件,该密钥文件允许服务帐户访问其获得授权的Google服务。由于我们将授予该服务帐户模拟网域中任何用户的权限,因此这一点尤其重要。每次仅允许服务帐户访问一个Google API也不失为一种好办法(使用下一部分中显示的“范围”字段)。这是一种预防措施,可以在服务帐户的*.p12密钥文件被盗用的情况下,减少盗用者可以访问的数据量。

四:授予服务帐户模拟权限的步骤

a.向您的Google Apps域名添加一个新的已授权API客户端。

b.使用我们在API控制台中生成的客户端ID(详见第1步)将新的授权API客户端添加为“客户端名称”。

c.输入内容作为API范围:

d.针对您要授予模拟权限的其他所有服务帐户重复此过程。

3.现在,您可以通过OAuth 2.0断言流程,使用服务帐户访问AdWords帐户了。在下面的示例代码中,我们将服务帐户与OAuth 2.0断言流程配合使用,以获取访问令牌,然后进行基本AdWords API调用,将所有广告系列与测试帐户关联起来。

private static Credential getOAuth2Credential() throws Exception {

// 服务帐户凭据。

GoogleCredential credential = new GoogleCredential.Builder().setTransport(new NetHttpTransport())

.setJsonFactory(new GsonFactory()).setServiceAccountId

( "****@developer.gserviceaccount.com")

.setServiceAccountScopes("https://adwords.google.com/api/adwords")

.setServiceAccountPrivateKeyFromP12File(new File("/path/to/key.p12"))

// 设置您要模拟的用户。此用户应该是

// 您的AdWords API MCC帐户或是您要向其发送调用的广告客户帐户

// 所对应的有效登录电子邮件。

.setServiceAccountUser("user@yourdomain.com").build();

credential.refreshToken();

return credential;

}

public static void runExample(AdWordsServices adWordsServices, AdWordsSession session) throws Exception {

// 获取CampaignService。

CampaignServiceInterface campaignService =adWordsServices.get(session, CampaignServiceInterface.class);

  // 创建选择器。

Selector selector = new Selector();

selector.setFields(new String[] {"Id", "Name"});

// 获取所有广告系列

CampaignPage page = campaignService.get(selector);

// 展示广告系列。

if (page.getEntries() != null) {

for (Campaign campaign : page.getEntries()) {

System.out.println("Campaign with name \"" + campaign.getName() + "\" and id \""+ campaign.getId() + "\" was found.");

    }

  } else {

    System.out.println("No campaigns were found.");

  }

}

public static void main(String[] args) throws Exception {

// 获取OAuth2凭据。

Credential credential = getOAuth2Credential();

// 构建AdWordsSession。

AdWordsSession session = new AdWordsSession.Builder()

.fromFile().withOAuth2Credential(credential).build();

AdWordsServices adWordsServices = new AdWordsServices();

runExample(adWordsServices, session);

}

KeyMob是目前国内首家具备随意自由切换平台,无需单独SDK集成,自由定价,自自主销售广告,广告互推,应用内交叉推广的手机广告聚合平台。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息