.-- --

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 comment(-) trackback(-)
.06 2013

GoogleMaps(Web)でピンチアクションが効かない!

ご無沙汰しております。
Tasakiです。

恐ろしい程の猛暑も過ぎ去り、一気に秋がやって来たという感じですね。
来週にはAppleの発表会も迫っており、季節の変化をさらに感じさせます。

さて、今回は表題の通り、web版のGoogleMapsを使う際のお話です。
テーマ的にはニッチであまり参考にならないのではと思うのですが、自分がweb上で探しきれなかったので取り上げてみることにします。
そもそもWebのGoogleMapsをアプリで使うというのはどういうことか、と言いますと、「UIWebViewを使用してWebページを表示する」ということですね。単にそのページがGoogleMapsを組み込んでいるだけというわけです。

GoogleMapsネイティブSDKやMapKitがある中でこれをアプリ内に組み込むという機会もあまり多くないのではと感じる一方で、クロスプラットフォームで審査の影響を受けずに素早く変更が可能という点を考えるとなかなか使いどころはありそうにも思います。

で、このマップを表示するWebビューを作って組み込むだけならタイトルのような問題は起こりません。
いろいろな実装を加えていく中で気づいたら発生していた問題でした。

症状



GoogleMaps上でピンチアクションができない
タップやダブルタップは動作する

検証 1: Webビューのマルチタッチが効いていないか確かめる



まずはWebビューのマルチタッチジェスチャが有効になっていないのではないか、と疑ってみました。
しかし、これはすぐに違うことが分かりました。

なぜなら、Webビューで表示するURLを画像ファイルのものに置き換えたところ、その画像はきちんと拡大縮小がされたからです。

検証 2: Webビューを管理しているビューコントローラに問題がある?



次に、このWebビューをそのビューを表示するだけのサンプルプログラム上に持っていき、そこで動かしてみました。
すると、そのプログラム上では、きちんとピンチができるではありませんか。


ここで、どうやらビューコントローラの処理のどこかに、原因がありそうだと言う見当がつきました。

検証 3: 地道な解析作業...orz



ここからは地道にコードのどの部分が問題となっているのか、機能単位で追ってみることにしました。
厄介なことに、このビューコントローラはセンサーをふんだんに使用していて、おまけにタイマーやカメラが動いたりもしていました。
どれも怪しい部分ばかりでしたがそれらとの関係は見いだせませんでした。

検証終了: ついに発見!



検証が終わる頃には、ビューコントローラはほぼ骨抜き状態で、webビューを表示するだけのものになっていました。
それでも原因が特定できず、最後に行き着いたのがユーザーエージェントを書き換えるための処理でした。

そして、この処理を無効化したとき、ついに原因が特定できたのです。

結論: ユーザーエージェントを変更する場合は慎重に!



これで分かったのは、GoogleMapsはユーザーエージェントを見て、イベントハンドリングを変えているのだということでした。
ちなみにUIWebViewのデフォルトのユーザーエージェントの中に「AppleWebKit/xxx.yy」(x, yは数字)という部分があるのですが、独自に作成していたユーザーエージェントにこの文字列を付加すると見事ピンチが効くようになりました。GoogleMapsにiOS端末だと分かってもらえた瞬間です。
(もちろん、これは現在の仕様で将来的に変更される可能性もありますので、動作保証はできません。)


ということで、Webビューでユーザーエージェントを独自に設定する場合は、こういった外部サービスが絡んでくると結構厄介な問題になったりしそうなので、気をつけた方がよさそうです。


そもそも、なぜユーザーエージェントをいじったのかって?それは...ナイショです。

関連記事
スポンサーサイト

Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/276-88b1b74f

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。