1

Android 애플리케이션에서 Cloud Storage를 사용하는 방법에 대한 구체적인 문서를 찾을 수 없었습니다.Android에서 Cloud Storage에 액세스

Google Cloud SDK에서 this client library을 찾았지만 여러 가지 문제가 많이 발생했지만 아직 해결하지 못했습니다.

build.gradle : : 다음 몇 가지 간단한 코드를 추가

compile group: 'com.google.cloud', name: 'google-cloud-storage', version: '0.9.3-beta' 

이 정말 관련이없는하지만, 위의 링크에서 권장

나는 다음과 같은 코드를 추가 위의 종속성을 가진 응용 프로그램을 실행할 수있는이 질문은 다음과 같이 추가되었습니다.

활동 :

Storage storage = StorageOptions.getDefaultInstance().getService(); 
Page<Bucket> buckets = storage.list(); 
Iterator<Bucket> bucketIterator = buckets.iterateAll(); 
while (bucketIterator.hasNext()) { 
    Bucket bucket = bucketIterator.next(); 
    Log.d(TAG, "Bucket name: " + bucket.getName()); 
} 

종속성 문제의 수많은 (등 Joda, 인 Netty, Gradle을에서 DuplicateFileException 년대와 충돌) 나는 아래의 오류가이기는하지만, 프로젝트를 빌드 할 수 있었다를 해결 한 후 :

: 다음과 같이 보일 대부분의 몇 백 오류로 실패합니다 그때 실행 시도 할 수

Warning:WARNING: Dependency org.apache.httpcomponents:httpclient:4.0.1 is ignored for debug as it may be conflicting with the internal version provided by Android. Warning:WARNING: Dependency org.json:json:20151123 is ignored for debug as it may be conflicting with the internal version provided by Android.

,

문제 처리 "javax의/거래/HeuristicCommitException.class": 다양한 클래스 이름을 가진 사람들의 상당수 후

Error:warning: Ignoring InnerClasses attribute for an anonymous inner class 
Error:(com.google.inject.internal.cglib.reflect.$FastClassEmitter$3) that doesn't come with an 
Error:associated EnclosingMethod attribute. This class was probably produced by a 
Error:compiler that did not target the modern .class file format. The recommended 
Error:solution is to recompile the class from source, using an up-to-date compiler 
Error:and without specifying any "-target" type options. The consequence of ignoring 
Error:this warning is that reflective operations on this class will incorrectly 
Error:indicate that it is *not* an inner class. 

이 오류의 끝이 포함

일리노이 조언 또는 코어 라이브러리를 빌드하지 않을 때 코어 클래스 (java. * 또는 javax. *)의 잘못된 사용.

IDE (예 : Eclipse)를 사용할 때 실수로 응용 프로그램 프로젝트의 에 코어 라이브러리 파일이 포함 된 경우가 많습니다. 코어 클래스를 고의적으로 정의하지 않았다면이 이 무슨 일이 일어날 지 가장 잘 설명 할 수 있습니다.

그러나 실제로 네임 스페이스 (예 : 비 Android 가상 시스템 프로젝트)에서 클래스를 정의하려고 시도했을 수 있습니다. 이것은 가장 확실하게 작품이 아닐 것입니다. 최소한 플랫폼의 후속 버전 인 과의 앱 호환성을 위태롭게 만듭니다. 또한 종종 의문의 의문이있다 합법성.

당신은 정말 핵심 라이브러리 구축하려는 경우 - 다음 "--core 라이브러리"를 사용 - 전용 적절한 전체 가상 머신 배포, 응용 프로그램을 컴파일 반대로 을 만드는 일환으로 옵션을 사용하여이 오류 메시지를 표시하지 않습니다.

"--core-library"를 사용했지만 사실 응용 프로그램을 빌드하는 경우 응용 프로그램이 빌드하거나 실행하는 데 어느 시점에서 여전히 실패하는 것을 미리주의해야합니다. 예를 들어, 고객이 운영 체제를 업그레이드 한 후에 응용 프로그램이 작동하지 않는 것을 발견하면 화난 고객 에 대비하십시오. 이 문제에 대해 책임을 져야합니다.

코어 패키지에있는 일부 코드를 합법적으로 사용하는 경우 코드를 리 패키징하는 것이 가장 안전한 대안입니다. 즉, 해당 클래스를 자신의 패키지 네임 스페이스로 옮기십시오. 즉, 핵심 시스템 클래스 인 과 충돌하지 않습니다. JarJar는이 작업에서 여러분을 도울 수있는 도구입니다. 당신이 이것을 할 수 없다는 것을 알게되면, 그것은 의 경로가 궁극적으로 통증, 고통, 슬픔, 및 애도로 이어질 것이라는 표시입니다.

