FlutterでFCMクライアントをセットアップするには、次の手順に従います。
プラットフォーム固有のセットアップと要件
必要な手順のいくつかは、ターゲットとするプラットフォームによって異なります。
iOS +
Xcodeでアプリ機能を有効にする
アプリケーションがメッセージの受信を開始する前に、Xcodeプロジェクトでプッシュ通知とバックグラウンドモードを有効にする必要があります。
- Xcodeプロジェクトワークスペース(
ios/Runner.xcworkspace
)を開きます。 - プッシュ通知を有効にします。
- バックグラウンドフェッチとリモート通知のバックグラウンド実行モードを有効にします。
APNs認証キーをアップロードします
FCMを使用する前に、APNs証明書をFirebaseにアップロードしてください。 APNs証明書をまだお持ちでない場合は、 Apple DeveloperMemberCenterで作成してください。
- Firebaseコンソールのプロジェクト内で、歯車のアイコンを選択し、[プロジェクト設定]を選択してから、[クラウドメッセージング]タブを選択します。
- 開発証明書、本番証明書、またはその両方の[証明書のアップロード]ボタンを選択します。少なくとも1つは必要です。
- 証明書ごとに、.p12ファイルを選択し、パスワードがある場合はそれを入力します。この証明書のバンドルIDがアプリのバンドルIDと一致していることを確認してください。 [保存]を選択します。
メソッドスウィズリング
AppleデバイスでFCMFlutterプラグインを使用するには、メソッドのスウィズリングを無効にしないでください。スウィズリングが必要です。スウィズリングがないと、FCMトークン処理などの主要なFirebase機能が正しく機能しません。
アンドロイド
GooglePlayサービス
FCMクライアントには、GooglePlayサービスもインストールされているAndroid4.4以降を実行しているデバイス、またはGoogleAPIを使用してAndroid4.4を実行しているエミュレーターが必要です。 GooglePlayストアを介してAndroidアプリをデプロイすることに限定されないことに注意してください。
PlayサービスSDKに依存するアプリは、Google Playサービス機能にアクセスする前に、互換性のあるGooglePlayサービスAPKがないかデバイスを常に確認する必要があります。これは、メインアクティビティのonCreate()
メソッドとそのonResume()
メソッドの2か所で行うことをお勧めします。 onCreate()
をチェックインすると、チェックが成功しないとアプリを使用できないようになります。 onResume()
のチェックインにより、ユーザーが戻るボタンなどの他の手段で実行中のアプリに戻った場合でも、チェックが実行されます。
デバイスに互換性のあるバージョンのGooglePlayサービスがない場合、アプリはGoogleApiAvailability.makeGooglePlayServicesAvailable()
を呼び出して、ユーザーがPlayストアからGooglePlayサービスをダウンロードできるようにすることができます。
ウェブ
FCMを使用してWebクレデンシャルを構成する
FCM Webインターフェイスは、「自発的なアプリケーションサーバーの識別」または「VAPID」キーと呼ばれるWebクレデンシャルを使用して、サポートされているWebプッシュサービスへの送信要求を承認します。アプリをサブスクライブしてプッシュ通知を行うには、キーのペアをFirebaseプロジェクトに関連付ける必要があります。新しいキーペアを生成するか、Firebaseコンソールから既存のキーペアをインポートできます。
新しいキーペアを生成します
Firebaseコンソールの[設定]ペインの[クラウドメッセージング]タブを開き、[ウェブ設定]セクションまでスクロールします。
[ Webプッシュ証明書]タブで、[キーペアの生成]をクリックします。コンソールには、キーペアが生成されたという通知が表示され、公開キーの文字列と追加された日付が表示されます。
既存のキーペアをインポートします
Webアプリですでに使用している既存のキーペアがある場合は、それをFCMにインポートして、FCMAPIを介して既存のWebアプリインスタンスにアクセスできるようにすることができます。キーをインポートするには、Firebaseプロジェクトへの所有者レベルのアクセス権が必要です。既存の公開鍵と秘密鍵をbase64URLセーフエンコード形式でインポートします。
Firebaseコンソールの[設定]ペインの[クラウドメッセージング]タブを開き、[ウェブ設定]セクションまでスクロールします。
[ Webプッシュ証明書]タブで、「既存のキーペアをインポートする」というリンクテキストを見つけて選択します。
[キーペアのインポート]ダイアログで、対応するフィールドに公開キーと秘密キーを入力し、[インポート]をクリックします。コンソールには、公開鍵文字列と追加された日付が表示されます。
キーの形式とその生成方法の詳細については、「アプリケーションサーバーのキー」を参照してください。
FCMプラグインをインストールします
Flutterプロジェクトのルートから、次のコマンドを実行してプラグインをインストールします。
flutter pub add firebase_messaging
完了したら、Flutterアプリケーションを再構築します。
flutter run
登録トークンにアクセスする
特定のデバイスにメッセージを送信するには、そのデバイスの登録トークンを知っている必要があります。このチュートリアルを完了するには、通知コンソールのフィールドにトークンを入力する必要があるため、トークンを取得した後は、必ずトークンをコピーするか、安全に保管してください。
アプリインスタンスの現在の登録トークンを取得するには、 getToken()
を呼び出します。通知権限が付与されていない場合、このメソッドはユーザーに通知権限を要求します。それ以外の場合は、トークンを返すか、エラーのためにfutureを拒否します。
final fcmToken = await FirebaseMessaging.instance.getToken();
Webプラットフォームでは、VAPID公開鍵をgetToken()
に渡します。
final fcmToken = await FirebaseMessaging.instance.getToken(vapidKey: "BKagOny0KF_2pCJQ3m....moL0ewzQ8rZu");
トークンが更新されるたびに通知を受け取るには、 onTokenRefresh
ストリームをサブスクライブします。
FirebaseMessaging.instance.onTokenRefresh
.listen((fcmToken) {
// TODO: If necessary send token to application server.
// Note: This callback is fired at each app startup and whenever a new
// token is generated.
})
.onError((err) {
// Error getting token.
});
自動初期化を防ぐ
FCM登録トークンが生成されると、ライブラリは識別子と構成データをFirebaseにアップロードします。トークンの自動生成を防止したい場合は、ビルド時に自動初期化を無効にしてください。
iOS
iOSでは、メタデータ値をInfo.plist
に追加します。
FirebaseMessagingAutoInitEnabled = NO
アンドロイド
Androidでは、 AndroidManifest.xml
にこれらのメタデータ値を追加して、AnalyticsコレクションとFCM自動初期化を無効にします(両方を無効にする必要があります)。
<meta-data
android:name="firebase_messaging_auto_init_enabled"
android:value="false" />
<meta-data
android:name="firebase_analytics_collection_enabled"
android:value="false" />
実行時にFCM自動初期化を再度有効にする
特定のアプリインスタンスの自動初期化を有効にするには、 setAutoInitEnabled()
を呼び出します。
await FirebaseMessaging.instance.setAutoInitEnabled(true);
この値は、一度設定するとアプリを再起動しても持続します。
次のステップ
クライアントアプリのセットアップが完了すると、通知コンポーザーを使用してダウンストリームメッセージの送信を開始する準備が整います。バックグラウンドアプリにテストメッセージを送信するを参照してください。
他のより高度な動作をアプリに追加するには、サーバーの実装が必要です。
次に、アプリクライアントで: