在实时数据库(Firebase)上存储API密钥

时间:2017-06-07 04:07:12

标签: android firebase firebase-realtime-database google-places-api api-key

我的Android应用程序需要使用Google Place Search API,但由于它不适用于Android,我必须调用Web API。我考虑过使用云功能,但这太贵了,如果在每个客户端本地完成,可以做得少很多。问题是将API密钥存储在用户的设备上,因为它可以轻松检索。因此,如果我将密钥存储在RT DB上并仅在需要时引用它是否安全?

另外,如果你有建议,我很乐意实施它们:D

2 个答案:

答案 0 :(得分:1)

将密钥存储在数据库中仍然需要用户可以访问它。因此,虽然检索的工作量要多一点,但恶意用户仍然可以检索它。

服务器端密钥不应该在客户端代码中使用。

答案 1 :(得分:0)

Google Places API适用于Android。

示例代码

public void findPlace(View view) {
try {
    Intent intent =
            new PlaceAutocomplete.IntentBuilder(PlaceAutocomplete.MODE_FULLSCREEN)
                    .setFilter(typeFilter)
                    .build(this);
        startActivityForResult(intent, PLACE_AUTOCOMPLETE_REQUEST_CODE);
    } catch (GooglePlayServicesRepairableException e) {
        // TODO: Handle the error.
    } catch (GooglePlayServicesNotAvailableException e) {
        // TODO: Handle the error.
    }
}

// A place has been received; use requestCode to track the request.
@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == PLACE_AUTOCOMPLETE_REQUEST_CODE) {
        if (resultCode == RESULT_OK) {
            Place place = PlaceAutocomplete.getPlace(this, data);
            Log.i(TAG, "Place: " + place.getName());
        } else if (resultCode == PlaceAutocomplete.RESULT_ERROR) {
            Status status = PlaceAutocomplete.getStatus(this, data);
            // TODO: Handle the error.
            Log.i(TAG, status.getStatusMessage());

        } else if (resultCode == RESULT_CANCELED) {
            // The user canceled the operation.
        }
    }
}

完整教程here