CognitoCachingCredentialsProvider错误“在SharedPreferences中找不到有效凭据”

时间:2014-10-30 05:08:33

标签: android amazon-cognito

我正在尝试实现Amazon提供的用于连接DynamoDb的示例代码。第一步是客户端的初始化,亚马逊说要在常量类中定义凭证并使用它们:

private void initClients() {
    CognitoCachingCredentialsProvider credentials = new CognitoCachingCredentialsProvider(
            context,
            Constants.ACCOUNT_ID,
            Constants.IDENTITY_POOL_ID,
            Constants.UNAUTH_ROLE_ARN,
            null,
            Regions.US_EAST_1);

当我执行代码时,我得到以下内容: D / CognitoCachingCredentialsProvider:从SharedPreferences加载凭据 D / CognitoCachingCredentialsProvider:在SharedPreferences中找不到有效凭证

然后我创建了一个SharedPreferences文件并将凭据放入其中并仍然遇到相同的错误。在这种情况下,有谁知道CognitoCachingCredentialsProvider在寻找什么以及在哪里?

2 个答案:

答案 0 :(得分:9)

该消息不是错误 - 只是您还没有凭据的通知。不要担心创建由Cognito内部处理的SharedPreferences文件。一旦您通过凭据提供程序执行任何需要它获取凭据的操作,它将自动在内部缓存它们。

答案 1 :(得分:6)

除了Viktor Burmaka给出的答案之外,我想指出亚马逊指南(http://docs.aws.amazon.com/mobile/sdkforandroid/developerguide/s3transferutility.html)有点不完整。

它说要添加一行:

<service
  android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService"
  android:enabled="true" />

androidmanifest.xml文件

HOWEVER

没有提到该行需要嵌套在<application></application>标记中,如下所示:

<application>
    ...
    <service android:name="com.amazonaws.mobileconnectors.s3.transferutility.TransferService" android:enabled="true" />
    ...
</application>

我是通过Android文档找到的:https://developer.android.com/guide/topics/manifest/service-element.html

其中说:

<service>
SYNTAX:
<service android:description="string resource"
         android:directBootAware=["true" | "false"]
         android:enabled=["true" | "false"]
         android:exported=["true" | "false"]
         android:icon="drawable resource"
         android:isolatedProcess=["true" | "false"]
         android:label="string resource"
         android:name="string"
         android:permission="string"
         android:process="string" >
    . . .
</service>
CONTAINED IN:
<application>

NETWORK_STATE权限

Android Studio也要求我添加此权限:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />