Пытался получить плагин, но этого плагина не было

#android #rest #aws-api-gateway #amazon-cognito #aws-amplify

#Android #отдых #aws-api-gateway #amazon-cognito #aws-amplify

Вопрос:

Я пытаюсь использовать REST API AWS Amplify в своем приложении для Android. Я сделал именно так, как было написано в документах, но я все еще получаю эту ошибку:

ApiException{message=AWSApiPlugin зависит от AWSCognitoAuthPlugin, но в настоящее время он отсутствует, причина = java.lang.Исключение IllegalStateException: пытался получить плагин, но этот плагин отсутствовал. Проверьте, был ли плагин добавлен изначально или, возможно, уже был удален., recoverySuggestion=Перед настройкой Amplify обязательно добавьте AWSCognitoAuthPlugin так же, как вы добавили AWSApiPlugin.}

Это зависимости AWS в моем файле Gradle:

 dependencies {
    // ...
    implementation 'com.amplifyframework:aws-api:1.6.4'
    implementation 'com.amplifyframework:core:1.6.4'
    implementation 'com.amazonaws:aws-android-sdk-apigateway-core:2.3.2'
    implementation 'com.amazonaws:aws-android-sdk-cognito:2.3.2'
    // ...
}
 

Это мой класс приложения:

 class MyApp : Application() {
    override fun onCreate() {
        super.onCreate()
        try {
            Amplify.addPlugin(AWSApiPlugin())
            Amplify.configure(applicationContext)
            Log.i("MyAmplifyApp", "Initialized Amplify.")
        } catch (error: AmplifyException){
            Log.e("MyAmplifyApp","Could not initialize Amplify.",error)
        }
    }
}
 

Ответ №1:

Эта ошибка возникает из-за того, что вам нужно вызвать Amplify.addPlugin перед его использованием.

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

Поэтому вызывайте любой плагин, который вы используете, предпочтительно в своем классе приложения (MyApp.java ) код:

общедоступный класс MyAmplifyApp расширяет приложение {

     String tag = "xxx";
    @Override
    public void onCreate() {
        super.onCreate();
        //xxx
        try {
            Amplify.addPlugin(new AWSDataStorePlugin());
            Amplify.addPlugin(new AWSCognitoAuthPlugin());
            Amplify.configure(getApplicationContext());
            Log.i(tag, "Initialized Amplify");
        } catch (AmplifyException error) {
            Log.e(tag, "Could not initialize Amplify", error);
        }
    }
}
 

Ответ №2:

Как вы пытаетесь пройти аутентификацию с помощью своего API? Что authType перечислено в вашем app/src/main/res/raw/amplifyconfiguration.json списке ?

Если это что-то, связанное с Cognito, вам нужно добавить категорию Auth. Пожалуйста, следуйте руководству по началу работы для авторизации.

Если вы не пытаетесь использовать Cognito, обновите свой API, чтобы использовать другой тип аутентификации с помощью CLI:

 amplify update api
amplify push
 

Например, вы можете выбрать авторизацию ключа API, которая, по сути, делает ваш API общедоступным для всех, кто знает этот ключ.

Ответ №3:

Согласно официальному документу Добавление этой строки в мою конфигурацию решило мою проблему

 Amplify.addPlugin(new AWSApiPlugin());
 

Так что это стало выглядеть так

 try {
        Amplify.addPlugin(new AWSDataStorePlugin());
        Amplify.addPlugin(new AWSApiPlugin());
        Amplify.configure(getApplicationContext());

        Log.i("MyAmplifyApp", "Initialized Amplify");
    } catch (AmplifyException error) {
        Log.e("MyAmplifyApp", "Could not initialize Amplify", error);
    }
 

Ответ №4:

У меня была такая же проблема, и предыдущие ответы указали мне правильное направление. Мне не хватало строки ниже в моей функции инициализации, как только я добавил это, все работало так, как планировалось.

 Amplify.addPlugin(AWSCognitoAuthPlugin())