iOS/Android 位置情報の仕様変更の歴史(開発者向け)

位置情報の技術は、Pokemon Go や Googel Map、Uberなどモバイルアプリにとってのコア技術だ。しかし、位置情報はOSのバージョンなどで仕様が頻繁に変わる事もあり、その全体感は正確に把握されていない事も多い。

例えば、開発をしている際に、「位置情報がバックグラウンドで取得できないのは、どのバージョンから?」などで悩んだ事はないだろうか? また、iOSとAndroidの仕様差分とバージョン差分などについて調査していて混乱した事はないだろうか?

この記事では、iOSとAndroidの仕様を横断して、各バージョン毎の、位置情報の制限について全体感とについて整理している。

私は、Android/iOSのモバイルエンジニアとして働いており、位置情報関連の制約について何度も調査している。今回はその経験をもとに、位置情報の制約の決定版として、本記事を作成した。

【iOS/Android】位置情報のバージョン別仕様まとめ(開発者向け)

仕様が頻繁に変わる2つの理由

iOS/Androidの位置情報の仕様が頻繁に変更になるのは、

  • 電力消費が大きい問題
  • プライバシー問題

の、2つの問題にAppleとGoogleが対応してきたからである。次章から、仕様変更の歴史を説明するが、これらは全て上記問題に対応してきた歴史である。

今後、モバイルデバイスのバッテリーが改善してくれば、電力消費的な問題は解決するかもしれないが、プライバシー問題については、今後も引き続き、頻繁な仕様変更が予想される。

仕様変更の歴史

啓明期(2008-2013)

2008年

  • iOS3
    • iPhone3Gが日本に初上陸。(GPS内蔵)
    • 当時の位置情報の権限付与は、「許可する」「許可しない」の2択のダイアログしかない。

2009年

  • Android1.5
    • Android端末が日本に初上陸。
    • 当時の位置情報の権限付与方法は、インストール時に一括で付与する方式。インストール後に個別にOFFに切り替える事はできなかった。

形成期(2014-2018)

2014年

  • iOS8
    • ダイアログの選択肢がオプション的に増えた。iOS7以前は「許可する」「許可しない」の2択だったが、「使用中のみ許可」「常に許可」「許可しない」を表示する事も可能になる。
    • 位置情報の使用目的を記載するのが必須になる。

2015年

  • Android6.0
    • 「ランタイムパーミッション」つまりダイアログで位置情報を許可する方式に変更。
    • ダイアログの選択肢は「許可」「許可しない」の2つ。ダイアログを繰り返し表示しない「許可しない(今後表示しない)」というオプションも追加。
    • 「アプリの権限」ページで個別に権限のON/OFFが設定可能になる。
    • 位置情報の使用目的を、ランタイムパーミッション表示前に表示する事が推奨された。(実装されているアプリは少ない)
    • Dozeモードが搭載される。バックグラウンドでアプリのネットワーク通信やCPU使用などが制限されるようになり、位置情報をバックグラウンドでサーバ送信する事は難しくなる。

2017年

  • iOS11
    • ダイアログに「使用中のみ許可」の選択肢が必須化。「常に許可」という選択肢のみを提供する事ができなくなった。
    • バックグランド中に位置情報を使用した場合、 常に画面上部に青いバーが表示されるようになる。
  • Android8.0
    • バックグラウンドでの位置情報受信は1 時間に数回だけに変更になり、バックグラウンドでの位置情報取得は困難になる。
    • フォアグラウンドサービスという通知バーに表示される機能を使うと、バックグラウンド扱いにならないので、ナビゲーション系のアプリはこの機能を使い始める。

2018年

  • Android9.0
    • Wi-Fi RTT による屋内位置測定をサポート。

厳格期(2019-現在)

2019年

  • iOS13
    • ダイアログから「常に許可」の選択肢がなくなり、新たに3つの権限に変更。OSが自動的に「使用中のみ許可」のユーザに対して「常に許可に変更する」に変更するか聞く仕様に変更。
    • バックグラウンドの位置情報取得がユーザに積極的に通知され、オフにするオプションが提供される。
    • 「常に許可」がダイアログから削除された事と、バックグラウンドでの位置情報取得をOFFにするオプションをiOSが適宜出すため、バックグラウンドで継続的に位置情報を取得するのが困難になる。
  • Android10
    • 位置情報ダイアログの選択肢が変更になる。「許可」と「拒否」の2つだったのが、「常に許可」「アプリが使用中の場合のみ許可」「拒否」の3つに変更。

2020年

  • iOS14
    • ダイアログに「正確な位置情報」オプションが追加。「正確な位置情報」がOFFの場合にはジオフェンスが無効になる。
    • AppClipsには、「1度だけ許可」と「明日まで許可」の選択肢が提供。
  • Android11
    • 位置情報ダイアログの選択肢に「今回のみ」許可という選択肢が追加。
    • 位置情報ダイアログの選択肢から「常に許可」が削除される。(「アプリの権限」ページで個別に設定してもらう必要がある)
    • 「常に許可」がダイアログから削除される事で、バックグラウンドでの位置情報取得が困難になる。

2021年

  • Google Play ストア
    • 2021/3/29より、バックグラウンドで位置情報にアクセスする既存のアプリ(初公開が 2020 年 4 月 16 日以前のもの)はGoogleポリシーを遵守しているかの承認を受ける必要がある。
      ここについては記事を書いたのでそちらを参照してください。

まとめ

位置情報は、モバイルアプリにとってのコア技術だが、全体感を正確に把握するのは難しい。この記事を読んで、少しでもその歴史と全体感について理解が深まってくれたら嬉しい。

ABOUT US

「Deepな日常」管理人
30歳のWebエンジニアです。 Webサービスやモバイルアプリを開発しています。 自分の中身を色々書いて空にして、新たに学びを深めていこうと思ってブログを書いています。 開発実績 ・過去問スタジアム ・matomely 技術スタック Rails/Android/iOS/Flutter/Ionic/Kotlin/Java/Swift/Objective-c/Dart/TypeScript/C++/Jenkins/AWS/Firebase/etc...