몇 가지 질문 :

  1. 이 클라이언트 라이브러리는 내 안드로이드 응용 프로그램에서 내 Google 클라우드 스토리지에 액세스 할 수있는 올바른 방법이 있나요?
  2. 모바일 애플리케이션에서 Cloud Storage에 액세스해서는 안되는 이유가 있습니까? 예를 들어, Cloud Enpoint를 사용하여 내 App Engine 애플리케이션에 REST API 호출을 호출하고 미디어 객체를 전달한 다음 App Engine 앱이 Cloud Storage에 미디어에 액세스하고 저장하도록 할 수 있습니다. 결과가 최종적으로 반환됩니다. 모바일 앱에?
  3. 언급 된 클라이언트 라이브러리를 사용하여 Cloud Storage에 올바르게 액세스하고 있다면이 오류는 무엇을 의미하며 어떤 점이 수정 되었습니까?
+0

사용 사례는 무엇입니까? 올바른 액세스 방법은 수행하려는 작업에 따라 다릅니다. – BrettJ

+0

이 시점에서 클라우드 스토리지에 대한 모든 유형의 연결을 해결할 수 있습니다. 코드 스 니펫에 표시된 것처럼 단순히 버킷 이름을 나열하려고했습니다. 내 "최종"유스 케이스는 비디오를 업로드/다운로드하는 것입니다. – Orbit

답변

1

내가 추측하고있다,하지만 난 중포 기지 스토리지 API는이 일을 할 당신이 생각하고있는 방법입니다 생각 : https://firebase.google.com/docs/storage/

+1

현재 응용 프로그램에서 Firebase를 사용하고 있지 않습니다.Firebase는 Google Cloud Storage의 지원을 받고 있지만 Firebase는 Google Cloud Platform의 제품이 아니며 Cloud Storage 버킷에 액세스하는 방법은 매우 의심 스럽습니다. 나는 대답을 고맙게 생각한다. – Orbit

1

당신은 클라이언트 응용 프로그램에서 클라우드 스토리지에 직접 쓸 것을 보안 토큰으로 신뢰할 수 없습니다. 사용자로 직접 인증 할 계획이 아니라 오히려 일반적으로 자신의 프로젝트로 인증하는 것처럼 들립니다.

사용자 기반 OAuth2 절차를 수행하지 않으려면 (사용자가 이미 저장 장치를 사용하도록 설정 한 자체 Cloud Console 프로젝트가 있어야 함) App Engine과 같은 자체 백엔드를 통해 요청을 프록시하는 대신 .

이 접근법은 클라이언트 응용 프로그램의 APK가 아니라 서버 측에 저장소 자격 증명을 안전하게 저장합니다.이 자격 증명은 해체되거나 추출되어 악의적 인 행위자가 선택한 자격 증명으로 버킷에 쓸 수 있습니다. . 오, 양동이 및 스토리지는 비용이 많이 드는 리소스이므로 이러한 자격 증명을 드러내면 비용이 발생할 수 있습니다.

이것은 모바일에서 제공하는 많은 클라우드 서비스에 대한 일반적인 패턴으로, 대신 자신의 백엔드 또는 API를 통해 요청을 라우팅하려고합니다.

+0

그러면 Cloud Engine과 통신하는 App Engine 앱에 요청해야한다고 말하는 것입니까? 모바일 애플리케이션에서 Cloud Storage에 직접 통신하는 것은 불가능합니다. 예를 들어, Firebase Storage는 Cloud Storage의 백엔드이지만 모바일 애플리케이션에서 직접 개체를 업로드하고 다운로드 할 수 있습니다. 귀하의 대답을 감안할 때 보안 문제가 아닌가? – Orbit

+1

네, 클라우드 스토리지를 사용한다면 그렇게 말하는 것입니다. Firebase Storage는 Android 용 Firebase 인증을 사용하여 보안을 처리합니다.이 기능은 GMS 핵심 라이브러리에있는 Android 인증 메커니즘에 의존합니다. Cloud Storage를 정말로 원한다면 자신의 프록시를 사용해야 할 것입니다. Firebase Storage를 사용하지 않는 이유는 무엇입니까? 클라우드 브랜드 서비스가 아니더라도 여전히 일반적으로 사용 가능한 또 다른 Google 서비스입니다. – BrettJ

+0

Firebase Storage가 Cloud Storage에 의해 지원되기 때문에 혼란이 계속됩니다. Firebase Storage를 사용하여 무언가를 저장하면 Google Cloud Platform 콘솔로 이동하여 Cloud Storage로 이동하고 Firebase Storage를 사용하여 추가 한 항목과 함께 버킷을 볼 수 있습니다. 왜 GCS를 사용하여 다른 이유가 될지 이해할 수 없습니다. Firebase Storage 사용에 대한 망설임은 가능한 한 많은 다른 제 3 자 서비스를 사용하지 않는 것입니다. 특히 Firebase의 특정 기능이 App Engine과 충돌 할 수있는 경우 (예 : Firebase 리스너가 App Engine의 자동 크기 조절을 비활성화하는 경우). – Orbit