robhogan / react-native-paho-mqtt

react-native-paho-mqtt
91 stars 32 forks source link

My mqtt is not working when i am using the release version but it is working when i am using it in build format #44

Open Harshkhosla opened 1 year ago

Harshkhosla commented 1 year ago

export const Click = (user) => { // debugger; // console.log(user, "coming hear"); return (dispatch) => { // const { authtoken, field2 } = user; // console.log(authtoken,"ekvhjwejh");

const client = new Client({ uri: 'ws://192.168.10.111:9001/ws', clientId: 'JOULS ECOTECH243546578989', storage: myStorage });
// set event handlers
client.on('connectionLost', (responseObject) => {
  if (responseObject.errorCode !== 0) {
    console.log(responseObject.errorMessage);
  }
});
const onConnect = () => {

  client.on('messageReceived', (message) => {
    console.log(message?.payloadString);
    dispatch(setAuthtoken(message?.payloadString));
  });
}

client.connect()
  .then(() => {
    // Once a connection has been made, make a subscription and send a message.
    console.log('onConnect');
    return client.subscribe('Jouls_Ecotech_User_Notifications');
  })
  .then(() => {
    const sampleee ={
      "Charging Mode": "Balanced_Mode"
    }
    const message = new Message(JSON.stringify(user));
    message.destinationName = 'Jouls_Ecotech_User_ID';
    // const sample = new Message(JSON.stringify(sampleee));
    // sample.destinationName = 'Jouls_Ecotech_User_Charging Modes';
    client.send(message);
    // client.send(sample);
  }).then(() => {
    onConnect()
  })
  .catch((responseObject) => {
    if (responseObject.errorCode !== 0) {
      console.log('onConnectionLost:' + responseObject.errorMessage);
    }
  })

//   client.onConnectionLost = onConnectionLost;
//   client.onMessageArrived = onMessageArrived;

} } my code in this the connection is happning when my app is in build form but when i release it to play store or use its release format it is giving connection error .

GaWr26 commented 11 months ago

Did you get this working? Seems I have the same issue after upgrading to expo 49 and SDK Version 33. Dev build connects to mqtt as expected. Production release does not. Any help is highly appreciated!

Harshkhosla commented 11 months ago

Yes i get it working , you have to enable the working of production build . In this file android/app/src/debug/AndroidManifest.xml try checking if these permissions included in your file

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools">

    <uses-permission android:name="android.permission.INTERNET"/>

    <application
        android:usesCleartextTraffic="true"
        tools:targetApi="28"
        android:networkSecurityConfig="@xml/network_security_config"
        tools:ignore="GoogleAppIndexingWarning">
        <activity android:name="com.facebook.react.devsupport.DevSettingsActivity" android:exported="false" />
    </application>

If you still face any problem feel free to contact me.

GaWr26 commented 11 months ago

Thanks for the quick reply. I figured out it has to do with my broker not using TLS encryption. Connecting to an encrypted broker works. I will open a new issue to see how to connect in my case

Harshkhosla commented 10 months ago

NO issues . Good to be able to help.

bearkillerPT commented 10 months ago

@Harshkhosla I've tried adding the permissions and the issue persists. I used to be able to connect to my local network broker in Expo SDK 48 but not in Expo 49. I'm not sure how to go about it without downgrading to 48. Can you please try to help me? I'm creating a local build with expo prebuild and then, after modifying the file, running ./gradlew assembleRelease --stacktrace