【OAuth申請実録】
Google Fit歩数データアクセスのための前提と実務

記事イメージ


(最終更新日:

AndroidアプリやWebアプリなどで、Google FitやGカレンダーなどGoogle製品のデータにアクセスしたいという場面は相応にあります。

そういった中、ユーザーにとってプライバシー上重要度が高いデータ(センシティブデータ)であるとGoogleが認めるものへのアクセス実現には、GoogleによるOAuth認証審査を受ける必要があります。これが例えばAndroidアプリ審査などとは比べ物にならないくらいデベロッパーの工数的・時間的負担となります。

今回、ようやく認証通過しましたので、審査作業の実録やコツ、手続きの方法と実際の流れを紹介します。

前提の整理:認証が必要なケースと、認証審査を受ける準備

まずは、どのような場合にこの作業が必要なのかと、その内容を整理します。

Google製品内のセンシティブデータへのアクセスには、GoogleによるOAuth同意画面の認証を受ける必要あり

Googleは製品内のデータを区分分けしており、プライバシー上重要度が高いデータは「機密性の高いスコープ」と区分しています。(Fitnessデータは歩数も含めて全般的にこれに該当)

機密性の高いスコープへのアクセスのためにはGoogleによるOAuth認証を受ける必要があります。要は、データの利用がGoogleのプライバシー基準に準拠しているか審査するという趣旨です。

iOSの場合だと適切な説明文とユーザーの許諾さえ受ければ同等データ(例えばヘルスケアアプリのデータなど)にアクセス可能になることを考えると、Googleの方はかなり慎重なプロセスでデベロッパーの手間がかかる方式になっています。

GCPコンソールで申請を出す画面
GCPコンソールで申請を出す画面
OAuth同意画面(AndroidアプリでGoogle Fitの歩数データへのアクセスを求めている場合)
OAuth同意画面(AndroidアプリでGoogle Fitの歩数データへのアクセスを求めている場合)
未審査の場合に表示される警告画面。Googleによる審査が通ってなくても一応100人まで使用可能ですが、ユーザーの同意時に以下のような警告画面が表示されます。(赤点線で示したフローで操作すれば使用可能です)
未審査の場合に表示される警告画面

審査には、YouTube動画と、ドメイン、プライバシーポリシーのページが必須

GCPコンソールのセンシティブデータアクセス用OAuth同意画面の作成には、少なくとも以下3点が求められます。

センシティブデータアクセス用OAuth同意画面の作成に必須な項目
  • YouTube動画のURL(データをどのように使用するかを示すもの)
  • 認証済みドメイン(example.comといったもの。Google Search Consoleを使用して認証する)
  • Webサイト(プライバシーポリシーのページ)

以下の動画は、私が実際に認証申請して通過したときにGoogleに提出したYouTube動画です(本件のために作成しました)。これから審査に出す方はぜひご参考ください。

ちなみに動画作成にあたっては、Android11以上で標準で使えるスクリーン録画と、Windowsに標準で付属するビデオエディターを使用しています。

審査を受けるためには、まずはアプリ公開(未公開アプリは審査対象外)

審査を受けるには、とにかく何らかの方法でアプリを公開しておく必要があります。

機能の一部が実現していないのに公開が必須、というのは矛盾を感じますが、それでも規則なので仕方ありません。

私が取り組んだ「チーム・ウォーク」はログイン後に機能を利用するので先に公開しても問題ありませんでした。そうではない場合は例えば日本以外のどこか他の地域限定で公開し、審査を受けてから日本国内の公開に進む、といったプロセスなど検討が必要でしょう。

審査が通るまで、かなり時間がかかる

この認証作業についてGoogle側も「4〜5週間はかかる」と認める通り、とにかく時間がかかります。

一回ごとのレスポンスは数時間〜数日とクイックなのですが、毎回「動画を直せ」とか「アプリ内の表示を直せ」といった指示がくるので、修正作業も骨が折れます。これが4回も5回もやりとりが行われるので、手間も時間も嵩みます。

期間には余裕を持って取り組むようにしましょう。事業プロジェクトとして進めるのであれば、この認証作業に最低でも2ヶ月は余裕を持っておきたいところです。あるいは何らかの形で先行公開して、API認証を同時進行するのが良いでしょう。

OAuth同意画面の作成手順

GCPプラットフォーム内にてOAuth同意画面を作成し、Androidアプリと紐づけします。

Fitness APIを有効化

まずはAPIとサービス→ライブラリでFitness APIを検索し、有効化を行います。

APIの検索
APIの検索
有効化をクリック
有効化をクリック

OAuth同意画面の作成

APIとサービス→OAuth同意画面に移動。

APIに関する必要情報の入力画面が表示されます。必要となるYouTube動画のURL指定などもここで行います。

gcp-menu
「外部」を選択して進む
「外部」を選択して進む

OAuth同意画面のスコープ選択

スコープは、何のデータへのアクセスへ同意を求めるかの範囲指定です。

ここではFitnessの歩数データ取得を目指しますので、fitness.activity.readを選択します(日本語の説明に若干違和感がありますが、スコープ名に着目して選択するのがよいでしょう)。

尚、ここでFitness関連のスコープが表示されない場合、Fitness APIの有効化が出来ていない可能性が考えられます。上のステップに戻ってAPI有効化を確認しましょう。

必要なスコープを選択。説明よりも名称に注目すると吉。
必要なスコープを選択

認証情報にAndroidアプリ情報を紐づけ

Androidアプリとの紐づけは、認証情報の画面から行います。これにより、作成したOauth同意画面をAndroidアプリ内で表示することが出来ます。

Androidアプリプロジェクト内のAndroidManifest.xmlにあるパッケージ名、アプリ作成時に作成した署名を入力します。

尚、署名情報は、最新の署名方式を利用していれば、Google Play Consoleのアプリ画面→アプリの完全性→アプリの署名の画面に表示されています。

認証情報→CREATE CREDENTIALSに移動
認証情報→CREATE CREDENTIALSに移動
AndroidManifest.xmlと、アプリの署名情報からそれぞれ転記します。
AndroidManifest.xmlと、アプリの署名情報からそれぞれ転記します

開発フェーズにおいてアプリをテストする時の注意点

上記の通り、OAuth同意画面(並びにスコープへのアクセス許可)とAndroidアプリは署名情報によって紐づいています。

ローカルでデバッグするときはデフォルトでは署名されていない情報で起動するので、当然OAuth同意画面も起動しません。開発フェーズにおける当該データアクセス部分の検証は、Google Play Consoleの内部テストを利用するなどの工夫が必要です。

実際に審査を受けてみた実録を紹介

ここからは、私自身が個人制作アプリ「チーム・ウォーク」で認証を受けるための流れを紹介します。

初回にGCPコンソールで認証申請を提出した後から始まります。

プロセスの中で分かった、OAuth認証審査のコツまとめ

先に今回のプロセスで得られた知見を共有します。

  • 審査チームとのメールでのコミュニケーション、動画内の文書、申請入力などはすべて英語で行う(日本語で作成したりすると「英語で示せ」と指示されます。)
  • 詳細な拒絶理由は教えてくれない(質問しても同様)。質問文を書く暇があったら、文書や動画を修正して再申請を出した方が建設的。
  • 審査には短くとも数週間は要する。正式リリーススケジュールがある場合、必ず逆算して計画を立てる。
  • GoogleアカウントにアクセスするエントリポイントにGoogleサインインボタン画像を使用する。
  • 動画内では、OAuth認証を実際に行う様子を詳細ボタン内も含めてきちんと表示する。

1度目の提出→[Action Needed] Update Demo Video

もちろん一発で審査が通るとは思っていません。認証チームから次の通り初回の連絡が来ました。

デモビデオにアクセスできなかったよ

とのこと。確かにアクセス可能なURLを提供したのになぜ・・・と思いつつ。

メールに直接返信せよとのことなので、URLを貼って返信しました。

2度目の提出→Action Needed

Googleログインボタンは、Googleのブランドガイドラインに準拠せよ

とのこと。確かに下の画像の通り「Googleにログイン」と書いていますが実際のところこのアプリが持つのはオリジナルのログイン機構です。

よって、これは私の落ち度でした。動画の説明を「ログイン」から「アクセル許諾するアカウントを選択」と修正して再アップロードしました。

合わせて、メールに「動画の説明文言が適切でなく修正した」と、新しい動画のURLを添えて返信しました。(GCPコンソールのYouTube動画のリンクフォームも更新)

認証チームからの返信メールに添付されていた画像
認証チームからの返信メールに添付されていた画像

3度目の提出→Action Needed

「Thanks for your patience while we reviewed your project.」(意訳:お付き合いいただきありがとう)とメール冒頭につけてくれるので、形式的ながら優しさを感じさせます。

GoogleFitのブランドガイドラインに準拠する必要があります。

とのこと。

認証チームからの返信メールに添付されていた画像
認証チームからの返信メールに添付されていた画像

以下のリンクをご案内いただきました。

Google Fit Branding in Your App(Google Fitドキュメント)

こちらのリンク先によると、

you may surface Google Fit branding to your users.

とのことなのでブランディングを示すことは必須ではないように読めます。

しかしながら、改めて下の方までよく読むと、「オンボーディング、アプリの起動時等でユーザーに説明する」といった文言があるので、ある程度の表示は必要なのだろうと考えました。

尚、この指示にしたがってGoogle Fitのアイコンを使用する場合、上記リンク先に「Partner Marketing Hubで提供されるGoogle Fitアイコンを使用せよ」とあります。どこかで適当に拾った画像は使わないようにしましょう。

Partner Marketing Hubは、ブランドイメージの使用目的を問われ使用審査をするとの表示が出ますが、私の場合はメールアドレス認証後すぐに使用可能となりました。

4度目の提出→Action Needed

「Google Fitボタンは、GoogleFitのブランドガイドラインに準拠していません。」とのこと。3度目と同じですね。

Google Fitボタンの設置ルールについての規約が発見できなかったのでとりあえずボタン上にアイコンを設置したのですが不可でした。

他のアプリをいくつかダウンロードして研究したところ、どうもGoogleサインインボタンを使用するのがよいようなので、模倣して変更してみます。

参考:ログインにおけるブランドの取り扱いガイドライン (外部リンク)

認証チームからの返信メールに添付されていた画像
認証チームからの返信メールに添付されていた画像

5度目の提出→Request Granted(ついに通過!)

これでようやく通過しました。初回提出が6/18で通過が7/5なので、3週間くらいはかかっています。

個人開発だからいいものの、プロジェクトで動いているアプリならこのリードタイムを織り込んでいないと大変なことになりますので注意しましょう。

ここまでの話がご参考になれば幸いです。

最後の変更箇所。ユーザーに認証画面を提示するエントリーポイントにGoogleログインボタンを設置しました。また、アクセスを求める理由をボタンの下に表示しています。
最後の変更箇所

記事筆者へのお問い合わせ、仕事のご依頼

当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。

この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。

皆様のご投稿をお待ちしております。

記事筆者へ問い合わせする

※ご相談は無料でお受けいたします。
IT活用経営を実現する - 堺財経電算合同会社