Android 应用程序中的 AWS Amplify Cognito 身份验证错误

Posted

技术标签:

【中文标题】Android 应用程序中的 AWS Amplify Cognito 身份验证错误【英文标题】:AWS Amplify Cognito Auth error in Android app 【发布时间】:2021-03-25 22:56:37 【问题描述】:

我正在关注 Amplify 文档以向我的 android 应用程序添加身份验证。我在这条线上收到了AuthException

Amplify.addPlugin(AWSCognitoAuthPlugin())

我确实创建了一个用户池。我需要以某种方式附加它吗?我猜AWSMobileClient 有问题。

这是我的Application 课程:

class AppUtils : Application() 
    override fun onCreate() 
        super.onCreate()
        try 
            Amplify.addPlugin(AWSCognitoAuthPlugin())
            Amplify.configure(applicationContext)
            Log.d(TAG, "Initialized Amplify")
         catch (error: AmplifyException) 
            Log.e(TAG, "Could not initialize Amplify", error)
        
    

这是在 logcat 中显示的错误:

AuthExceptionmessage=无法实例化 AWSMobileClient,原因=java.lang.RuntimeException:未使用 Cognito Identity 或 Cognito UserPool。必须至少存在一个才能使用 AWSMobileClient。,recoverySuggestion=有关更多详细信息,请参阅附加的异常

【问题讨论】:

【参考方案1】:

该错误表明在您的配置文件中找不到身份或用户池。

首先确保您已完成以下步骤:

放大初始化 放大添加授权 放大推送

完成后,您的app/src/main/res/raw 目录中应该有一个amplifyconfiguration.json 和一个awsconfiguration.json

您的amplifyconfiguration.json 应如下所示:


    "UserAgent": "aws-amplify-cli/2.0",
    "Version": "1.0",
    "auth": 
        "plugins": 
            "awsCognitoAuthPlugin": 
                "UserAgent": "aws-amplify-cli/0.1.0",
                "Version": "0.1.0",
                "IdentityManager": 
                    "Default": 
                ,
                "CredentialsProvider": 
                    "CognitoIdentity": 
                        "Default": 
                            "PoolId": "us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                            "Region": "us-east-1"
                        
                    
                ,
                "CognitoUserPool": 
                    "Default": 
                        "PoolId": "us-east-1_xxxxxxxxx",
                        "AppClientId": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "AppClientSecret":
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
                        "Region": "us-east-1"
                    
                ,
                "Auth": 
                    "Default": 
                        "authenticationFlowType": "USER_SRP_AUTH"
                    
                
            
        
    

您的awsconfiguration.json 应如下所示:


    "UserAgent": "aws-amplify-cli/0.1.0",
    "Version": "0.1.0",
    "IdentityManager": 
        "Default": 
    ,
    "CredentialsProvider": 
        "CognitoIdentity": 
            "Default": 
                "PoolId": "us-east-1:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
                "Region": "us-east-1"
            
        
    ,
    "CognitoUserPool": 
        "Default": 
            "PoolId": "us-east-1_xxxxxxxxx",
            "AppClientId": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
            "AppClientSecret":
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "Region": "us-east-1"
        
    ,
    "Auth": 
        "Default": 
            "authenticationFlowType": "USER_SRP_AUTH"
        
    

【讨论】:

【参考方案2】:

如果您刚刚添加了 Cognito,请运行

amplify update api

使用 Cognito 作为身份验证模式。

然后运行

amplify push

【讨论】:

【参考方案3】:

几天来我也遇到了同样的错误,您刚刚向项目添加了基本文件,现在您需要为 Amplify 定义用户池以向两个配置文件添加更多数据。您需要运行这些命令才能解决此问题。

amplify init // It will make sure you have basic setup added
amplify add auth // It will add auth data and user pools to config files
amplify push // It will push all the setup to amplify cloud

希望它能解决您的问题:)

【讨论】:

以上是关于Android 应用程序中的 AWS Amplify Cognito 身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章

多个设备令牌目标指向 AWS SNS 中的单个 Android 设备

无需硬编码访问密钥即可从 android 应用程序访问 AWS S3

AWS SNS Android GCM - InvalidPlatformToken

如何将 React 本机导航与 Android 中的 AWS Amplify 推送通知集成?

错误“未实现 URL.hostname”,React Native Android 中的 AWS SNS

适用于 iOS/Android 的 AWS 移动开发工具包中内置的网络安全性如何?