Je suis en train de publier un message mqtt utilisant AWSIotMqttManager avec les services Web de amazon IOT sur une application Android, j'ai suivez utilisé this exemple comme base pour mon code. L'application dit qu'elle peut se connecter avec succès à l'appareil, mais ne parvient pas à publier un message, ce qui ne va pas ici?Utiliser Android Pour publier des messages MQTT sur AWS IdO services
// Initialize the AWS Cognito credentials provider
credentialsProvider = new CognitoCachingCredentialsProvider(
getApplicationContext(), // context
COGNITO_POOL_ID, // Identity Pool ID
MY_REGION // Region
);
Region region = Region.getRegion(MY_REGION);
//intialize unnqique clientid as client to iot aws
Long tsLong = System.currentTimeMillis()/1000;
clientId = tsLong.toString();
// MQTT Client
mqttManager = new AWSIotMqttManager(clientId, CUSTOMER_SPECIFIC_ENDPOINT);
// The following block uses a Cognito credentials provider for authentication with AWS IoT.
new Thread(new Runnable() {
@Override
public void run() {
awsCredentials = credentialsProvider.getCredentials();
runOnUiThread(new Runnable() {
@Override
public void run() {
bttnConnect.setEnabled(true);
Toast.makeText(WelcomePageActivity.this, "credentials ok?", Toast.LENGTH_SHORT).show();
}
});
}
}).start();
//connection button onclick lisetner will connect to the mqtt protocol
bttnConnect.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Log.d("LOG_TAG", "clientId = " + clientId);
try {
mqttManager.connect(credentialsProvider, new AWSIotMqttClientStatusCallback() {
@Override
public void onStatusChanged(final AWSIotMqttClientStatus status,
final Throwable throwable) {
Log.d("LOG_TAG", "Status = " + String.valueOf(status));
runOnUiThread(new Runnable() {
@Override
public void run() {
if (status == AWSIotMqttClientStatus.Connecting) {
tvStatus.setText("Connecting...");
} else if (status == AWSIotMqttClientStatus.Connected) {
tvStatus.setText("Connected");
} else if (status == AWSIotMqttClientStatus.Reconnecting) {
if (throwable != null) {
Log.e("LOG_TAG", "Connection error.", throwable);
}
tvStatus.setText("Reconnecting");
} else if (status == AWSIotMqttClientStatus.ConnectionLost) {
if (throwable != null) {
Log.e("LOG_TAG", "Connection error.", throwable);
throwable.printStackTrace();
}
tvStatus.setText("Disconnected");
} else {
tvStatus.setText("Disconnected");
}
}
});
}
});
} catch (final Exception e) {
Log.e("LOG_TAG", "Connection error.", e);
tvStatus.setText("Error! " + e.getMessage());
}
}
});
//publisj button
ledbutton.setOnClickListener(new View.OnClickListener() {
final String topic = "$aws/things/industech/shadow/update";
final String msg = "{\"state\": {\"desired\": {\"ledBarStatus\": 1},\"reported\": {\"temperature\": 25,\"ledBarStatus\":1}}}";
@Override
public void onClick(View v) {
try {
mqttManager.publishString(msg, topic, AWSIotMqttQos.QOS1);
} catch (Exception e) {
Log.e("LOG_TAG", "Publish error.", e);
}
}
});
Le journal:
/CognitoCachingCredentialsProvider: Loading credentials from SharedPreferences
D/CognitoCachingCredentialsProvider: Saving credentials to SharedPreferences
D/LOG_TAG: clientId = 1489081527
D/LOG_TAG: Status = Connecting
D/LOG_TAG: Status = Connected
D/LOG_TAG: Status = Reconnecting
D/LOG_TAG: Status = Connected
Avez-vous pu résoudre ce problème? Je suis tombé sur ce problème moi-même hier. Il dit parfois "connecté" et ne va pas de l'avant ou continue parfois à se connecter "Reconnecting". – RamithDR