1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【swift5】APIを叩くときは「HTTP」を「HTTPS」に直しましょう

Last updated at Posted at 2020-11-28

※本記事が筆者の初投稿です! 優しい目で参考程度にご活用ください!

#はじめに
なーんにも考えずに、AlamoFireでAPIを叩いたりなどでHTTP通信をすると、
「エラーが出る」とか「想定より少ないデータしか取れない」
って問題が発生したりします。

HTTP通信は暗号化されていない安全性の低い通信のため、
appleがデフォルトでブロックさせています。

この状態でrequestを出しても、セキュリティでブロックされてる状態なので、
responseは返ってきません。
キャッチボールしようとしてるのに、二人の間に壁があるようなものです。
これでは投げても相手に届かないので投げ返してくれませんね。

壁に邪魔されない形式の通信に変更しましょう。

#解決策

例えばAPIを使おうとして、サイトに載ってるサンプルクエリをコピペしてみます。
そうするとありがちなのが以下みたいなURL。
http://webservice.recruit.co.jp/hotpepper/gourmet/v1/?key=[APIキー]&large_area=Z011」

このデフォルトで文頭が「http://」になってるのが引っかかりポイント。
単純に「http://」を「https://」に直してあげましょう。

これで壁に邪魔されない、安全性の高い通信形式に変更できました。

#それでもダメな場合は
API側が、http通信しか対応していない場合があります。
「httpsに直してもダメだ〜」って時は、そもそもの壁を取っ払ってやりましょう。

###①ATSを無効化する (簡易版)
下記URLの「info.plistの編集」を参照してください。
【swift】XcodeでiOSアプリのhttp通信を許可する方法

Info.plist に飛んで、ATSを無効化しましょう。
スクリーンショット 2020-11-28 18.49.55.png
ただ、上記の方法は全てのHTTP通信を許可しているため、安全性に欠けます。
審査に提出するとなると、apple様はこの方法では通してくれません。

特定のボール(ドメイン)だけ、壁(ATS)を通り抜けるようにしましょう。

###②特定のドメインのみ許可する (発展版)
下記URLを参照して、特定のドメインだけ許可してあげましょう。
お菓子検索アプリ:iOS10でのATS設定について

これで指定したボール(ドメイン)だけは通り抜けられるようになりました。

ただATSという壁を設けている時点で、そもそもHTTP通信をappleは推奨していないことには留意してください。
2020年11月現在でも審査に通るかは未検証です。

##終わりに
何がハマったって、これやらなくても「少量ならレスポンスが返ってきた時があった」のが、
1番のハマり&誤認ポイントだった。

「無制限にデータ受け取りたいのに、取得データが少ない」とか、
「10件くらいの少量なら大丈夫だけど、100件とか多量のデータを受け取ろうとするとエラー吐く」
とかいう方は「http通信になっていないか」、もしくは「ATSはどうなっているか」を確認してみてください。

自分と同じくらいの初学者さんの助けになれれば。

###参考文献

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?