Tous les produits
Search
Centre de documentation

IoT Platform:Connexion à IoT Platform depuis Android à l'aide de Paho MQTT

Dernière mise à jour :Aug 09, 2026

Utilisez le service Paho Android pour connecter une application Android à IoT Platform et envoyer et recevoir des messages.

Prérequis

Dans la console IoT Platform , pour l'instance correspondante, créez un produit et un appareil, puis obtenez le nom de domaine d'accès MQTT et les informations du certificat de l'appareil (ProductKey, DeviceName et DeviceSecret). Pour plus d'informations, consultez :

Présentation

Le service Paho Android est un service client MQTT basé sur la bibliothèque Eclipse Paho MQTT pour Java.

Environnement de développement

Cet exemple utilise Android Studio 3.5.1 avec Gradle 3.5.1.

Téléchargez Android Studio depuis le site web officiel d'Android Studio.

Installation du client Paho Android

  1. Créez un nouveau projet Android.

    Important

    La valeur targetSdkVersion dans le fichier build.gradle de l'application doit être inférieure ou égale à 30. Si elle est supérieure, vous devez la modifier.

  2. Ajoutez la dépendance Paho Android Client 1.1.1 à vos fichiers Gradle :

    • Dans le fichier build.gradlebuild.gradle du projet, ajoutez l'URL du référentiel de publication Paho.

      repositories {
          maven {
              url "https://repo.eclipse.org/content/repositories/paho-releases/"
          }
      }
    • Dans le fichier build.gradlebuild.gradle de l'application, ajoutez les dépendances Paho Android Service (1.1.1) et MQTT client (1.1.0).

      dependencies {
          implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
          implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
      }
  3. Ajoutez les entrées suivantes au fichier AndroidManifest.xmlAndroidManifest.xml :

    • Déclarez le service MQTT :

      <!-- Mqtt Service -->
      <service android:name="org.eclipse.paho.android.service.MqttService">
      </service>
    • Ajoutez les autorisations requises.

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

