Also im Grunde möchte ich Sinch Video in iOS-Anwendung aktivieren.Sinch Video will nicht mit iOS arbeiten (Swift)
Denn ich zu Testzwecken erstellt haben SinchManaevger, die ich instatiate es in AppDelegate Singletons ist:
class SinchManager: NSObject, SINClientDelegate, SINCallClientDelegate {
static let sharedInstance = SinchManager()
var client: SINClient?
func initSinchClientWithUserId(id: String) {
if client == nil {
if case .Authenticated(let currentUser, _) = SessionManager.sharedInstance.state.value {
self.client = Sinch.clientWithApplicationKey("xyz", applicationSecret: "xyz", environmentHost: "sandbox.sinch.com", userId: currentUser.username)
print("sinchClient")
print(client!)
self.client!.delegate = self
self.client!.setSupportCalling(true)
self.client!.enableManagedPushNotifications()
self.client!.start()
self.client!.startListeningOnActiveConnection()
}
}
}
func clientDidStart(client: SINClient!) {
print("clientDidStart")
self.client!.callClient().delegate = self
}
func clientDidStop(client: SINClient!) {
print("clientDidStop")
}
func clientDidFail(client: SINClient!, error: NSError!) {
print("clientDidFail")
}
func client(client: SINCallClient!, didReceiveIncomingCall call: SINCall!) {
print("didReceiveIncomingCall")
let sinchVC = SinchVC(username: currentUser.username)
let sinchNC = DNMMainNC(rootViewController: sinchVC)
sinchVC.call = call
}
}
Und ich habe Sinch Viewcontroller erstellt, die mit dem Benutzernamen initialisiert wird, die aufgerufen wird:
class SinchVC: UIViewController, SINCallDelegate {
private let videoController = SinchManager.sharedInstance.client!.videoController()
private let audioController = SinchManager.sharedInstance.client!.audioController()
private let callClient: SINCallClient
private var call: SINCall!
let username: String
private var mainView: SinchView { return view as! SinchView }
override func loadView() {
view = SinchView()
}
init(username: String) {
self.username = username
self.callClient = SinchManager.sharedInstance.client!.callClient()
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
call.delegate = self
self.mainView.videoView.addSubview(self.videoController.localView())
self.videoController.localView().contentMode = .ScaleToFill
if self.call.direction == SINCallDirection.Incoming {
self.audioController.startPlayingSoundFile(self.pathForSound("incoming.wav") as String, loop: true)
}
if self.call.details.videoOffered {
print("video offered")
self.mainView.videoView.addSubview(self.videoController.localView())
self.videoController.localView().contentMode = .ScaleToFill
}
mainView.videoView.addSubview(self.videoController.localView())
mainView.answerButton.addTarget(self, action: #selector(answer), forControlEvents: .TouchUpInside)
mainView.declineButton.addTarget(self, action: #selector(decline), forControlEvents: .TouchUpInside)
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.audioController.enableSpeaker()
}
func pathForSound(string: String) -> NSString {
let nsSt = NSBundle.mainBundle().resourcePath! as NSString
return nsSt.stringByAppendingPathComponent(string)
}
func answer() {
call.answer()
}
func decline() {
call.hangup()
}
func callDidEstablish(call: SINCall!) {
print("callDidEstablish")
}
func callDidEnd(call: SINCall!) {
print("callDidEnd")
}
func callDidProgress(call: SINCall!) {
print("callDidProgress")
self.audioController.startPlayingSoundFile(self.pathForSound("ringback.wav") as String, loop: true)
}
func callDidAddVideoTrack(call: SINCall!) {
print("callDidAddVideoTrack")
mainView.videoView.addSubview(self.videoController.remoteView())
}
}
Problem ist, wenn ich versuche, mit meiner app nichts von meiner App zu anderem Telefon anrufen passiert (didReceiveIncomingCall Delegatmethode nicht aufgerufen bekommt)
Wenn ich versuche, von meiner App aus die SinchVideo-Beispielanwendung aufzurufen, wird der Videoanruf normal gestartet. Aber wenn ich von der SinchVideo App zu meiner App rufe, passiert nichts in meiner App. Wahrscheinlich habe ich vergessen, Benachrichtigungen hinzuzufügen, um meiner App mitzuteilen, wann der Anruf eingeht. Wenn Sie mir helfen könnten, wäre ich Ihnen sehr dankbar. Danke
EDIT: Ich habe es geschafft, didReceiveIncomingCall arbeiten, aber jetzt call.answer funktioniert nicht. (Nichts passiert, wenn call.answer genannt wird, und ich sehe, dass mein Telefon klingelt)
tou muss Aufruf Eigenschaft aus Delegate-Methode speziell verweisen oder es funktioniert nicht - behoben –
Können Sie den Code bearbeiten für Vollständigkeit mit der Arbeitslösung? Wenn es zu viel Arbeit ist, kann ich es tun und Post als eine Antwort, die Sie akzeptieren. – cjensen
@cjensen Ich habe Post bearbeitet. –