All Products
Search
Document Center

IoT Platform:Koneksi ke IoT Platform dari Android menggunakan Paho MQTT

Last Updated:Jun 03, 2026

Gunakan Paho Android Service untuk menghubungkan aplikasi Android ke IoT Platform serta mengirim dan menerima pesan.

Prasyarat

Di Konsol IoT Platform , untuk instans yang sesuai, buat produk dan perangkat, lalu peroleh nama domain akses MQTT dan informasi sertifikat perangkat (ProductKey, DeviceName, dan DeviceSecret). Untuk informasi selengkapnya, lihat:

Ikhtisar

Paho Android Service adalah layanan klien MQTT yang dibangun di atas library Eclipse Paho MQTT untuk Java.

Lingkungan pengembangan

Contoh ini menggunakan Android Studio 3.5.1 dengan Gradle 3.5.1.

Unduh Android Studio dari situs resmi Android Studio.

Instal client Paho Android

  1. Buat proyek Android baru.
    Penting targetSdkVersion dalam file build.gradle aplikasi harus 30 atau lebih rendah. Jika nilainya lebih tinggi, Anda harus mengubahnya.
  2. Tambahkan dependensi Paho Android Client 1.1.1 ke file Gradle Anda:
    • Dalam file build.gradle proyek, tambahkan URL repositori rilis Paho.
      repositories {
          maven {
              url "https://repo.eclipse.org/content/repositories/paho-releases/"
          }
      }
    • Dalam file build.gradle aplikasi, tambahkan dependensi Paho Android Service (1.1.1) dan klien MQTT (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. Tambahkan entri berikut ke AndroidManifest.xml:
    • Deklarasikan layanan MQTT:
      <!-- Mqtt Service -->
      <service android:name="org.eclipse.paho.android.service.MqttService">
      </service>
    • Tambahkan izin yang diperlukan.
      <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" />

Koneksi ke IoT Platform

  1. Unduh android_sample_code.zip dan ekstrak file AiotMqttOption.java, yang menghitung parameter koneksi MQTT.

    File AiotMqttOption.java mendefinisikan kelas AiotMqttOption:

    • Prototipe:
      class AiotMqttOption
    • Fungsi

      Menghitung parameter username, password, dan clientid untuk koneksi MQTT ke IoT Platform.

    • Anggota:
      Definisi tipe Deskripsi metode
      public AiotMqttOption getMqttOption(String productKey, String deviceName, String deviceSecret)

      Menghitung username, password, dan clientid MQTT dari productKey, deviceName, dan deviceSecret perangkat.

      public String getUsername()

      Mendapatkan username MQTT.

      public String getPassword()

      Mendapatkan password MQTT.

      public String getClientid()

      Mendapatkan clientid MQTT.

  2. Impor file AiotMqttOption.java ke proyek Android Anda.
  3. Tambahkan kode untuk menghubungkan perangkat ke IoT Platform.

    Panggil kelas AiotMqttOption dalam file AiotMqttOption.java untuk menghitung parameter koneksi MQTT dan terhubung ke IoT Platform.

    Instruksi pengembangan dan contoh kode:

    • Hitung parameter koneksi MQTT clientId, username, dan password, lalu atur username dan password dalam objek MqttConnectOptions.
      final private String PRODUCTKEY = "a11xsrW****";
      final private String DEVICENAME = "paho_android";
      final private String DEVICESECRET = "tLMT9QWD36U2SArglGqcHCDK9rK9****";
      
      /* Dapatkan informasi koneksi MQTT: clientId, username, dan 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();
      }
      
      /* Buat objek MqttConnectOptions dan konfigurasikan username dan password. */
      MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
      mqttConnectOptions.setUserName(userName);
      mqttConnectOptions.setPassword(passWord.toCharArray());
    • Hubungkan ke IoT Platform.

      Buat objek MqttAndroidClient, atur callback, lalu panggil connect dengan MqttConnectOptions.

      /* Buat objek MqttAndroidClient dan atur 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");
          }
      });
      
      /* Bangun koneksi MQTT. */
      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();
      }
    • Publikasikan pesan. Panggil publish untuk mengirim muatan ke topik /${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();
          }
      }

      Apa itu topik?

    • Panggil subscribe untuk berlangganan topik dan menerima pesan dari 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();
          }
      }

    Untuk informasi tentang metode komunikasi antara perangkat, server, dan IoT Platform, lihat Ikhtisar komunikasi antara perangkat, platform IoT, dan server.

  4. Kompilasi proyek.

Jalankan demo

Jalankan aplikasi demo untuk memverifikasi koneksi ke IoT Platform.

  1. Unduh paket kode demo dan ekstrak.
  2. Impor aiot-android-demo ke Android Studio.
  3. Dalam file MainActivity di app/src/main/java/com.linkkit.aiot_android_demo, ganti informasi perangkat placeholder dengan kredensial perangkat Anda.
    • Atur PRODUCTKEY, DEVICENAME, dan DEVICESECRET ke nilai sertifikat perangkat Anda.
    • Atur host ke titik akhir Anda: final String host = "tcp://" + PRODUCTKEY + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:443";
      • Untuk instans publik baru dan Instans Perusahaan, atur host ke titik akhir instans Anda: final String host = "tcp://" + "{your-instance-endpoint}".

        Masuk ke konsol Platform IoT. Pada halaman Instance Overview, klik instans Anda. Di halaman Instance Details, klik View Development Configuration untuk mendapatkan titik akhir. Melihat dan mengonfigurasi titik akhir instans.

      • Untuk instans publik lama:

        Ganti kode wilayah (cn-shanghai) dengan wilayah tempat perangkat Anda berada. Wilayah yang didukung.

  4. Bangun dan jalankan aplikasi.
    Setelah berhasil dijalankan, periksa log di 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

    Login ke Konsol IoT Platform. Di instans yang sesuai, Anda dapat melihat status dan log perangkat.

    • Pilih Device Management > Devices. Status perangkat adalah Online.

    • Pilih Monitoring & O&M > Log Service. Anda dapat melihat IoT Platform logs dan on-premises device logs. Untuk informasi selengkapnya, lihat Log platform IoT dan Log perangkat lokal.

Kode kesalahan

Jika perangkat gagal terhubung ke IoT Platform melalui MQTT, gunakan kode kesalahan untuk menyelesaikan masalah tersebut. Untuk informasi selengkapnya tentang kode kesalahan sisi server, lihat Pemecahan Masalah.