在Android中使用谷歌api与限制

时间:2016-10-18 15:01:05

标签: android google-api

我想在我的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应用程序。如何使用自动完成功能并将指纹置于验证状态?

1 个答案:

答案 0 :(得分:0)

如果您在应用中存储网络密钥,则无法安全。如果您想继续使用http请求,唯一的方法是使用充当代理的服务器组件:从您的应用程序获取请求,添加API密钥,安全地存储在您的服务器中,执行请求到谷歌并将结果发回给您的应用。

但自动完成API也适用于Android。您可以按照tutorial

进行操作