2

A platform event is publishing through an apex trigger and I am trying to subscribe to it using a lightning component, but the lightning component is failing to subscribe every time. It is subscribing randomly and sometimes it is giving the error below:

event {"advice"{"interval":0,"reconnect":"handshake"},"channel":"/meta/subscribe","id":"6","error":"403::Unknown client","successful":false}

Here is the subscription code from the lightning component.

 subscribeEvent:function(component, event, helper) {

    const empApi = component.find('empApi');
    const channel = component.get('v.channel');
    console.log('Event Received after subscribe: ');
    var recordid = component.get("v.entityId");

    var sub;
    var replayId = -1;
    const callback = function (message) {
        console.log('Event Received after subscribe: ' + JSON.stringify(message));
        console.log('Event Received after subscribe recordid: ' + recordid);

        if(recordid == message.data.payload.Reference_Id__c){
            if(message.data.payload.Status__c == 'Success'){
                component.set('v.receiptNumber',message.data.payload.Receipt_Number__c); 
                component.set('v.paymentPhase','receipt'); 
                console.log('Event Received paymentPhase receipt');
            }else{

                component.set('v.paymentPhase','receipt');   
                component.set('v.paymentError',message.data.payload.Message__c);                   
            }
            helper.unsubscribePE(component);
            console.log('unsubscribe done');  
        }   
    };
    empApi.subscribe(channel, replayId, $A.getCallback(callback)).then($A.getCallback(function (newSubscription) {
        console.log('Subscribed to channel  : ' + channel);
        component.set('v.subscription', newSubscription);
    }));  
}

enter image description here

0

1 Answer 1

1

Although not a direct solution, I have also had similar issues with the 403::Unknown Client error. What I noticed with the seemingly inconsistent subscriptions was that the error would only occur when the subscription tried to connect before the page was finished loading. I found that by stalling the subscription for a few seconds, the page loaded and the code worked as expected.

window.setTimeout($A.getCallback(function() {
    //subcription here
    ...
}), 3000); //Waits for 3 seconds

This prevents the handshake from mostly failing, prior to the connection being established. I will also point out that this is not a fully working solution, as at times the connection still fails (regardless of time), but is fixed with a refresh of the page once or twice. I also added alerts to pop up indicating successful and failed connection attempts that I could share if necessary.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .