AWS Amplifyを使用したAndroidアプリの構築(Kotlin版)
目次
- AWS Amplifyのセットアップ
- Amplifyプロジェクトの初期化
- Amazon Cognitoでユーザー認証の構成
- Amazon S3ストレージの構成
- Androidアプリの構築
- アプリのビルドと実行
- 注意事項
1. AWS Amplifyのセットアップ
a. AWSアカウントの作成
- AWS公式サイトにアクセスし、「Create an AWS Account」をクリック。
- 指示に従ってアカウントを作成します。
b. Node.jsとnpmのインストール
-
Node.js公式サイトからNode.jsをインストールします。
-
コマンドプロンプトを開き、以下のコマンドでNode.jsとnpmが正しくインストールされていることを確認します。
node -v npm -v
c. Amplify CLIのインストール
-
コマンドプロンプトを開き、以下のコマンドを実行してAmplify CLIをインストールします。
npm install -g @aws-amplify/cli
d. Amplify CLIの設定
-
コマンドプロンプトで次のコマンドを入力してAmplifyを構成します。
amplify configure
-
指示に従い、以下のタスクを行います:
- AWS管理コンソールで「IAM」を検索して選択します。
- 左側のナビゲーションメニューから「Users」をクリックし、「Add user」をクリックします。
- ユーザー名を設定(例:
amplify-user
)。 - Access typeで「Programmatic access」にチェック。
- 次のステップで「Attach existing policies directly」を選択し、「AdministratorAccess」ポリシーを付与します。
- ユーザーを作成し、表示されたAccess Key IDとSecret Access Keyを必ずコピーします。
- コマンドプロンプトに戻り、リージョンやコピーしたアクセスキーを入力します。
2. Amplifyプロジェクトの初期化
-
新しいプロジェクト用のディレクトリを作成します。
mkdir MyAmplifyApp cd MyAmplifyApp
-
Amplifyプロジェクトを初期化します。
amplify init
-
プロンプトに従ってプロジェクトの設定を行います。
3. Amazon Cognitoでユーザー認証の構成
-
次のコマンドを実行してCognitoを追加します。
amplify add auth
-
「Default configuration」を選択し、指示に従います。
-
次に、設定をデプロイします。
amplify push
4. Amazon S3ストレージの構成
-
次のコマンドを実行してS3ストレージを追加します。
amplify add storage
-
「Content (Images, audio, video)」を選択し、指示に従います。
-
設定をデプロイします。
amplify push
5. Androidアプリの構築
a. Android Studioを開く
- Android Studioを起動します。
- 「New Project」を選択します。
- 「Empty Activity」を選択し、「Next」をクリックします。
- プロジェクト名を設定(例:
MyAmplifyApp
)し、パッケージ名や保存先を設定します。 - 「Finish」をクリックします。
b. build.gradleファイルの更新
-
プロジェクトが作成されたら、**
app/build.gradle
**ファイルを開きます。 -
dependencies
セクションに以下を追加します。dependencies { implementation 'com.amplifyframework:core:1.28.1' implementation 'com.amplifyframework:aws-auth-cognito:1.28.1' implementation 'com.amplifyframework:aws-storage-s3:1.28.1' }
-
「Sync Now」をクリックして依存関係を同期します。
c. Amplifyの設定
-
MainActivity.kt
を開きます。 - 次のコードを追加してAmplifyを初期化します。
import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import com.amplifyframework.AmplifyException
import com.amplifyframework.core.Amplify
import com.amplifyframework.auth.cognito.AWSCognitoAuthPlugin
import com.amplifyframework.storage.s3.AWSS3StoragePlugin
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
try {
Amplify.addPlugin(AWSCognitoAuthPlugin())
Amplify.addPlugin(AWSS3StoragePlugin())
Amplify.configure(applicationContext)
Log.i("MyAmplifyApp", "Initialized Amplify")
} catch (e: AmplifyException) {
Log.e("MyAmplifyApp", "Could not initialize Amplify", e)
}
}
}
d. ユーザー認証の実装
- **
activity_main.xml
**ファイルを開き、サインアップ用のUIを作成します。
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/usernameEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Username" />
<EditText
android:id="@+id/passwordEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Password"
android:inputType="textPassword" />
<Button
android:id="@+id/signupButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Sign Up" />
</LinearLayout>
-
MainActivity.kt
にサインアップ機能のコードを追加します。
import android.view.View
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val usernameEditText = findViewById<EditText>(R.id.usernameEditText)
val passwordEditText = findViewById<EditText>(R.id.passwordEditText)
val signupButton = findViewById<Button>(R.id.signupButton)
signupButton.setOnClickListener {
val username = usernameEditText.text.toString()
val password = passwordEditText.text.toString()
signUp(username, password)
}
}
private fun signUp(username: String, password: String) {
Amplify.Auth.signUp(username, password,
{ result ->
Log.i("AuthQuickStart", "Successfully registered user: ${result.user.username}")
runOnUiThread {
Toast.makeText(this, "Successfully registered!", Toast.LENGTH_SHORT).show()
}
},
{ error ->
Log.e("AuthQuickStart", "Failed to register user", error)
runOnUiThread {
Toast.makeText(this, "Failed to register!", Toast.LENGTH_SHORT).show()
}
}
)
}
}
e. S3へのファイルアップロード機能の実装
- UIを更新してファイルパスを入力するための
EditText
とファイルアップロード用のButton
を追加します。
<EditText
android:id="@+id/filePathEditText"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="File Path" />
<Button
android:id="@+id/uploadButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Upload File" />
-
MainActivity.kt
にファイルアップロード機能のコードを追加します。
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val usernameEditText = findViewById<EditText>(R.id.usernameEditText)
val passwordEditText = findViewById<EditText>(R.id.passwordEditText)
val signupButton = findViewById<Button>(R.id.signupButton)
val filePathEditText = findViewById<EditText>(R.id.filePathEditText)
val uploadButton = findViewById<Button>(R.id.uploadButton)
signupButton.setOnClickListener {
val username = usernameEditText.text.toString()
val password = passwordEditText.text.toString()
signUp(username, password)
}
uploadButton.setOnClickListener {
val filePath = filePathEditText.text.toString()
uploadFile(filePath)
}
}
private fun uploadFile(filePath: String) {
val file = File(filePath)
Amplify.Storage.uploadFile(
file.name,
file,
{ result -> Log.i("MyAmplifyApp", "Uploaded: ${result.key}") },
{ error -> Log.e("MyAmplifyApp", "Upload failed", error) }
)
}
}
6. アプリのビルドと実行
- コードの追加が完了したら、Android Studioの「Run」ボタンをクリックしてアプリをビルドして実行します。
- サインアップ機能を試してみてください。成功すると、ユーザーが登録されます。
- 次に、指定したファイルをアップロードするために、ファイルパスを入力して「Upload File」ボタンをクリックします。
7. 注意事項
-
ファイルパスの指定: アップロードするファイルのパスを正しく指定してください(例えば
/storage/emulated/0/Download/example.txt
など)。 - ストレージのパーミッション: 必要に応じて、AndroidManifest.xmlファイルに権限を追加します。
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>