一:將服務賬戶與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