どういうことか
今担当している案件で、他アプリからの場所共有を受け取りたいから、その動作確認の一環としてGoogle Mapsからどんなデータが共有されるかを実際試してみましたら、共有先のアプリ、つまり自分自身のアプリのBundle IdentifierがしれっとGoogle Mapsの共有データの中に埋め込まれていることが発覚しました。
![]() |
---|
↑こちら自分の個人アプリで確認したものですが、しれっとそのアプリのShare ExtensionのBundle Identifierが埋め込まれています |
何がまずいか
自分が思いつく限り、2つほどやばいことがあります:
まだ未公開のアプリ/機能がGoogle Mapsチームにバレてしまう
こちら完全にコンプライアンス的にまずいことだと思いますが、もしそのまま共有アドレスにアクセスしてしまうと、そのBundle IdentifierもGoogleのサーバに送信されてしまうから、まだ水面下で開発しているアプリとか、もしくはアプリとして既に公開済みだけどShare Extensionの対応がまだ公開されていないアプリの場合、その事実がGoogle Mapsチームにバレてしまいます。特にBundle Identifierは構成上、ほとんどの場合会社名が含まれてしまい、またアプリ名からこのアプリは何をするものなのか想像がつくことも多いので、そのBundle Identifierだけで「お、今その会社がこんなアプリ作ってるんだな」ということがGoogle Mapsのチームにバレることになります。
「大丈夫どうせうちAndroidアプリの開発もやってるからGoogleにとって既に把握してる情報」と考えることもできなくはないかもしれませんが、AndroidチームはAndroidチーム、Google MapsチームはGoogle Mapsチーム。同じ会社と言っても、部署が違うからそれぞれにとっての機密情報は簡単に共有されてはいけないはずです。
個人のアプリインストール情報がGoogleにバレてしまう
もちろんこれ一般的なユーザにもまずいことがあると思います。対象アプリがShare Extensionを対応している前提ではありますが、Google Mapsにログインして使ってるユーザなら、Google Mapsから場所を特定のアプリに共有すると、「お、このユーザはこのアプリインストールしてるんだね」ということがバレる可能性もあります。まあ大した個人情報ではないですが、そもそもこれはGoogleにとって知る必要がないはずの情報です。
どのようにBundle Identifierを取得したのか
実際のGoogle Mapsのソースコードを見れるわけではないので、あくまで推測の領域ですが、これはiOSの UIActivity.ActivityType
を悪用したものかと思います。この機能は本来、例えばSNSにユーザが共有したい情報を書き出すとき、プラットフォームに応じて最適な情報をアプリ内で処理させるためのものです:例えばTwitterに書き出すときは文字数が140文字以内で画像が4枚まで、Vimeoに書き出すなら動画データのみを書き出す、などのような処理です。これは共有先をまず決めないとできない処理なので、iOSでは共有先を決めてから共有元アプリにこのような処理を依頼することが可能になっています。しかしGoogleをこの機能を悪用して全ての共有先のBundle Identifierを吸い取って共有リンクに埋め込んだと思われます。
ではどうすればいいのか
正直これAppleの落ち度もないとは言い切れないと思います。元々は限定されたプラットフォームへの共有機能ですが、それを一般化した際に、このようなBundle Identifierを隠せなかったのが根本的な問題だと思います。そして既にこうなってしまった以上、我々ができることはとても限られています。
まず開発者として、Share Extensionの対応を行うとき、共有データの中に自分自身のBundle Identifierが含まれていないかチェックするしかないかと思います。もし含まれてしまったら、それを完全に消すか、ランダムな文字列で置き換えることをお勧めします。
そして一般ユーザとして、もし本当に自分のインストール済みのアプリをGoogleにバレて欲しくなければ、そもそもGoogle Mapsの共有機能でそのまま対象のアプリに共有せずに、リンクだけコピーして共有したいアプリを立ち上げて直接ペーストするのが一番手っ取り早いでしょう。まあ一番のお勧めはそもそもGoogle Mapsを使わないことかと思います。Googleは既にこれまで何度も個人情報の収集で問題を起こしてきたので、安心して使えるサービスとは言い難いではないかと思います。