Help us understand the problem. What is going on with this article?

SkyWayでiOS/Androidアプリを作るときの勘所

メリークリスマス :santa: (まだ早い)

SkyWayでアプリを作ろう

iOS/AndroidのSDKが提供されているので作れはしますが、抑えるところ抑えておかないとユースケースによってはいくつか困るケースが出てきます。最近質問されたのでまとめておきます。

各種音声の入出力先のハンドリング

  • Line
  • Bluetooth
  • デバイス

のハンドリングを自分でする必要があります。また抜き先に関しても同様。
iOSであればAVAudioSessionが握っている、AndroidであればAudioDeviceInfoでとれるので、必要な入力元と出力先の検知と切り替えは自前で実装しましょう。

この際にAndroidでは isWiredHeadsetOnのようなメソッドは非推奨。自前でハンドリングするためAudioSessionの管理には注意しましょう。

バックグラウンドでの処理

Androidは端末によりますが、iOSではUIBackgroundModes - audioを許可してください。
バックグラウンドへの遷移時はどちらもカメラは無効になるためremoteへは黒い画面が表示されます。
上記設定をしておけば音声はつなぎ続けることができます。

エラーハンドリング

https://webrtc.ecl.ntt.com/en/ios-reference/a00053_source.html

     SKW_PEER_ERR_NO_ERROR = 0,
     SKW_PEER_ERR_BROWSER_INCOMPATIBLE = -1,
     SKW_PEER_ERR_DISCONNECTED = -2,
     SKW_PEER_ERR_INVALID_ID = -3,
     SKW_PEER_ERR_INVALID_KEY = -4,
     SKW_PEER_ERR_NETWORK = -5,
     SKW_PEER_ERR_PEER_UNAVAILABLE = -6,
     SKW_PEER_ERR_SSL_UNAVAILABLE = -7,
     SKW_PEER_ERR_SERVER_ERROR = -8,
     SKW_PEER_ERR_SOCKET_ERROR = -9,
     SKW_PEER_ERR_SOCKET_CLOSED = -10,
     SKW_PEER_ERR_UNAVAILABLE_ID = -11,
     SKW_PEER_ERR_AUTHENTICATION = -12,
     SKW_PEER_ERR_WEBRTC = -20,
     SKW_PEER_ERR_ROOM_ERROR = -30,
     SKW_PEER_ERR_UNKNOWN = - 9999,

Peerイベントだけでもこれだけあり、なおかつ頻度としてもwarningレベルでリトライすればいいケースも多いです。websocketが動く関係上、リトライの概念は必須ですがユースケースによるので最初はエラーきたらとりあえずリトライかけておきましょう。

フロントのエラーイベントは運用上解析のために保存しておきたいですが、このエラーは結構な頻度で投げられてしまうので、何も考えずにストアしていくとだいぶなボリュームになるので注意。

ネットワークの切断・切り替え

これはちょっと調べきれてないですが、接続時間とかが課金系と関わるユースケースなら考慮が必要で、wifi/3Gの切り替えみたいのが起きるケースは自分でハンドリングするのがベターです。

両OSでそれぞれ接続が3GかWifiかくらいはとれるので、自前でやること。

相手のストリームを確認してカメラかどうか見る

これはAPIがないので、自前でやるのが良いです。
真っ黒になるのでpixelを見ましょう。

サポートデバイス

どうしても限界はあります。iOSでは問題ないですが、やはりAndroidでよくわからない動きをすることがあり・・・全部の網羅は厳しいかと思います。AndroidだとCベースでのライブラリ(*.so)を乗せる必要がありABIやCPUアーキテクチャに突っ込む必要があったりします。
CPUアーキテクチャはスマタブ等で確認することができます。
まぁ全体の90%くらいは大丈夫な印象です。最新版のSDKのサポートは5系以上です。

電池と通信量

これはもう食います。なおかつ通信方式(p2p, sft)にも依存するし、そもそも並行して何を立ち上げているかなどなど、外部要因が多いので明記しないほうが良いと思います。

callOptionで帯域指定だけでも入れておきましょう。

まとめ

マジですぐ作れるけど、マジで安定運用まではWebRTCといろんなユースケースと向き合う必要があるので気合い入れていこうな。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした