ドキュメントを確認しましたが、ご指摘のとおり、Geocoding API を使用するためにビジネス アカウントは必要ありません。非ビジネス アカウントをお持ちの場合は、API キーのみを渡す必要があります。クライアント ID は、ビジネス アカウントを持っている場合にのみ必要です。以下に示すように、キー自体は一意です。
https://developers.google.com/console/help/#WhatIsKey
API キーは、コンソールを使用して生成する一意のキーです。このプロジェクトで有効になっている API をアプリケーションで呼び出す必要がある場合、アプリケーションはこのキーを key=API_key パラメータとしてすべての API リクエストに渡します。このキーを使用する場合、ユーザーの操作や同意は必要なく、アカウント情報へのアクセスを許可することも、認証に使用することもありません。
以下のリンクによると、ビジネス アカウントの場合、キーの代わりにクライアント ID が使用されます。
https://developers.google.com/maps/articles/v2tov3#newkey
Maps for Business のお客様は、キーの代わりにクライアント ID を使用する必要があります。併用はできませんのでご注意ください。クライアント ID はキーに似ていますが、次の違いがあります。
クライアント ID を使用する Maps for Business アプリケーションは、Maps Analytics などの追加機能または制限にアクセスできる場合があります。クライアント ID は、Google Enterprise サポートから提供されます。API コンソールを使用する必要はありません。
Google Maps JavaScript API をロードするときは、key パラメータの代わりに client パラメータを使用します。
同じ原則が Geocoding API にも当てはまると思います。非ビジネス アカウントの一部ではない追加機能が必要な場合は、ビジネス アカウントを取得する必要があります。
キーのみを使用して Java でリクエストに署名する次のコードを実行したところ、完全に機能しました。
public static String getAddress(String latitude, String longitude){
String address = null;
try {
final String inputurl = "http://maps.googleapis.com/maps/api/geocode/xml?latlng="+ latitude + "," + longitude + "&sensor=true";
// Sign the URL using key
String url = getRequestURL(inputurl);
url = "http://maps.googleapis.com" + url;
final URL google = new URL(inputurl);
final URLConnection geocode = google.openConnection();
final BufferedReader in = new BufferedReader(new InputStreamReader(
geocode.getInputStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
address += inputLine;
}
in.close();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
}
return null;
}
public static String getRequestURL(final String inputurl) throws IOException,
InvalidKeyException, NoSuchAlgorithmException, URISyntaxException {
// Convert the string to a URL so we can parse it
final URL url = new URL(inputurl);
final URLSigner signer = new URLSigner("*INSERT YOUR KEY HERE*");
final String request = signer.signRequest(url.getPath(), url.getQuery());
return request;
}