Управление облачным хранилищем 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 ответа:
Я смог решить эту проблему, скопировав закрытый ключ во внутреннюю папку хранения, а затем я поместил расположение пути в 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; }