こんにちは!先日、ひさしぶりに AWS AmplifyのFlutterページ を見ていると、なにやら見慣れぬ Push Notification
が追加されていました。AWSのこの手の機能を実装する際に意外に大変なのは環境構築。ここでつまづく方も多いのではないでしょうか。そんな方のために、この記事ではFlutterとAWS Amplifyを使用したPush Notification(プッシュ通知)の環境構築の手順を記載したいと思います。
※Flutterの環境構築は完了しているものとします。
Amplify CLIの設定
- Node.js, npm, gitをインストール。
npm install -g @aws-amplify/cli
amplify configure
コマンドプロンプトでENTERを押してIAMの設定をします。
上記URLの通り手順を進めアクセスキーを作成。
※Option項目は今回スキップ。
- ②で作成したアクセスキーとシークレットアクセスキーを入力。
Firebaseプロジェクトの作成
※「プロジェクトを作成から」作成。
Firebaseにアプリを登録
※FlutterFire CLIを使えば簡単にAndroid, iOSの環境構築が出来ます。今回はAndroidだけで実装する為個別で登録します。
- Androidのアイコンをクリック。
- Android パッケージ名の箇所にアプリのパッケージ名(アプリケーションID)を入力。
※プロジェクト/android/build.gradleの中に書いてあるアプリケーションID。
- google-services.jsonをダウンロードしてFlutterアプリに追加。
配置場所:Flutterプロジェクト/android/app/
- /android/build.gradle/に以下を追加。
dependencies {
classpath 'com.android.tools.build:gradle:7.3.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath 'com.google.gms:google-services:4.4.0' //Google Services plugin
}
- 以下が存在することを確認する。
allprojects {
repositories {
google() //これがあるか確認
mavenCentral()
}
}
- プロジェクト/android/app/build.gradle/に以下を追加。
apply plugin: 'com.google.gms.google-services'
Firebase Cloud Consoleにアプリを登録
- プロジェクトを作成していない場合は新規作成します。
- 画面左上の歯車アイコンをクリックし「プロジェクトの設定」をクリック。
- Cloud Messagingタブをクリック。
- 「Cloud Messaging API (Legacy)」の横にある 3 つの縦のドットを選択し、「Google Cloud Console で API を 管理」を選択。
- 新規タブが開き「有効にする」をクリック。
- 元のページに戻り画面を更新する。
- サーバーキーをコピー。
バックエンドリソースのセットアップ
- プロジェクトのディレクトリで以下のコマンドを実行。
amplify add notifications
- FCMを選択しサーバー キーの入力を求めるプロンプトが表示されるので「Firebase Cloud Consoleにアプリを登録」の7で発行されたサーバーキーを貼り付ける。正常完了するとamplifyconfiguration.dart が更新される。
Amplifyライブラリのインストール
プロジェクトのpubspec.yamlのdependenciesに以下を追加する。
dependencies:
amplify_auth_cognito: ^1.0.0
amplify_flutter: ^1.0.0
amplify_push_notifications_pinpoint: ^1.0.0
Amplify Push Notificationの初期化
import 'package:amplify_auth_cognito/amplify_auth_cognito.dart';
import 'package:amplify_flutter/amplify_flutter.dart';
import 'package:amplify_push_notifications_pinpoint/amplify_push_notifications_pinpoint.dart';
import 'package:flutter/cupertino.dart';
import 'amplifyconfiguration.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
@override
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
void initState() {
super.initState();
_configureAmplify();
}
Future<void> _configureAmplify() async {
try {
final authPlugin = AmplifyAuthCognito();
final pushPlugin = AmplifyPushNotificationsPinpoint();
await Amplify.addPlugins([authPlugin, pushPlugin]);
await Amplify.configure(amplifyconfig);
} on Exception catch (e) {
safePrint('An error occurred configuring Amplify: $e');
}
}
@override
Widget build(BuildContext context) {
// Your application UI
}
}
以上、みなさんの参考になれば幸いです。
参考記事
https://docs.amplify.aws/lib/project-setup/prereq/q/platform/flutter/#configure-the-amplify-cli
https://firebase.google.com/docs/cloud-messaging/android/first-message?hl=ja#register_your_app_with_firebase
https://docs.amplify.aws/lib/push-notifications/setup-push-service/q/platform/flutter/
https://docs.amplify.aws/lib/push-notifications/getting-started/q/platform/flutter/#set-up-backend-resources