Connexion à IoT Platform

  1. Téléchargez android_sample_code.zip et extrayez le fichier AiotMqttOption.javaAiotMqttOption.java, qui calcule les paramètres de connexion MQTT.

    Le fichier AiotMqttOption.javaAiotMqttOption.java définit la classe AiotMqttOption :

    • Prototype :

      class AiotMqttOption
    • Fonction :

      Calcule les valeurs usernameusername, passwordpassword et clientIDclientID requises pour connecter un appareil à IoT Platform via MQTT.

    • Membres :

      Définition du type description de la méthode
      public AiotMqttOption

      getMqttOption(String productKey, String deviceName, String deviceSecret)

      Calcule les valeurs usernameusername, passwordpassword et clientidclientid à partir des valeurs productKeyproductKey, deviceNamedeviceName et deviceSecretdeviceSecret de l'appareil.

      public String

      getUsername()

      Récupère la valeur usernameusername MQTT.

      public String

      getPassword()

      Récupère la valeur passwordpassword MQTT.

      public String

      getClientid()

      Récupère la valeur clientidclientid MQTT.

  2. Importez le fichier AiotMqttOption.javaAiotMqttOption.java dans votre projet Android.

  3. Ajoutez du code pour connecter l'appareil à IoT Platform.

    Appelez la classe AiotMqttOption dans le fichier AiotMqttOption.javaAiotMqttOption.java pour calculer les paramètres de connexion MQTT et vous connecter à IoT Platform.

    Instructions de développement et exemple de code :

    • Calculez les paramètres de connexion MQTT clientIdclientId, usernameusername et passwordpassword, puis définissez usernameusername et passwordpassword dans l'objet MqttConnectOptions.

      final private String PRODUCTKEY = "a11xsrW****";
      final private String DEVICENAME = "paho_android";
      final private String DEVICESECRET = "tLMT9QWD36U2SArglGqcHCDK9rK9****";
      
      /* Obtain the MQTT connection information: clientId, username, and password. */
      AiotMqttOption aiotMqttOption = new AiotMqttOption().getMqttOption(PRODUCTKEY, DEVICENAME, DEVICESECRET);
      if (aiotMqttOption == null) {
          Log.e(TAG, "device info error");
      } else {
          clientId = aiotMqttOption.getClientId();
          userName = aiotMqttOption.getUsername();
          passWord = aiotMqttOption.getPassword();
      }
      
      /* Create an MqttConnectOptions object and configure the username and password. */
      MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
      mqttConnectOptions.setUserName(userName);
      mqttConnectOptions.setPassword(passWord.toCharArray());
    • Connectez-vous à IoT Platform.

      Créez un objet MqttAndroidClient, définissez le rappel et appelez connect avec MqttConnectOptions.

      /* Create an MqttAndroidClient object and set the callback. */
      mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), host, clientId);
      mqttAndroidClient.setCallback(new MqttCallback() {
          @Override
          public void connectionLost(Throwable cause) {
              Log.i(TAG, "connection lost");
          }
      
          @Override
          public void messageArrived(String topic, MqttMessage message) throws Exception {
              Log.i(TAG, "topic: " + topic + ", msg: " + new String(message.getPayload()));
          }
      
          @Override
          public void deliveryComplete(IMqttDeliveryToken token) {
              Log.i(TAG, "msg delivered");
          }
      });
      
      /* Establish an MQTT connection. */
      try {
          mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
              @Override
              public void onSuccess(IMqttToken asyncActionToken) {
                  Log.i(TAG, "connect succeed");
      
                  subscribeTopic(SUB_TOPIC);
              }
      
              @Override
              public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                  Log.i(TAG, "connect failed");
              }
          });
      
      } catch (MqttException e) {
          e.printStackTrace();
      }
    • Publiez un message. Appelez publish pour envoyer une charge utile au topic /${productKey}/${deviceName}/user/update/${productKey}/${deviceName}/user/update.

      public void publishMessage(String payload) {
          try {
              if (mqttAndroidClient.isConnected() == false) {
                  mqttAndroidClient.connect();
              }
      
              MqttMessage message = new MqttMessage();
              message.setPayload(payload.getBytes());
              message.setQos(0);
              mqttAndroidClient.publish(PUB_TOPIC, message,null, new IMqttActionListener() {
                  @Override
                  public void onSuccess(IMqttToken asyncActionToken) {
                      Log.i(TAG, "publish succeed!");
                  }
      
                  @Override
                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                      Log.i(TAG, "publish failed!");
                  }
              });
          } catch (MqttException e) {
              Log.e(TAG, e.toString());
              e.printStackTrace();
          }
      }

      Qu'est-ce qu'un topic ?What is a topic

    • Appelez subscribe pour vous abonner à un topic et recevoir des messages d'IoT Platform.

      public void subscribeTopic(String topic) {
          try {
              mqttAndroidClient.subscribe(topic, 0, null, new IMqttActionListener() {
                  @Override
                  public void onSuccess(IMqttToken asyncActionToken) {
                      Log.i(TAG, "subscribed succeed");
                  }
      
                  @Override
                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                      Log.i(TAG, "subscribed failed");
                  }
              });
      
          } catch (MqttException e) {
              e.printStackTrace();
          }
      }

    Découvrez les modèles de communication entre l'appareil et le cloud dans Présentation des communications entre les appareils, IoT Platform et les serveursPrésentation.

  4. Compilez le projet.

Exécution de la démo

