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


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

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といろんなユースケースと向き合う必要があるので気合い入れていこうな。