この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
1 はじめに
いよいよ、ATSが審査の対象となるようですが、皆様のアプリのATS対応は、進んでいるでしょうか。
今回は、https以外のURL遷移で、Safariに制御を渡してしまう、最も手抜きなATS対応を試してみました。
2 テストプログラム
当初、UIWebViewを指定したURLに遷移させる簡単なサンプルアプリを作成します。
#pragma Action
- (IBAction)tapGoButton:(id)sender {
// GOボタンをタップすれうと、入力したURLに遷移する
NSURL *url = [NSURL URLWithString:self.urlTextField.text];
NSURLRequest *req = [NSURLRequest requestWithURL:url];
[self.webView loadRequest:req];
}
#pragma UIWebViewDelegate
// 読み込み完了
- (void)webViewDidFinishLoad:(UIWebView *)webView
{
if (self.webView.loading)
{
return;
}
// 遷移後のURLを表示する
_urlTextField.text = [webView stringByEvaluatingJavaScriptFromString:@"document.URL"];
}
// 読み込み失敗
- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
if (self.webView.loading)
{
return;
}
// 失敗したことを表示する
_urlTextField.text = @"読み込み失敗";
}
3 ATS無効(非推奨)の動作確認
当初、下記の設定をinfo.plistに追加して、ATS無効(非推奨)の状態で動作を確認してみます。
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
httpsのURL( https://www.google.com )は、正常に表示されます。
また、httpのURL( http://www.tenki.jp/ )も表示できています。
4 ATS有効の動作確認
続いて、先にinfo.plistに追加した設定を削除し、ATSが有効な状態にもどします。
そうすると、httpsのURL( https://www.google.com )は、正常に表示されすが、httpのURL( http://www.tenki.jp/ )は、表示できません。
この時、Xcodeでは、次のようなログが出力されています。
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
5 Safari起動
ATSを有効にすると、このようにhttps以外へのアクセスは、物静かに失敗します。
しかし、ユーザにとっては、リンク先がhttpsであるかどうかは、通常意識されていないため、もしかすると非常にUXを害する可能性もあると思います。 そこで、https以外のURL遷移があった場合は、Safariを起動して、とりあえず、そのページを表示するようにしてみました。
// 遷移開始前
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
if ([request.URL.description hasPrefix:@"https:"])
{
return true;
}
[[UIApplication sharedApplication] openURL: [request URL]];
return false;
}
UIWebViewから出てしまうので、アプリとして完全な制御はできなくなりますが、画面を見ると分かるように、iOS9では、Safariの一番上に、Back to アプリ名のボタンが有りますので、一応アプリに戻るためのUIもあると言えるかも知れません。
6 最後に
単純にSafariを起動しただけです。これでATS対応というのは、おこがましい話ですが、最後の最後にこれを実装しておくことで、最悪、遷移ができなかった時のUXが保たれるかも知れません。