aws-amplify / amplify-android

The fastest and easiest way to use AWS from your Android app.
https://docs.amplify.aws/lib/q/platform/android/
Apache License 2.0
246 stars 116 forks source link

Amplify S3 storage exception (Failed to get user's identity ID) #1439

Closed sarvajeet294 closed 2 years ago

sarvajeet294 commented 3 years ago

Before opening, please confirm:

Language and Async Model

Java

Amplify Categories

Storage

Gradle script dependencies

``` buildscript { repositories { } dependencies { } } apply plugin: 'com.android.application' apply plugin: 'com.google.firebase.crashlytics' apply plugin: 'org.greenrobot.greendao' apply plugin: 'com.amazonaws.appsync' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' repositories { maven { url 'https://jitpack.io' } } android { compileSdkVersion rootProject.ext.compileSdkVersion as Integer buildToolsVersion rootProject.ext.buildToolsVersion as String //useLibrary 'org.apache.http.legacy' dexOptions { jumboMode = true } defaultConfig { applicationId rootProject.ext.applicationId as String minSdkVersion rootProject.ext.minSdkVersion as Integer targetSdkVersion rootProject.ext.targetSdkVersion as Integer versionCode rootProject.ext.versionCode as Integer versionName rootProject.ext.versionName as String multiDexEnabled true ndk { moduleName "Scanner" } } sourceSets.main { jni.srcDirs = [] jniLibs.srcDir 'src/main/libs' } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } debug { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } flavorDimensions "default" productFlavors { staging { versionNameSuffix "-staging" buildConfigField("String", "HOST", "\"https://test-marketplace.vastucorp.com/\"") } production { versionNameSuffix "-production" buildConfigField("String", "HOST", "\"https://community.vastucorp.com/\"") } } compileOptions { sourceCompatibility JavaVersion.VERSION_1_8 targetCompatibility JavaVersion.VERSION_1_8 } configurations { all*.exclude group: 'com.android.support', module: 'support-v4' all*.exclude group: 'com.android.support', module: 'support-annotations' } dataBinding { enabled = true } viewBinding { enabled = true } lintOptions { checkReleaseBuilds false } dexOptions { javaMaxHeapSize "4g" } kotlinOptions { jvmTarget = '1.8' } kotlinOptions { jvmTarget = JavaVersion.VERSION_1_8.toString() } } greendao { schemaVersion rootProject.ext.greenDaoSchemaVersion } dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation('com.mikepenz:materialdrawer:6.1.0@aar') { transitive = true } implementation('com.mikepenz:crossfader:1.6.0@aar') { transitive = true } repositories { jcenter() } configurations { all*.exclude group: 'com.android.support', module: 'support-v13' } implementation 'com.github.bumptech.glide:glide:4.11.0' annotationProcessor 'androidx.lifecycle:lifecycle-compiler:2.2.0' implementation 'androidx.core:core-ktx:1.3.2' implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.61" implementation 'com.budiyev.android:code-scanner:2.1.0' implementation "com.tbruyelle.rxpermissions2:rxpermissions:$rxPermissionsVersion" implementation "io.reactivex.rxjava2:rxjava:$rxJavaVersion" implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion" def camerax_version = "1.0.0-beta07" implementation 'com.isseiaoki:simplecropview:1.1.6' implementation 'com.mikepenz:crossfadedrawerlayout:1.1.0@aar' implementation 'com.mikepenz:google-material-typeface:3.0.1.1.original@aar' implementation 'com.mikepenz:fontawesome-typeface:5.0.13.0@aar' implementation 'com.mikepenz:material-design-iconic-typeface:2.2.0.1@aar' implementation 'com.mikepenz:community-material-typeface:2.0.46.1@aar' implementation 'com.mikepenz:octicons-typeface:3.2.0.4@aar' implementation 'com.mikepenz:itemanimators:1.1.0' implementation 'com.mikepenz:ionicons-typeface:2.0.1.2@aar' implementation 'com.sdsmdg.harjot:materialshadows:1.2.5' //noinspection GradleCompatible implementation 'com.google.android.material:material:1.3.0' implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.cardview:cardview:1.0.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.github.paolorotolo:expandableheightlistview:1.0.0' implementation 'com.github.andyxialm:ColorDialog:1.0.0' implementation "joda-time:joda-time:$joda_time_version" implementation "org.greenrobot:greendao:$greendao_version" implementation "org.greenrobot:eventbus:$eventbus_version" implementation "com.android.volley:volley:$volley_version" implementation "com.google.code.gson:gson:$gsonLibVersion" implementation 'org.apache.httpcomponents:httpcore:4.4.10' //implementation 'org.apache.httpcomponents:httpclient:4.5.2' implementation 'commons-io:commons-io:2.5' implementation "androidx.constraintlayout:constraintlayout:$constraintlayout_version" implementation 'info.hoang8f:fbutton:1.0.5' implementation 'com.github.shadowalker77:wp7progressbar:1.0.5' implementation 'com.github.darsh2:MultipleImageSelect:v0.0.4' testImplementation "junit:junit:$junitVersion" implementation platform('com.google.firebase:firebase-bom:26.0.0') implementation 'com.google.firebase:firebase-crashlytics' implementation 'com.google.firebase:firebase-messaging:21.0.1' implementation 'com.google.firebase:firebase-core:18.0.1' // Declare the dependency for the Cloud Firestore library // When using the BoM, you don't specify versions in Firebase library dependencies implementation 'com.google.firebase:firebase-firestore' implementation 'org.apache.commons:commons-lang3:3.5' implementation files('libs/activation.jar') implementation files('libs/additionnal.jar') implementation files('libs/mail.jar') implementation 'com.edmodo:cropper:1.0.1' // implementation 'com.fxn769:pix:1.2.5' implementation 'com.chaos.view:pinview:1.3.1' implementation 'com.google.android.gms:play-services-location:17.1.0' implementation 'com.google.android.gms:play-services-auth:17.0.0' implementation 'com.yanzhenjie:album:2.1.3' implementation 'com.journeyapps:zxing-android-embedded:3.4.0' implementation "androidx.navigation:navigation-fragment:$nav_version" implementation "androidx.navigation:navigation-ui:$nav_version" implementation "androidx.navigation:navigation-runtime:$nav_version" implementation "androidx.camera:camera-camera2:${camerax_version}" implementation "androidx.camera:camera-lifecycle:${camerax_version}" implementation "androidx.camera:camera-view:1.0.0-alpha12" implementation "androidx.camera:camera-extensions:1.0.0-alpha12" implementation 'com.github.vipulasri:timelineview:1.0.6' implementation 'com.github.PhilJay:MPAndroidChart:v3.1.0' implementation "androidx.gridlayout:gridlayout:1.0.0" implementation project(':scanlibrary') implementation 'com.github.mreram:showcaseview:1.2.0' implementation 'com.outlander.showcaseview:showcaseview:1.3.0' implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.yanzhenjie:album:2.1.3' implementation 'com.google.android.gms:play-services-auth-api-phone:17.5.0' implementation 'com.google.android.play:core:1.9.1' implementation 'commons-io:commons-io:2.10.0' implementation 'com.timqi.sectorprogressview:library:2.0.1' implementation('com.paytm:pgplussdk:1.3.3') { transitive = true; } /* implementation 'com.squareup.retrofit2:retrofit:2.3.0' implementation 'com.squareup.retrofit2:converter-gson:2.3.0' implementation 'com.squareup.retrofit2:adapter-rxjava2:2.3.0' implementation 'com.squareup.okhttp3:logging-interceptor:3.10.0' implementation 'com.google.code.gson:gson:2.8.2' */ //RxJava implementation 'io.reactivex.rxjava2:rxjava:2.1.10' implementation 'io.reactivex.rxjava2:rxandroid:2.0.2' // implementation 'com.paytm.appinvokesdk:appinvokesdk:1.5.4' implementation 'com.github.pchmn:MaterialChipsInput:1.0.8' // compile 'org.florescu.android.rangeseekbar:rangeseekbar-library:0.3.0' implementation 'com.github.Jay-Goo:RangeSeekBar:v3.0.0' implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:3.0.0-RC3' implementation 'androidx.multidex:multidex:2.0.1' // Support for Java 8 features implementation 'com.amazonaws:aws-android-sdk-appsync:3.1.1' implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.0' implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1' // Mobile Client for initializing the SDK implementation('com.amazonaws:aws-android-sdk-mobile-client:2.22.2') { transitive = true } // Cognito UserPools for SignIn implementation('com.amazonaws:aws-android-sdk-auth-userpools:2.16.8') { transitive = true } // Sign in UI Library implementation('com.amazonaws:aws-android-sdk-auth-ui:2.16.8') { transitive = true } implementation 'com.amplifyframework:core:1.22.0' implementation 'com.amplifyframework:aws-datastore:1.22.0' implementation 'com.amplifyframework:aws-api:1.22.0' implementation 'com.amplifyframework:aws-predictions:1.22.0' implementation 'com.amplifyframework:aws-auth-cognito:1.22.0' implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'com.amazonaws:aws-android-sdk-s3:2.26.0' implementation 'com.amplifyframework:aws-storage-s3:1.22.0' } /*configurations { implementation.exclude group: "org.apache.httpcomponents", module: "httpclient" }*/ apply plugin: 'com.google.gms.google-services' ```

Environment information

Put output below this line

Welcome to Gradle 5.6.4!

Here are the highlights of this release:

For more details see https://docs.gradle.org/5.6.4/release-notes.html


Gradle 5.6.4

Build time: 2019-11-01 20:42:00 UTC Revision: dd870424f9bd8e195d614dc14bb140f43c22da98

Kotlin: 1.3.41 Groovy: 2.5.4 Ant: Apache Ant(TM) version 1.9.14 compiled on March 12 2019 JVM: 1.8.0_301 (Oracle Corporation 25.301-b09) OS: Windows 10 10.0 amd64

Please include any relevant guides or documentation you're referencing

No response

Describe the bug

We are trying to upload a file to our bucket called "marketplace-documents". But it gives me an error as follows :

StorageException{message=Failed to get user's identity ID, cause=java.lang.RuntimeException: Cognito Identity not configured, recoverySuggestion=Please check that you are logged in and that Auth is setup to support identity pools.}

I have used CUSTOM_AUTH for my application. I need help to sort this issue.

Reproduction steps (if applicable)

  1. Create android application and setup amplify .
  2. Create a userpool via console .
  3. Setup userpool triggers with lambda function for custom authentication.
  4. Import auth in android application.
  5. Signup and sign in with custom auth.
  6. Import storage in android application.
  7. Try to upload a file using Amplify.Storage.uploadFile.

Code Snippet

```java // Put your code below this line. private void signUp() { Amplify.Auth.signUp("+91" + edtMobileNume.getText().toString().trim(), "vastuHfc@123", AuthSignUpOptions.builder().userAttribute(AuthUserAttributeKey.phoneNumber(), "+91" + edtMobileNume.getText().toString().trim()).build(), onSuccess -> { signIN(); Log.e("Sk success", onSuccess.isSignUpComplete() + ""); }, onError -> { Log.e("Sk", onError.getMessage()); onError.printStackTrace(); if (onError.getCause().getMessage().contains("UsernameExistsException")) signIN(); }); } public void signIN() { Map res = new HashMap(); res.put(CognitoServiceConstants.AUTH_PARAM_CHALLENGE_NAME, "CUSTOM_CHALLENGE"); res.put(AuthUserAttributeKey.phoneNumber().getKeyString(), "+91" + edtMobileNume.getText().toString().trim()); AWSMobileClient.getInstance().signIn("+91" + edtMobileNume.getText().toString().trim(), "vastuHfc@123", res, new Callback() { @Override public void onResult(final SignInResult signInResult) { runOnUiThread(new Runnable() { @Override public void run() { Log.d("APP", "Sign-in callback state: " + signInResult.getSignInState()); switch (signInResult.getSignInState()) { case DONE: Log.d("SK", "Sign-in done."); // skipLogin(); goodToGo(); /*Intent intent = new Intent(LoginActivity.this, MainActivity.class); startActivity(intent);*/ break; case SMS_MFA: Log.d("SK", "Please confirm sign-in with SMS."); break; case NEW_PASSWORD_REQUIRED: Log.d("SK", "Please confirm sign-in with new password."); break; case CUSTOM_CHALLENGE: Log.d("SK", "CUSTOM_CHALLENGE_CALLED."); // openOtpDialog(); initSignIn(); /*Intent i = new Intent(LoginActivity.this, OTPconfirmationActivity.class); i.putExtra("USERNAME", signInResult.getParameters().get("USERNAME")); Log.e("Sk username", signInResult.getParameters().get("USERNAME")); i.putExtra("PHONE_NUMBER", "+91" + edtMobileNume.getText().toString().trim()); startActivity(i);*/ break; default: Log.d("SK", "Unsupported sign-in confirmation: " + signInResult.getSignInState()); break; } } }); } @Override public void onError(Exception e) { Log.e("SK", "Sign-in error", e); } }); } //.............................. Verification of OTP .....// public void confirmSignIn() { Map res = new HashMap(); res.put(CognitoServiceConstants.AUTH_PARAM_CHALLENGE_NAME, "CUSTOM_CHALLENGE"); //res.put(CognitoServiceConstants.AUTH_PARAM_USERNAME, getIntent().getStringExtra("USERNAME")); //res.put(CognitoServiceConstants.AUTH_PARAM_USERNAME, getIntent().getStringExtra("PHONE_NUMBER")); res.put(CognitoServiceConstants.CHLG_RESP_ANSWER, pinView.getText().toString().trim()); AWSMobileClient.getInstance().confirmSignIn(res, new Callback() { @Override public void onResult(final SignInResult signInResult) { runOnUiThread(new Runnable() { @Override public void run() { Log.d("SK", "Sign-in callback state: " + signInResult.getSignInState()); switch (signInResult.getSignInState()) { case DONE: // goodToGo(); callWebService(pinView.getText().toString()); Log.d("SK", "Sign-in done."); break; case SMS_MFA: Log.d("SK", "Please confirm sign-in with SMS."); break; case NEW_PASSWORD_REQUIRED: Log.d("SK", "Please confirm sign-in with new password."); break; default: Log.d("SK", "Unsupported sign-in confirmation: " + signInResult.getSignInState()); break; } } }); } @Override public void onError(Exception e) { Log.e("SK", "Confirm Custom auth Sign-in error", e); } }); } //........................Upload file using storage ............. Amplify.Storage.uploadFile( String.valueOf(n), new File(pojo.get(finalItem).getPicImage()), result -> { Log.i("MyAmplifyApp", "Successfully uploaded: " + result.getKey()); pojo.get(finalItem).setS3_url("https://marketplace-documents.s3.ap-south-1.amazonaws.com/public/" + String.valueOf(n)); KeyValue key = new KeyValue(); String value = key.getKeyFromValue(picTypeMap, pojo.get(finalItem).getPicTypeName()); saveDocument(pojo.get(finalItem), value); }, storageFailure -> { Log.e("MyAmplifyApp", "Upload failed", storageFailure); } ); ```

Log output

// Put your logs below this line

StorageException{message=Failed to get user's identity ID, cause=java.lang.RuntimeException: Cognito Identity not configured, recoverySuggestion=Please check that you are logged in and that Auth is setup to support identity pools.}

GraphQL Schema

```graphql // Put your schema below this line type MasterProduct @model { id: ID! name: String! display_name: String! pulse_hfc_id: String! nbfc_id: String! is_active: Int } type MasterCustomerType @model { id: ID! name: String! display_name: String! pulse_hfc_id: String! nbfc_id: String! is_active: Int } type MasterAddressType @model { id: ID! name: String! display_name: String! pulse_hfc_id: String! nbfc_id: String! is_active: Int } type MasterGender @model { id: ID! name: String! display_name: String! pulse_hfc_id: String! nbfc_id: String! is_active: Int } type MasterStatus @model { id: ID! name: String! display_name: String! pulse_hfc_id: String! nbfc_id: String! is_active: Int } type MasterPicType @model { id: ID! name: String! display_name: String! group: String! pulse_hfc_id: String! nbfc_id: String! is_active: Int } type MasterBranch @model { id: ID! name: String! display_name: String! code: String! email: String! contact_number: String! is_active: Int } type MasterAgency @model { id: ID! name: String! display_name: String! code: String! agency_type_id: String! email: String! contact_number: String! is_active: Int } type MasterAgencyType @model { id: ID! name: String! display_name: String! code: String! is_active: Int } type MasterAgent @model { id: ID! name: String! display_name: String! code: String! agency_id: String! is_active: Int } type Application @model { id: ID! cdid: String! application_number: String! status: String! product_id: String! user_id: String! branch_id: String! amount: String! agency_type_id: String! agency_id: String! agent_id: String! remark: String! is_assigned: Int is_active: Int createdAt: AWSDateTime! customers: [Customer] @connection(keyName: "byApplication", fields: ["id"]) } type Customer @model @key(name: "byApplication", fields: ["application_id"]) @key(name: "byActiveCustomer", fields: ["is_active", "createdAt"], queryField: "customerByCreatedAt") { id: ID! cdid: String! application_id: ID! applications: Application @connection(fields: ["application_id"]) customer_type_id : String! first_name: String! last_name: String! date_of_birth: String! gender: String! mobile: String! phone: String! is_active: Int createdAt: AWSDateTime! } type CustomerAddress @model { id: ID! cdid: String! application_id: String! customer_id: String! address_line1: String! address_line2: String! landmark: String! city: String! pin: String! state: String! address_type_id: String! is_active: Int } type CustomerDocument @model { id: ID! cdid: String! application_id: String! customer_id: String! pictype_id: String! details: String! path: String! offline_path: String! thumb: String! filetype: String! latitude: String! longitude: String! accuracy: String! is_active: Int } type OcrRequest @model { id: ID! cdid: String! application_id: String! path: String! thumb: String! image_type: String! request: String! response: String! is_mask: String! } type OcrAadhaar @model { id: ID! cdid: String! ocrrequestid: String! masked_url: String! aadhar_no: String! name: String! father_name: String! gender: String! dob: String! phone: String! address: String! care_of: String! house_number: String! line1: String! line2: String! locality: String! landmark: String! street: String! _type: String! pin: String! city: String! district: String! state: String! tag: String! } type OcrPAN @model { id: ID! cdid: String! ocrrequestid: String! date: String! name: String! father_name: String! gender: String! pan_number: String! tag: String! } type OcrPassport @model { id: ID! cdid: String! ocrrequestid: String! contry_code: String! dob: String! doe: String! doi: String! gender: String! given_name: String! mrz: String! nationality: String! passport_num: String! place_of_birth: String! place_of_issue: String! surname: String! tag: String! address: String! father: String! mother: String! file_number: String! pin: String! _type: String! city: String! district: String! locality: String! house_number: String! line1: String! line2: String! state: String! landmark: String! street: String! } type OcrVoterID @model { id: ID! cdid: String! ocrrequestid: String! date: String! father_name: String! gender: String! name: String! votherid: String! address: String! pin: String! _type: String! city: String! district: String! locality: String! house_number: String! line1: String! line2: String! state: String! landmark: String! street: String! } type Test @model { id: ID! cdid: String! createdAt: AWSDateTime! } ```

Additional information and screenshots

No response

sarvajeet294 commented 3 years ago
{
    "UserAgent": "aws-amplify-cli/2.0",
    "Version": "1.0",
    "api": {
        "plugins": {
            "awsAPIPlugin": {
                "vastuconnect": {
                    "endpointType": "GraphQL",
                    "endpoint": "https://redacted.appsync-api.ap-south-1.amazonaws.com/graphql",
                    "region": "ap-south-1",
                    "authorizationType": "AMAZON_COGNITO_USER_POOLS"
                }
            }
        }
    },
    "auth": {
        "plugins": {
            "awsCognitoAuthPlugin": {
                "UserAgent": "aws-amplify-cli/0.1.0",
                "Version": "0.1.0",
                "IdentityManager": {
                    "Default": {}
                },
                "CognitoUserPool": {
                    "Default": {
                        "PoolId": "ap-south-1_redacted",
                        "AppClientId": "redacted",
                        "Region": "ap-south-1"
                    }
                },
                "Auth": {
                    "Default": {
                        "authenticationFlowType": "CUSTOM_AUTH"
                    }
                },
                "AppSync": {
                    "Default": {
                        "ApiUrl": "https://redacted.appsync-api.ap-south-1.amazonaws.com/graphql",
                        "Region": "ap-south-1",
                        "AuthMode": "AMAZON_COGNITO_USER_POOLS",
                        "ClientDatabasePrefix": "vastuconnect_AMAZON_COGNITO_USER_POOLS"
                    }
                },
                "S3TransferUtility": {
                    "Default": {
                        "Bucket": "marketplace-documents",
                        "Region": "ap-south-1"
                    }
                }
            }
        }
    },
    "storage": {
        "plugins": {
            "awsS3StoragePlugin": {
                "bucket": "marketplace-documents",
                "region": "ap-south-1",
                "defaultAccessLevel": "guest"
            }
        }
    }
}
sarvajeet294 commented 3 years ago

amplify import auth Using service: Cognito, provided by: awscloudformation √ What type of auth resource do you want to import? · Cognito User Pool and Identity Pool √ Select the User Pool you want to import: · ap-south-1_1wq6GLJRb ✔ Only one Web app client found: 'MP_AppClient' was automatically selected. ✔ Only one Native app client found: 'MP_AppClient' was automatically selected. ⚠️ It is recommended to use different app client for web and native application. ✔ Federated identity providers are not configured, no OAuth configuration needed. ✔ Only one Identity Pool resource found: 'Mp_identitypool_dev' (ap-south-1:0cb568e6-b474-4991-b15d-f7fd5528811e) was automatically selected.

✅ Cognito User Pool 'MP_userpool' and Identity Pool 'Mp_identitypool_dev' was successfully imported.

eeatonaws commented 3 years ago

Hi @sarvajeet294, the following configuration information is missing from your awsconfiguration.json file:

"CredentialsProvider": {
    "CognitoIdentity": {
        "Default": {
            "PoolId": "<Identity Pool ID>",
            "Region": "<Region>"
        }
    }
}

This is the configuration information for your Cognito Identity Pool. After running amplify import auth, did you run amplify push? What version of the Amplify CLI are you using?