🦁

【ミーア】FlutterアプリからGoogleカレンダーにアクセスして当日の予定をコンソールに表示する方法

2024/11/21に公開

はじめに

様々な方言を話す。おしゃべりに小型ロボット「ミーア」を開発中。

https://mia-cat.com

現在、ミーアが提供する便利な機能としては、アプリで居住地を入力して、天気お知らせ時刻を設定していると、その時刻にその日の天気と一言アドバイス(雨の場合は、「折り畳み傘忘れないでね」など)を音声で伝える機能がある。

https://youtu.be/842TBkBhV2Q?si=K3wBVHX7pvx9UrNK

自分だったら、他にどんな機能があったら使うかなと思い、「カレンダー連携で予定を通知する機能」 を追加することにした。

例えば、次のようなシナリオを想定

例:「次のミーティング『開発打ち合わせ』があと5分で始まります。プレゼン資料の準備できていますか?」

こんな風に、カレンダー情報を基に予定を音声で知らせてくれることで、ユーザーの時間管理をサポートする。

カレンダー連携で予定を音声通知する実装概要

この機能の実現には以下のステップが必要

1)FlutterアプリとGoogleカレンダーの連携

ユーザーのGoogleカレンダーから予定情報を取得。
必要な予定は「当日(今日の0:00〜23:59)」の範囲内。
予定は数時間おきに最新情報を取得して、ユーザーの変更に対応。

2)5分前の通知トリガー
予定開始の5分前に、イベント情報をアプリ内で処理する。

3)音声通知の生成と送信
サーバーで予定タイトルのテキストから音声合成し、ミーア本体に送信する。

4)音声再生
ミーアが音声データを再生してユーザーに通知する

今回は一番手前の、FlutterアプリからGoogleカレンダーにアクセスして、一旦は当日の予定情報を(開始時刻とタイトル)をコンソールに表示するのを実装したいと思う。

テキストから音声合成とミーア本体に送信して音声再生する部分は、すでに天気お知らせ機能でできているので、上記ができれば後は繋げるだけ。

GCPでGoogleカレンダーAPIを有効化

Googleカレンダーにアクセスするには、**「Google Calendar API」**を利用する必要がある。

google cloudを開き、検索フィールド で「google calendar api」と入力して、表示されたcalendar apiを「有効にする」をクリック。

OAuth 同意画面を設定

Google Calendar APIを使用する際には、OAuth 2.0認証を利用するために、OAuth同意画面の設定も必要。

今回は、一般のGoogleアカウントを持つすべてのユーザー向けにもサービス提供するので、「外部」を選択して、作成をクリック。

アプリ登録の編集

すると、アプリ登録編集画面に移動するので、アプリ情報(アプリ名、サポートメールアドレス)を入力。他にもロゴやアプリのドメインなど任意の設定項目があるが、今回はスキップ。

スコープの設定

Google Calendar APIにアクセスするには、次のスコープを追加する必要があるので、追加

  • https://www.googleapis.com/auth/calendar
  • https://www.googleapis.com/auth/calendar.readonly


追加すると、機密性の高いスコープの欄に下記のように表示される。


テストユーザーの設定

続きは、こちらで記載しています。
https://kazulog.fun/dev/flutter-google-calendar-integration/

Discussion