Edited at

AWS Amplify+IAM未認証ユーザでAppSyncを使う(Androidアプリ)


参考

Web版があったので、こちらを参考にさせてもらいました。

https://qiita.com/youn4101/items/9bca97083f07d1b9af12


Android Studioのプロジェクトを新規作成

Basic Activityを作成し、ここに従う。

https://aws-amplify.github.io/docs/android/start


amplifyの設定

amplify configure

amplify init
amplify add api

? Please select from one of the below mentioned services GraphQL
? Provide API name: amplifyguestaccess
? Choose an authorization type for the API API key
? Do you have an annotated GraphQL schema? No
? Do you want a guided schema creation? Yes
? What best describes your project: Single object with fields (e.g., “Todo” with ID, name, description)
? Do you want to edit the schema now? Yes
Selected default editor not found in your machine. Please manually edit the file created at /Users/.../schema.graphql
? Press enter to continue

ひとまず先述のURL( https://aws-amplify.github.io/docs/android/start

)をもとに、API Key でToDoのサンプルが動作するようにする。


Cognito, IAM

ここでは、 Cognito サービスにて、 amplify_guest_access というID プールを作成。

認証されていない ID に対してアクセスを有効にする にチェックを入れる

作成されたロールを確認し、 認証されていないロールCognito_amplify_guest_accessUnauth_Role)をIAMにて編集し、AppSyncへのアクセスを許可する。

{

"Effect": "Allow",
"Action": [
"appsync:GraphQL"
],
"Resource": "*"
}


awsconfiguration.json

    "CredentialsProvider": {

"CognitoIdentity": {
"Default": {
"PoolId": "ap-northeast-1:b2bddc1a-f3bb-41fb-a93d-975f92457207",
"Region": "ap-northeast-1"
}
}
},
"AppSync": {
"Default": {
(中略)
"AuthMode": "AWS_IAM"
}
}


MainActivity.kt

        val credentialsProvider = CognitoCachingCredentialsProvider(applicationContext, AWSConfiguration(applicationContext))

mAWSAppSyncClient = AWSAppSyncClient.builder()
.context(applicationContext)
.awsConfiguration( AWSConfiguration(applicationContext))
.credentialsProvider(credentialsProvider)
.build()

runMutation() // 任意の場所で

上記が実行されると、DynamoDBのTableにItemが追加される。