Solución:
No necesita EMP-Connector si está utilizando lwc. Salesforce tiene una lightning-emp-api
componente base para él (https://developer.salesforce.com/docs/component-library/bundle/lightning:empApi).
El módulo lightning / empApi utiliza una conexión CometD compartida.
Puede utilizar las funciones proporcionadas desde el módulo
import { subscribe, unsubscribe, onError, setDebugFlag, isEmpEnabled } from 'lightning/empApi';
Actualizar
Tiene razón en que para las comunidades este componente no es compatible.Sigo sugiriendo que lo pruebes porque lo tengo funcionando al menos para el componente aura en el constructor de la comunidad Lightning usando emp api. No he probado el lwc.
Además, es posible que los temas de empuje no sean compatibles, pero los eventos de plataforma sí son compatibles con las comunidades Lightning.
Uno puede diseñar completamente el componente emp api con un componente personalizado porque, bajo el capó, usa la biblioteca cometd js.
Aquí hay un código de muestra para comenzar
NOTA – He usado la versión 3.1.1 de aquí. Puede extraer el archivo y, en la carpeta común, simplemente descargue el archivo comted.js para usarlo en un recurso estático.
También cargué el archivo cometd.js que he usado para probar. Puedes obtenerlo aqui
Aquí está el código de muestra para comenzar
<template>
<div>Streaming Component</div>
</template>
El controlador JS es
import { LightningElement, wire, track } from "lwc";
import { loadScript } from "lightning/platformResourceLoader";
import cometdlwc from "@salesforce/resourceUrl/cometd";
import getSessionId from '@salesforce/apex/SessionUtil.getSessionId';
export default class Cometdlwc extends LightningElement {
libInitialized = false;
@track sessionId;
@track error;
@wire(getSessionId)
wiredSessionId({ error, data }) {
if (data) {
console.log(data);
this.sessionId = data;
this.error = undefined;
loadScript(this, cometdlwc)
.then(() => {
this.initializecometd()
});
} else if (error) {
console.log(error);
this.error = error;
this.sessionId = undefined;
}
}
initializecometd() {
if (this.libInitialized) {
return;
}
this.libInitialized = true;
//inintializing cometD object/class
var cometdlib = new window.org.cometd.CometD();
//Calling configure method of cometD class, to setup authentication which will be used in handshaking
cometdlib.configure({
url: window.location.protocol + '//' + window.location.hostname + '/cometd/47.0/',
requestHeaders: { Authorization: 'OAuth ' + this.sessionId},
appendMessageTypeToURL : false,
logLevel: 'debug'
});
cometdlib.websocketEnabled = false;
cometdlib.handshake(function(status) {
if (status.successful) {
// Successfully connected to the server.
// Now it is possible to subscribe or send messages
console.log('Successfully connected to server');
} else {
/// Cannot handshake with the server, alert user.
console.error('Error in handshaking: ' + JSON.stringify(status));
}
});
}
}
Requiere un controlador ápice simple para obtener sessionId
public with sharing class SessionUtil {
@AuraEnabled(cacheable=true)
public static String getSessionId() {
return UserInfo.getSessionId();
}
}
Las licencias comunitarias no son compatibles con Streaming API, por lo que empApi no funciona. La API de transmisión se basa en temas de inserción y la lectura de temas de inserción no es compatible con la licencia de la comunidad (por lo que puede crear eventos, pero no puede suscribirse a ellos)
ACTUALIZAR:
puede suscribirse con la biblioteca cometD, consulte los comentarios