我想在我的Android应用中使用googleapis提供的自动完成功能。
这是我正在使用的代码:
private static final String PLACES_API_BASE = "https://maps.googleapis.com/maps/api/place";
private static final String TYPE_AUTOCOMPLETE = "/autocomplete";
private static final String OUT_JSON = "/json";
private static final String API_KEY = "MY_API_KEY";
public static ArrayList autocomplete(String input) {
ArrayList resultList = null;
HttpURLConnection conn = null;
StringBuilder jsonResults = new StringBuilder();
try {
StringBuilder sb = new StringBuilder(PLACES_API_BASE + TYPE_AUTOCOMPLETE + OUT_JSON);
sb.append("?key=" + API_KEY);
sb.append("&components=country:es&language=es");
sb.append("&input=" + URLEncoder.encode(input, "utf8"));
URL url = new URL(sb.toString());
conn = (HttpURLConnection) url.openConnection();
InputStreamReader in = new InputStreamReader(conn.getInputStream());
// Load the results into a StringBuilder
int read;
char[] buff = new char[1024];
while ((read = in.read(buff)) != -1) {
jsonResults.append(buff, 0, read);
}
} catch (MalformedURLException e) {
Log.e(TYPE_AUTOCOMPLETE, "Error processing Places API URL", e);
return resultList;
} catch (IOException e) {
Log.e(TYPE_AUTOCOMPLETE, "Error connecting to Places API", e);
return resultList;
} finally {
if (conn != null) {
conn.disconnect();
}
}
问题是我想限制我的api_key仅用于我的Android应用程序。为此,我使用我的应用程序SHA-1证书指纹限制了Android应用程序。如何使用自动完成功能并将指纹置于验证状态?
答案 0 :(得分:0)
如果您在应用中存储网络密钥,则无法安全。如果您想继续使用http请求,唯一的方法是使用充当代理的服务器组件:从您的应用程序获取请求,添加API密钥,安全地存储在您的服务器中,执行请求到谷歌并将结果发回给您的应用。
但自动完成API也适用于Android。您可以按照tutorial
进行操作