メリークリスマス (まだ早い)
SkyWayでアプリを作ろう
iOS/AndroidのSDKが提供されているので作れはしますが、抑えるところ抑えておかないとユースケースによってはいくつか困るケースが出てきます。最近質問されたのでまとめておきます。
各種音声の入出力先のハンドリング
- Line
- Bluetooth
- デバイス
のハンドリングを自分でする必要があります。また抜き先に関しても同様。
iOSであればAVAudioSession
が握っている、AndroidであればAudioDeviceInfo
でとれるので、必要な入力元と出力先の検知と切り替えは自前で実装しましょう。
この際にAndroidでは isWiredHeadsetOnのようなメソッドは非推奨。自前でハンドリングするためAudioSessionの管理には注意しましょう。
バックグラウンドでの処理
Androidは端末によりますが、iOSではUIBackgroundModes - audio
を許可してください。
バックグラウンドへの遷移時はどちらもカメラは無効になるためremoteへは黒い画面が表示されます。
上記設定をしておけば音声はつなぎ続けることができます。
エラーハンドリング
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といろんなユースケースと向き合う必要があるので気合い入れていこうな。