Googleのサービスは、ずっと使っていてGmailも本当に良く使っています。
iPhoneではGmailがメインのメーラーで、毎日欠かさず使っています。
そのGmailアプリですが、URLをタップしてリンク先へ飛ぶとChromeが開くんですね。
ここが少し引っかかっているのです。最近。
Gmail: Google のメール
カテゴリ: 仕事効率化
価格: 無料
Chromeはメチャメチャ好き
もともと、ぼくはMacのブラウザはChrome一択です。
というのも、バージョンアップも積極的で速度も十分で、プラグイン周りも充実しているというのが大きな理由です。Chromeの拡張機能ではセキュリティリスクも少なからずあるようですが、それは置いておくとして。
Chrome拡張機能の「アクセス許可」をそこまで気にしなくていい理由 : ライフハッカー[日本版]
今までも、FirefoxとChromeを併用したりもしていましたが、結局Chromeがメインブラウザになってしまいました。(昔、FirefoxではPrismでWebアプリをローカルアプリにするのがお気に入りでした。)
SafariはRetinaのMacBook Proを購入した当初に対応ブラウザがなかったので久しぶりに使いましたが、速度もよかったし、ぼくにとって必要な拡張機能はSafariでも使えたのでそれからしばらくは、結構気に入って使っていました。
でも、ChromeのカナリヤバージョンでRetinaに対応したので、この時もChromeと併用という感じでした。
それぐらいChromeは使い続けているのですが、iOSではSafariの方が好きです。
特にiOS7になってからは、スワイプで戻れる動作をはじめ、総合的に使いやすくなったと感じておりほとんどiOSのChromeは使わなくなりました。
iOSのGmailだとChromeが開く
で、話を戻すとぼくのiOSのメインのメーラーはGmailなので、メール内のURLをタップすると標準ではChromeが起動します。
これはこれで、問題はないのですがパスワードやログインしている状況などからiOSのメインブラウザであるSafariを開く方が心地よい場面が多くなってきました。
それをChromeをなんとか実現できないものかと思っていたのですが、アプリ内ブラウザかChromeの2択だけのようです。
一応解決策があった??
アプリを作って、GoogleChromeのURLスキームを乗っ取れば一応Safariを起動できました。
方法は、簡単でURLスキームの設定をChromeと一緒にするだけです。
googlechrome-x-callback
とgooglechrome
を設定しておきましょう。(Gmailアプリからだけであれば前者だけでよいかも知れません。)
このあたり
で仕様を調べつつ、URLだけ抽出してSafariを起動するだけのコードを書きました。
Opening links in Chrome for iOS – Google Chrome Mobile — Google Developers
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
NSDictionary *parsedQuery = [self parseQueryString:url.query];
NSString *urlStrings = parsedQuery[@"url"];
NSURL *safariURL = [NSURL URLWithString:urlStrings];
if ([[UIApplication sharedApplication] canOpenURL:safariURL]) {
[[UIApplication sharedApplication] openURL:safariURL];
}
return YES;
}
- (NSDictionary *)parseQueryString:(NSString *)query {
NSMutableDictionary *dict = [NSMutableDictionary new];
NSArray *pairs = [query componentsSeparatedByString:@"&"];
for (NSString *pair in pairs) {
NSArray *elements = [pair componentsSeparatedByString:@"="];
if (elements.count == 2) {
NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *value = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
dict[key] = value;
}
}
return dict;
}
これをAppDelegateに貼り付けるだけでOKです。
結果
URLスキームを読み込んで起動するまで、かなり時間がかかるのがネックです。
iOS7になってからURLスキームからの起動時間が長いような気がする。
別のアイデアじゃないと解決とは言えませんね、これじゃあ。