Exécutez l'application de démo pour vérifier la connexion à IoT Platform.

  1. Téléchargez le package de code de démo et extrayez-le.

  2. Importez aiot-android-demoaiot-android-demo dans Android Studio.

  3. Dans le fichier MainActivityMainActivity situé dans app/src/main/java/com.linkkit.aiot_android_demoapp/src/main/java/com.linkkit.aiot_android_demo, remplacez les informations d'appareil fictives par les identifiants de votre appareil.

    • Définissez PRODUCTKEYPRODUCTKEY, DEVICENAMEDEVICENAME et DEVICESECRETDEVICESECRET avec les valeurs du certificat de votre appareil.

    • Définissez l'hôte sur votre endpoint : final String host = "tcp://" + PRODUCTKEY + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:443";final String host = "tcp://" + PRODUCTKEY + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:443";

      • Pour les nouvelles instances publiques et les instances Enterprise, définissez l'hôte sur l'endpoint de votre instance : final String host = "tcp://" + "{your-instance-endpoint}"final String host = "tcp://" + "{your-instance-endpoint}".

        Connectez-vous à la console IoT Platform. Sur la page Instance Overview, cliquez sur votre instance. Sur la page Instance Details, cliquez sur View Development Configuration pour obtenir l'endpoint. Afficher et configurer les endpoints des instancesManage instance endpoints.

      • Pour les anciennes instances publiques :

        Remplacez le code de région (cn-shanghai) par la région où se trouve votre appareil. Régions prises en chargeSupported regions.

  4. Générez et exécutez l'application.

    Après une exécution réussie, vérifiez les journaux dans Logcat.

    2019-12-04 19:44:01.824 5952-5987/com.linkkit.aiot_android_demo W/OpenGLRenderer: Failed to choose config with EGL_SWAP_BEHAVIOR_PRESERVED, retrying without...
    2019-12-04 19:44:01.829 5952-5987/com.linkkit.aiot_android_demo D/EGL_emulation: eglCreateContext: 0xec073240: maj 3 min 0 rcv 3
    2019-12-04 19:44:01.830 5952-5987/com.linkkit.aiot_android_demo D/EGL_emulation: eglMakeCurrent: 0xec073240: ver 3 0 (tinfo 0xec09b470)
    2019-12-04 19:44:01.852 5952-5987/com.linkkit.aiot_android_demo W/Gralloc3: mapper 3.x is not supported
    2019-12-04 19:44:01.854 5952-5987/com.linkkit.aiot_android_demo D/HostConnection: createUnique: call
    ...
    ...
    2019-12-04 19:44:01.860 5952-5987/com.linkkit.aiot_android_demo D/eglCodecCommon: allocate: Ask for block of size 0x1000
    2019-12-04 19:44:01.861 5952-5987/com.linkkit.aiot_android_demo D/eglCodecCommon: allocate: ioctl allocate returned offset 0x3ff706000 size 0x2000
    2019-12-04 19:44:01.897 5952-5987/com.linkkit.aiot_android_demo D/EGL_emulation: eglMakeCurrent: 0xec073240: ver 3 0 (tinfo 0xec09b470)
    2019-12-04 19:44:02.245 5952-6023/com.linkkit.aiot_android_demo D/AlarmPingSender: Register alarmreceiver to MqttServiceMqttService.pingSender.a11xsrW****.paho_android|timestamp=1575459841629,_v=sdk-android-1.0.0,securemode=2,signmethod=hmacsha256|
    2019-12-04 19:44:02.256 5952-6023/com.linkkit.aiot_android_demo D/AlarmPingSender: Schedule next alarm at 1575459902256
    2019-12-04 19:44:02.256 5952-6023/com.linkkit.aiot_android_demo D/AlarmPingSender: Alarm scheule using setExactAndAllowWhileIdle, next: 60000
    2019-12-04 19:44:02.272 5952-5952/com.linkkit.aiot_android_demo I/AiotMqtt: connect succeed
    2019-12-04 19:44:02.301 5952-5952/com.linkkit.aiot_android_demo I/AiotMqtt: subscribed succeed

    Connectez-vous à la console IoT Platform pour afficher l'état de l'appareil et les journaux de votre instance.

Codes d'erreur

Si l'appareil ne parvient pas à se connecter à IoT Platform via MQTT, utilisez les codes d'erreur pour résoudre le problème. Pour plus d'informations sur les codes d'erreur côté serveur, consultez DépannageDépannage.