Управление облачным хранилищем Google с Android


Я использую pliablematter simple-cloud-storage для управления загрузками / загрузками файлов с помощью Google Cloud Storage. Но я не могу заставить его работать, есть файл свойств с этим содержанием:

project.id=0000000000
application.name=Application Name
account.id=0000000000@developer.gserviceaccount.com
private.key.path=/var/key

Я знаю свою project.id, имя приложения и идентификатор учетной записи, но что я должен поместить в путь закрытого ключа?? Я сгенерировал и скачал закрытый ключ учетной записи службы, но независимо от того, какой путь я всегда получаю java.io.FileNotFoundException

Кроме того, где я должен сохранить закрытые ключи в Android приложения?

Проект Github https://github.com/pliablematter/simple-cloud-storage

Пожалуйста, помогите! Спасибо

2 3

2 ответа:

Я смог решить эту проблему, скопировав закрытый ключ во внутреннюю папку хранения, а затем я поместил расположение пути в private.ключ.путь

Не знаю, правильный ли это путь, но он сработал для меня.

Вот изменения, которые вам нужно сделать после использования этого примера, чтобы сделать его функциональным в android.

  • Скачать private_key.p12 файл из консоли Google и поместить в активы.
  • сохраните cloudstorage.файл properties также находится в активах.
Теперь внесите эти изменения в метод класса CloudStorage.
private Properties getProperties() throws Exception {

        if (properties == null) {
            properties = new Properties();
            AssetManager manager = context.getAssets();
            InputStream stream = manager.open("cloudstorage.properties");
            try {
                properties.load(stream);
            } catch (IOException
                    e) {
                throw new RuntimeException(
                        "cloudstorage.properties must be present in classpath",
                        e);
            } finally {
                if (stream != null)
                    stream.close();
            }
        }
        return properties;
    }

    private Storage getStorage() throws Exception {

        if (storage == null) {

            HttpTransport httpTransport = new NetHttpTransport();
            JsonFactory jsonFactory = new JacksonFactory();

            List<String> scopes = new ArrayList<>();
            scopes.add(StorageScopes.DEVSTORAGE_FULL_CONTROL);

            Credential credential = new GoogleCredential.Builder()
                    .setTransport(httpTransport)
                    .setJsonFactory(jsonFactory)
                    .setServiceAccountId(
                            getProperties().getProperty(ACCOUNT_ID_PROPERTY))
                    .setServiceAccountPrivateKeyFromP12File(getPrivateKeyFile())
                    .setServiceAccountScopes(scopes).build();

            storage = new Storage.Builder(httpTransport, jsonFactory,
                    credential).setApplicationName(
                    getProperties().getProperty(APPLICATION_NAME_PROPERTY))
                    .build();
        }

        return storage;
    }

    private File getPrivateKeyFile() {
        File f = new File(context.getCacheDir() + “/my_private_key.p12");
        if (!f.exists())
        try {

            InputStream is = context.getAssets().open(“private_key.p12");
            FileOutputStream fos = new FileOutputStream(f);
            byte[] buffer = new byte[4 * 1024];
            int read;
            while ((read = is.read(buffer)) != -1)
                fos.write(buffer, 0, read);

            fos.flush();
            is.close();
            fos.close();

        } catch (Exception e) {
            e.printStackTrace();
        }
        Log.e("FILE", "FETCHED FILE:: " + f.getAbsolutePath() + " with data: " + f.length());
        return f;
    }