iOS10 の Safari は 完全な HTTPS 通信時しか現在地情報を取得できない

[追記]
HTTP で geolocation の位置情報が取得できないのは、ブラウザの仕様みたいですね。
iphone 以外の chrome では既にその仕様になっているようです。

ios10 safari がその仕様に沿うようになったということだと思います。


Google Maps Geocoding API を使って現在地からスポットを探す機能を実装しています。

上記APIには、現在地の緯度経度を取得する
navigator.geolocation.getCurrentPosition(successCallback(), errorCallback())
という関数が用意されています。
この関数は、位置情報取得に成功した場合に第一引数を、失敗した場合に第二引数をコールバックして実行します。

iOS10 にアップデートしたテスト機で API を触っていると、エラーコード "POSITION_UNAVAILABLE" で失敗する現象に出くわしました。

原因は、HTTPS(SSL)通信が完全では無かったことです。

  • HTTPで読み込んでいるリソース(画像/広告)があった
  • 開発環境で証明書が効いてなかった

ATSによってアプリがHTTPS必須になることは警戒していましたが、
今後、広い分野でHTTPSの制約が出てきそうですね。
今秋までにフルSSLを決意した一日でした。

※9月7日にiphone7が発表されるっぽくて、これがiOS10搭載で発売されるみたいですね。

-etc