一:将服务账户与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集成,自由订价,自自主销售广告,广告互推,应用内交叉推广的手机广告聚合平台。api