2016-12-12 7 views
0

Wir erstellen eine Webanwendung mit dem Skype Web SDK (https://msdn.microsoft.com/en-us/skype/websdk/docs/skypewebsdk). Wir verwenden sowohl die Audio- als auch die IM-Fähigkeit, um mit anderen Parteien verbunden zu werden.Lassen Sie eine Konversation mit Skype Web SDK auf Seite neu laden

Zur Zeit haben wir folgendes Problem: Wenn unsere Anwendung mit einer anderen Partei kommuniziert (z. B. mit einem Skype for Business Desktop-Client) und der Benutzer die Seite verlässt oder neu lädt, wird die andere Partei nicht benachrichtigt über den linken Benutzer.

Für Audiogespräche ergibt sich folgendes Ergebnis: Die andere Partei ist noch im Gespräch und der einzige Hinweis auf das Verlassen ist, dass die Gegenstelle nichts hören kann.

Für IM-Konversationen ergibt sich folgendes Ergebnis: Wenn die andere Partei in dieser Konversation eine Sofortnachricht sendet, erhält sie die Benachrichtigung, dass die Nachricht nicht zugestellt werden konnte.

Wir haben versucht, die Konversation vor dem Entladen der Seite mit dem onbeforeunload-Ereignis zu verlassen. Der Rückruf wird sowohl in IE 11 als auch in Chrome ausgeführt, aber nur in Chrome verlässt der Benutzer die Unterhaltung tatsächlich (getestet mit IM-Konversation, da Audio/Video in Chrome nicht unterstützt wird).

Da wir uns auf die Audiofunktionen verlassen, können wir nicht einfach auf Chrome umstellen. Gibt es eine Möglichkeit, sicherzustellen, dass die Konversationen auf der Seite in Internet Explorer neu geladen/verlassen werden?

Antwort

0

Das Problem mit dem, was Sie versuchen, ist, dass das (on) beforeunload -Ereignis nicht darauf wartet, dass asynchrone Methoden abgeschlossen werden, sodass Sie nicht garantieren können, dass leave() ausgeführt wird oder die innere Aktion zum Entfernen der Konversation der conversationsManager. Ich würde einen ähnlichen Ansatz wie die folgenden Frage vorschlagen - onbeforeunload confirmation screen customization oder beforeunload

Was Sie wollen, um den Benutzer in einen Zustand versetzt zu tun, wo der Bedarf mit einem Dialog zu interagieren, die möglicherweise genug Zyklen geben (aber auch nicht garantiert) zu verlasse das Gespräch. In Ihrem Fall könnte es in etwa wie folgt aussehen:

window.onbeforeunload = function(e) { 
    // track if a conversation is live 
    if (_inActiveConversation) { 
     // conversation is the conversation we're currently in 
     conversation.leave().then(function() { 
      client.conversationsManager.conversations.remove(conversation); 
     }); 

     var msg = 'Cleaning up active conversations...'; 
     e.returnValue = msg; 
     return msg; 
    } 
}; 

Was sollten Sie auch ist verstehen, dass schließlich der Server-Seite, dass die Benutzer aus dem Gespräch entfernen wird, weil die Anwendung nicht mehr eingehende Ereignisse zu verarbeiten. So ist das oben genannte ein bestes Bemühung, um Ressourcen zu bereinigen, die schließlich zurückgefordert werden.

Sie könnten auch versuchen, eine SignOut-Anfrage auf der signInManager, wie der Server Ressourcen auf der Serverseite für diese Anwendung bereinigen sollte.

window.onbeforeunload = function() { 
    ... 
    _client.signInManager.signOut(); 
    ... 
}; 
+0

Danke für Ihre Antwort! Es sieht so aus, als würde der IE in onbeforeunload überhaupt keine async-Callbacks ausführen (im Gegensatz zu Chrome habe ich dies mit einem Ajax-Aufruf in onforefeunload getestet), selbst mit der Problemumgehung. Ich denke, da das Skype Web SDK auf diese asynchronen Callbacks angewiesen ist, um eine Konversation zu stoppen/zu verlassen, ist es nicht möglich, die Konversation auf eine ungezwungene Weise zu beenden. Kennen Sie eine Möglichkeit, das SDK zu zwingen, die Konversation zu beenden, ohne intern auf etwas zu warten? Leider dauert die Server-Seite viel zu lange, um zu erkennen, dass der Client weg ist (Sie haben recht, es überprüft dies). – jfisch

+0

Ich habe eine robustere Option onbeforeunload hinzugefügt, da es anscheinend nicht in allen Fällen relevant ist, nur eine String-Nachricht zurückzugeben. Ich habe auch die Option hinzugefügt, signOut auf dem signInManager aufzurufen, da dies ebenfalls eine Bereinigung auslösen würde. Ohne irgendeine Form von Verzögerung in onbeforeunload hoffen Sie, dass der Anruf vor dem Entladen beendet wurde. – ShelbyZ

+0

In meinen Tests hat IE nichts ausgeführt, während die Leave-or-Stay-Box angezeigt wurde. Ich habe auch die Ausführung von AJAX-Anfragen getestet. Es stellte sich heraus, dass eine Anfrage gesendet wurde (auch ohne die Leave-or-Stay-Box), die Callbacks jedoch nie ausgeführt wurden. Denkst du, es wäre möglich, eine einfache AJAX-Anfrage an UCWA zu stellen, um die Konversation zu löschen? – jfisch

Verwandte Themen