[Fluth]FCM、アプリケーションで通知を送信


FCM、Firebaseクラウドメッセージングをサポートから始まるので、fcmに関する設定を完了する必要があります.

1.token値の取得


各デバイスには唯一のfcm tokenがあります.デバイスに通知を送信するには、このtoken値を知っておく必要があります.
token = await FirebaseMessaging.instance.getToken();

2.コード


実際、前回行った設定が完了した後、アプリケーションで通知を送信するのは難しくありません.
class FCMController {
  final String _serverKey = "your serverKey";

  Future<void> sendMessage({
    required String userToken,
    required String title,
    required String body,
  }) async {
  
    http.Response response;
    
    NotificationSettings settings =
        await FirebaseMessaging.instance.requestPermission(
      alert: true,
      announcement: false,
      badge: true,
      carPlay: false,
      criticalAlert: false,
      provisional: false,
      sound: false,
    );

    if (settings.authorizationStatus == AuthorizationStatus.authorized) {
      print('User granted permission');
    } else if (settings.authorizationStatus ==
        AuthorizationStatus.provisional) {
      print('User granted provisional permission');
    } else {
      print('User declined or has not accepted permission');
    }
    
    try {
      response = await http.post(
          Uri.parse('https://fcm.googleapis.com/fcm/send'),
          headers: <String, String>{
            'Content-Type': 'application/json',
            'Authorization': 'key=$_serverKey'
          },
          body: jsonEncode({
            'notification': {'title': title, 'body': body, 'sound': 'false'},
            'ttl': '60s',
            "content_available": true,
            'data': {
              'click_action': 'FLUTTER_NOTIFICATION_CLICK',
              'id': '1',
              'status': 'done',
              "action": '테스트',
            },
            // 상대방 토큰 값, to -> 단일, registration_ids -> 여러명
            'to': userToken
            // 'registration_ids': tokenList
          }));
    } catch (e) {
      print('error $e');
    }
  }
}
  • serverKeyは、Firebaseのホームページ->プロジェクト設定->クラウドメッセージ->サーバキーで入手できます.
  • sendmessageにより相手のfcm token値とtitle,bodyを受信して通知を送信する.
  • 3. onMessageOpenedApp

  • アプリケーションから通知を受けた後、アプリケーションをクリックすると必要なページが開き、移動します.正式な書類の例から見ると、onMessageOpenAppによって実装され得る.
  •  @override
      void initState() {
        FirebaseMessaging.onMessage.listen((RemoteMessage message) async {
          RemoteNotification? notification = message.notification;
          AndroidNotification? android = message.notification?.android;
          var androidNotiDetails = AndroidNotificationDetails(
            channel.id,
            channel.name,
            channelDescription: channel.description,
          );
          var iOSNotiDetails = const IOSNotificationDetails();
          var details =
              NotificationDetails(android: androidNotiDetails, iOS: iOSNotiDetails);
          if (notification != null) {
            flutterLocalNotificationsPlugin.show(
              notification.hashCode,
              notification.title,
              notification.body,
              details,
            );
          }
        });
    
        onMessageOpenedApp((message) {
          print("onMessage ${message.data["action"].toString()}");
        });
    
        super.initState();
      }
    
  • 通知をクリックしてonMessageOpenAppを実行し、通知されたメッセージを値として受信します.このメッセージdataで自分の欲しい値を確認し、値に従ってページに移動できます.
  • を送信できるメールの種類と形式は、正式書類1および正式書類2を参照してください.
  • 4.注意事項


    When does a FCM token expire?を確認すると、FCMトークン値は以下のような状況が発生したときに自己更新されます.
  • アプリケーションはインスタンスIDを削除します.
  • アプリケーションは、新しいデバイスからリカバリされます.
  • ユーザーは、アプリケーションをアンインストール/再インストールします.
  • ユーザーは、アプリケーションデータを消去します.
  • token値が変更された場合、通知は送信されないため、token値管理は非常に重要です.

    5.結果



  • の正常なヒントの様子が見えます.
  • 実は整理したこの瞬間もfcmを完全に理解していませんでした.やればやるほど難しくなった気がしますが次回はバッジ処理に挑戦してみたいです.
    終了:)