スポンサーリンク

Xcode7 + iOS9で広告が表示されない(HTTP通信できない)エラーの解決

Xcode7 + iOS9端末だと広告がでないエラー

App Transport Security has blocked

iOS9のiPhone6でアプリの動作確認をしていると、広告がでていないことに気付きました。

焦ってログを見るとこんなエラーが

2015-09-28 10:26:43.461 xxx[285:18772] 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.

広告SDKのhttp通信がシャットアウトされたというログです。

なので広告を取得できず、表示されていません。

エラーの解決方法(邪道)

ATSを無効にする

これ、対処法としては邪道です(後述)。非常によろしくないんですが…。

Xcodeのプロジェクトから、

info.plist』を開き、『Add Row』で、『NSAppTransportSecurity』を追加。

Typeは『Array』として、子要素(『+』で追加、Typeは『String』)に、

『NSAllowsArbitraryLoads』 を追加。

Typeは『Boolean』とし、『YES』を設定すればOKです!

どういうエラーか

iOS9よりATS(App Transport Security)という機能が組み込まれ、

http通信は許可されなくなりました。(httpsで通信しなさいということ)

普通はiOS9に対応した最新SDKを組み込めばいいのですが、

あまり積極的でない提供者さんの場合はSDKが更新されていなかったりします。。。

邪道な理由

ATSをOFFにしているからです(ΦωΦ)

完全にAppleさんは非推奨なやり方ですので、自己責任でお願いします。

(iTunesに審査提出してみたところ、提出まではOKでした。リジェクトあり得ますが…)

正当の対処法としては、ATSの例外としてドメインを指定できるので、

SDKが通信するドメインさえわかれば登録するのが筋なんですが。

わからない場合はもう全部切るという方向で…いくしかないじゃないか…。

というかこれってSSPの事業者さんが一番大変そう。

各広告会社さんがHTTPS通信を提供しないと対応が完了しないですよね。

info.plistのソース版

ATSをOFF

<key>NSAppTransportSecurity</key>
<dict>
 <key>NSAllowsArbitraryLoads</key>
 <true/>
</dict>

ATSに例外ドメイン(google.co.jpとサブドメイン)を指定

<key>NSAppTransportSecurity</key>
<dict>
 <key>NSExceptionDomains</key>
 <dict>
  <key>google.co.jp</key>
  <dict>
   <key>NSExceptionRequiresForwardSecrecy</key>
   <false/>
   <key>NSIncludesSubdomains</key>
   <true/>
  </dict>
 </dict>
</dict>

他にも指定できるオプションはいろいろあります。

NSIncludesSubdomains
NSTemporaryExceptionMinimumTLSVersion
NSRequiresCertificateTransparency
NSTemporaryExceptionRequiresForwardSecrecy
NSTemporaryThirdPartyExceptionAllowsInsecureHTTPLoads
NSTemporaryThirdPartyExceptionMinimumTLSVersion
NSTemporaryThirdPartyExceptionRequiresForwardSecrecy

ブログランキング、にほんブログ村
ブログランキング・にほんブログ村へ
スポンサーリンク

フォローする

スポンサーリンク