ボクココ

個人開発に関するテックブログ

Twilio VoIP iOS SDK への入門

ども、@kimihom です。

f:id:cevid_cpp:20210228144914j:plain

Twilio には iOS で電話ができる iOS SDK が存在する。これの魅力と触り始めについて記しておく。

Twilio VoIP iOS SDK 概要

公式サイトは以下にある。

iOS SDK - Twilio

では上記 Twilio VoIP iOS SDK を使うと何が嬉しいのか。大きな特徴として 2つあると考えている。

  • iPhone で 電話SIM を持たずとも、データSIM だけで Twilio 電話ができる
  • 電話着信時に、iPhone がスリープでも 電話着信を受け取って通話ができる

1つ目の項目は、ほとんどの人は何でそんなことができるか疑問に思うことだろう。090,080 などの電話番号を持つ電話 SIM と契約し、スマホ内にある公式の電話アプリを使って電話するもんだと思っている。この電話SIM を持たなくても、自分で電話番号(050, 0120, 0800)を買って、その電話番号で電話が可能だ。不要になったら捨てることも簡単にできる。

エンジニアにとっては特に2つ目のはかなり大きな特徴(強み)だと考える。電話なら当たり前のことなんだけど、着信が来たら iPhone がスリープしてても着信が来たことを通知し、電話にすぐ出られる仕組みが必要だ。この通知は、普通の iPhone アプリからの通知だけでは実装ができない。新しく出た iOS の CallKit と呼ばれるものを使えば、実現が可能である。

iPhone ブラウザ Chrome の JavaScript WebRTC で通話することとの違い

現在の iPhone では、ブラウザ(Safari か Chrome) で、JavaScript の Twilio Client SDK を使って実装が可能である。発信する電話番号をブラウザ上で入力し、相手に電話をかけることができる。

発信だけならいいんだけど、ブラウザ版 の Twilio Client で電話の着信を受けるには、常にブラウザでTwilio Client を使った特定のページを開き続ける必要がある。 当然ながら、iPhone ユーザーは他のアプリも使っているので、特定の Web ページだけを開き続けるなんてことはできないだろう。だからこそ、iOS 専用の Twilio VoIP iOS SDK を使う必要があるわけである。

実装

まずは、Twilio の提供するサンプルアプリを動かしてみることから始まる。

はじめよう - Twilio

さっとみてもらえればわかる通り、かなりの長い手順が必要だ。最終的には実機 iPhone を使って "VoIP Service Certificate" で認証を得た サンプルアプリで電話が必要だ。単に iPhone アプリを作るってだけでなく、iPhone からのHTTPリクエストで Twilio トークンを返す Web サーバーの用意実装が必要である。

なかなか高い壁だ。でもその高い壁を乗り越えた先に得られるメリットは大きい。

独自アプリに組み込む

大体実装の流れがわかったところで、実際に自分の作っている iPhone アプリに Twilio Client iOS SDK を組み込むことになる。

Twilio のページ内では、入れる方法が 4つ紹介されている

  • Swift Package Manager
  • CocoaPods
  • 手動インストール
  • 静的ライブラリー

数年前までは iPhone アプリ開発で入れるライブラリ管理は CocoaPods が一般的であったろう。情報の多さからも 最初 CocoaPods で入れようとしたら、Twilio Client iOS SDK が全く動かなかった。framework not found TwilioVoice などのエラーが出るだろう。

CocoaPods の次に出てきたのが Carthage というものらしい。しかし、現在の Twilio Client iOS SDK では Carthage は未サポートのようである。

Swift Package Manager は新しいライブラリの取り入れ方のようだけど、手順が無駄に複雑で、現状の Swift Package Manager でバイナリフレームワークである Twilio Client iOS SDK を入れることは危険だろう。

結局、手動インストールで対応することで、無事に Twilio Client iOS SDKを入れることができた。

終わりに

本記事はまだ Twilio Client iOS SDK を取り入れただけの状態である。こっから SDK の内容を詳しく理解し、プログラミングを進めていく必要がある。

でも組み込むことさえできれば、実装は サンプルアプリを読みながら取り入れていけばいいだけなので、大きなハードルは少ないと信じたい。

未来の電話の世界を実現すべく、引き続きプログラミングに注いでいこう。