2017-11-28 5 views
0

S3を使用するAndroidアプリのコードがあります。私はほぼ一年前にアプリの依存関係では、それが宣言し、this exampleを、次のようにそれを設定していた:Android AWS S3 - sdkバージョンを「2.2。+」から「2.6.7」にアップグレードした後にオブジェクトが存在しない

dependencies { 
    compile 'com.amazonaws:aws-android-sdk-core:2.2.+' 
    compile 'com.amazonaws:aws-android-sdk-s3:2.2.+' 
} 

これを書いている時点での最新バージョンは2.6.7です。

さて、私の問題は次のとおりです。

//This code came from the Mobile Hub sample application 

//Obtain a reference to the mobile client. It is created in the Application class. 
final AWSMobileClient awsMobileClient = AWSMobileClient.defaultMobileClient(); 

//Obtain a reference to the identity manager. 
IdentityManager identityManager = awsMobileClient.getIdentityManager(); 

AmazonS3 s3Client = new AmazonS3Client(identityManager.getCredentialsProvider()); 

try{ 

    //This used to return TRUE but now returns FALSE 
    boolean objectExists = s3Client.doesObjectExist(BUCKET_NAME, key); 

    ... 
//catch, etc. 

その結果、私はオブジェクトをダウンロードすることができません。私はこれが何らかの形で認証関連の問題であると想定しています。セキュリティの原則に従えば、オブジェクトが存在しないと私に伝えるだけです。バケット名やキーに関する

何も両端に変化していない、と私は変更することで問題が引き金と解決できることを確認しました:/ランニングを

compile 'com.amazonaws:aws-android-sdk-s3:2.2.+' //works 

compile 'com.amazonaws:aws-android-sdk-s3:2.6.7' //does not work 

にして再構築しますアプリ。

この問題を引き起こす可能性のあるバージョンの変更については、ドキュメントや何かを見つけることができません。誰か知っていますか?私はまだ、この問題が発生していない状態でどれくらい高い状態で行くことができるかを見てきました。

編集:2.3.9は問題なく、2.4.0は問題が発生する場所です。これらの変更のどれが問題を引き起こすかを確かめることはできません。

+0

AWSMobileHubからダウンロードしたサンプルアプリケーションの一部を参照しているAWSMobileClientとIdentityManagerはありますか? – Karthikeyan

+0

はい。私はそれを言及すべきだった。 – Xenalin

+1

AWSMobileClientとIdentityManagerは、08/31にAWS Mobile Hubサンプルアプリケーションから削除されました。 IdentityManagerは、SDKの一部としてリリースされています。あなたは "aws-sdk-android-auth-core:[email protected]"でそれをつかむことができます。 AWSMobileClientは、「aws-sdk-android-mobile-client:[email protected]」で、AuthenticationとSignInUIのサポートを最小限に抑えてリリースされています。あなたが指摘したサンプルコードは、SDK> = 2.6.0のバージョンでは動作しません。 – Karthikeyan

答えて

1

バージョン> = 2.6.0を使用している場合は、

dependencies { 
    compile ('com.amazonaws:aws-android-sdk-auth-core:[email protected]') { transitive = true; } 
    compile 'com.amazonaws:aws-android-sdk-core:2.6.+' 
    compile 'com.amazonaws:aws-android-sdk-s3:2.6.0' 
} 

1)のIdentityManagerのインスタンスを作成します。

import com.amazonaws.mobile.config.AWSConfiguration; 
import com.amazonaws.mobile.auth.core.IdentityManager; 

IdentityManager idm = new IdentityManager(getApplicationContext(), new AWSConfiguration(getApplicationContext())); 
IdentityManager.setDefaultIdentityManager(idm); 

2)S3Clientでそれを使用してください。

AmazonS3 s3Client = new AmazonS3Client(IdentityManager.getDefaultIdentityManager().getCredentialsProvider()); 

try{ 

    //This used to return TRUE but now returns FALSE 
    boolean objectExists = s3Client.doesObjectExist(BUCKET_NAME, key); 

    ... 
//catch, etc. 
+0

私は可能な限りこれを試してみるつもりです。 auth-core依存関係を推移的にコンパイルするのは、常に「安全」ですか?で、私はそれをしない必要がありますか? – Xenalin

+0

これはaarファイルなので、 "transitive = true;"を追加する必要があります。依存関係を自動的に引き出す。 auth-coreの唯一の依存関係は、aws-android-sdk-coreです。 https://github.com/aws/aws-sdk-android/blob/master/aws-android-sdk-auth-core/pom.xml – Karthikeyan

関連する問題