shiguredo / sora-ios-sdk

WebRTC SFU Sora iOS SDK
https://sora-ios-sdk.shiguredo.jp/
Apache License 2.0
41 stars 8 forks source link

プッシュ API 有無について #26

Closed m-yoshimo closed 5 years ago

m-yoshimo commented 5 years ago

マルチストリームで下記のプッシュ API を利用して、ライブビデオチャット中にチャネル参加者全員に任意の情報を通知したいと考えております。 https://sora.shiguredo.jp/doc/API.html#id10

しかし、下記の SDK の実装を見たところ、プッシュ API が iOS SDK では実装されていないように見受けられるのですが、こちら利用は可能でしょうか? https://github.com/shiguredo/sora-ios-sdk/blob/develop/Sora/SignalingMessage.swift#L175

未実装の場合、実装の予定はありますでしょうか?

voluntas commented 5 years ago

@m-yoshimo もともと Sora の HTTP API は「サーバ側」から叩かれる前提の機能となっていることもありクライアント SDK の範囲外となっております。

ただ、 HTTP クライアントから簡単に叩けますので、叩いてみてもらえればと思います。

m-yoshimo commented 5 years ago

@voluntas ご回答ありがとうございます。 大変申し訳ございません。質問内容に不備がございました。

こちら、PC (javascript)、iOS、Android の各クライアントがチャネルに参加している状態で、PC 側 Javascript から push API を叩いて任意の通知を行う予定です。

実際に動かして、javascript の HTTP クライアントから Push API を実行し、他の PC で signaling channel から push が受け取ることは確認できております。

Android ・iOS 共に取得が確認できておらず、Android/iOS でも取得可能なのか確認させて頂いた次第です。

m-yoshimo commented 5 years ago

Android の方は取得が確認できました。iOS はまだ確認できておりません。

szktty commented 5 years ago

@m-yoshimo iOS ではシグナリングの push メッセージをまだ実装していないのですが、 WebSocket のメッセージとして受信することは可能です。 WebSocketChannel のイベントハンドラを利用してシグナリングメッセージを受け取り、お手数ですが JSON 文字列を解析して push メッセージかどうかを判別してください。

以下、実装例です。エラー処理は省略しています。

// PeerChannel -> SignalingChannel -> WebSocketChannel のようにプロパティをたどり、
// メッセージ受信のイベントハンドラをセットします
peerChannel
    .signalingChannel
    .webSocketChannel
    .handlers
    .onMessageHandler = { (message: WebSocketMessage) -> Void in
        switch message {
        case .text(let body):
            // メッセージを JSON 文字列として解析します
            let data = body.data(using: String.Encoding.utf8)!
            let json = try! JSONSerialization.jsonObject(with: data) as! [String: Any]
            if json["type"]! as! String == "push" {
                // push メッセージの操作
                ...
            }
        case .binary(_):
            // Sora のシグナリングメッセージはテキストなので到達しません
            break
        }
    }

push メッセージは次のリリースで対応する予定です。フィードバックありがとうございました。

m-yoshimo commented 5 years ago

@szktty ご回答ありがとうございます。 こちら試してみます。

また、次リリースの方、お待ちしております。

m-yoshimo commented 5 years ago

@szktty 上記の方法を試してみましたが、Push API を使って iOS のクライアントに push message を送ると、下記の Fatal Error でアプリが落ちてしまっています。

Thread 1: Fatal error: not supported decoding 'push'

下記の分岐によって強制的に shutdown されてしまうため、回答頂いた方法を使っても落ちます。 https://github.com/shiguredo/sora-ios-sdk/blob/master/Sora/SignalingMessage.swift#L499

現状、push API で push データを signaling channel に流すと iOS でクラッシュしてしまい、PC や Android でも push API 使った機能をリリースできない状態となってしまっております。

ios-sdk の次リリースはいつ頃実施される予定でしょうか?

voluntas commented 5 years ago

@m-yoshimo こちらの問題は SDK 側のバグで、ご迷惑をおかけしてしまい申し訳ありません。

https://github.com/shiguredo/sora-ios-sdk/tree/feature/push こちらのブランチにて現在修正中です。明日中には修正版をご提供予定です。

おまたせしてしまい申し訳ありません。

m-yoshimo commented 5 years ago

@voluntas ありがとうございます! 非常に早くリリースして頂き、非常に助かります。 リリースされましたら、改めて確認します。

szktty commented 5 years ago

@m-yoshimo プッシュ API に対応した 2.2.1 をリリースしました。

プッシュ API で送信されたメッセージは、他のシグナリングメッセージと同様に SignalingChannel のイベントハンドラで取得できます。メッセージを表すオブジェクトは SignalingPushMessage です。

お手数をおかけしますが、確認のほどよろしくお願いいたします。

今回はご迷惑をおかけしてしまい申し訳ありませんでした。

m-yoshimo commented 5 years ago

@szktty ありがとうございます! 確認いたします。

m-yoshimo commented 5 years ago

@szktty こちら、新しいリリースで問題ないことが確認できました。 また、SignalingPushMessage を受け取れることも確認できました。 ご対応ありがとうございました。

voluntas commented 5 years ago

@m-yoshimo 確認ありがとうございました。今回はご迷惑をおかけし申し訳ありませんでした。