【ミーア】FlutterアプリからGoogleカレンダーにアクセスして当日の予定をコンソールに表示する方法
はじめに
様々な方言を話す。おしゃべりに小型ロボット「ミーア」を開発中。
現在、ミーアが提供する便利な機能としては、アプリで居住地を入力して、天気お知らせ時刻を設定していると、その時刻にその日の天気と一言アドバイス(雨の場合は、「折り畳み傘忘れないでね」など)を音声で伝える機能がある。
自分だったら、他にどんな機能があったら使うかなと思い、「カレンダー連携で予定を通知する機能」 を追加することにした。
例えば、次のようなシナリオを想定
例:「次のミーティング『開発打ち合わせ』があと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
追加すると、機密性の高いスコープの欄に下記のように表示される。
テストユーザーの設定
続きは、こちらで記載しています。
Discussion