全部产品
Search
文档中心

IoT Platform:Menggunakan Klien Paho MQTT untuk Android

更新时间:Jul 02, 2025

Topik ini menjelaskan cara menggunakan Paho Android Service untuk menghubungkan perangkat ke IoT Platform dan mengaktifkan pengiriman pesan.

Prasyarat

Sebuah produk dan perangkat telah dibuat dalam suatu instans di Konsol IoT Platform. Sertifikat perangkat dan Titik akhir MQTT telah diperoleh. Informasi sertifikat perangkat mencakup ProductKey, DeviceName, dan DeviceSecret. Untuk informasi lebih lanjut, lihat topik-topik berikut:

Informasi latar belakang

Paho Android Service adalah klien Message Queuing Telemetry Transport (MQTT) yang dikembangkan berdasarkan pustaka Paho MQTT untuk Java.

Siapkan lingkungan pengembangan

Contoh ini menggunakan Android Studio versi 3.5.1 dan Gradle versi 3.5.1.

Kunjungi situs resmi Android Studio untuk mengunduh Android Studio. Untuk informasi lebih lanjut tentang pengembangan Android, lihat dokumentasi resmi Android Studio.

Instal Klien Paho Android

  1. Buat proyek Android.

    Penting

    Jika nilai parameter targetSdkVersion lebih besar dari 30 dalam file build.gradle, ubah nilainya menjadi nilai yang kurang dari atau sama dengan 30.

  2. Dalam file Gradle, tambahkan dependensi Klien Paho Android. Contoh ini menggunakan Klien Paho Android 1.1.1. Tambahkan dependensi berikut:

    • Dalam file build.gradle, tambahkan alamat repositori Paho. Contoh ini menggunakan repositori rilis.

      repositories {
          maven {
              url "https://repo.eclipse.org/content/repositories/paho-releases/"
          }
      }
    • Dalam file build.gradle, tambahkan dependensi Layanan Paho Android. Contoh ini menggunakan Layanan Paho Android 1.1.1, yang didasarkan pada paho.client.mqttv3-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. Untuk mengikat aplikasi ke Layanan Paho Android, tambahkan informasi berikut ke file AndroidManifest.xml.

    • Deklarasikan layanan berikut:

      <!-- Mqtt Service -->
      <service android:name="org.eclipse.paho.android.service.MqttService">
      </service>
    • Tambahkan izin yang diperlukan oleh Layanan Paho MQTT.

      <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" />

Menghubungkan perangkat ke IoT Platform

  1. Unduh paket android_sameple_code.zip dan ekstraknya untuk mendapatkan file AiotMqttOption.java yang disediakan oleh Alibaba Cloud. File ini digunakan untuk memperoleh parameter koneksi MQTT.

    File AiotMqttOption.java mendefinisikan kelas AiotMqttOption.

    • Prototipe

      class AiotMqttOption
    • Deskripsi

      Gunakan kelas ini untuk memperoleh parameter koneksi MQTT berikut: username, password, dan clientid.

    • Anggota

      Tipe

      Metode

      public AiotMqttOption

      getMqttOption(String productKey, String deviceName, String deviceSecret)

      Menghitung nilai parameter username, password, dan clientid berdasarkan nilai parameter productKey, deviceName, dan deviceSecret.

      public String

      getUsername()

      Memperoleh parameter username.

      public String

      getPassword()

      Memperoleh parameter password.

      public String

      getClientid()

      Memperoleh parameter clientid.

  2. Impor file AiotMqttOption.java ke dalam proyek Android.

  3. Dalam proyek Android, tambahkan file program yang dapat menghubungkan perangkat ke IoT Platform.

    Tulis program untuk menggunakan kelas AiotMqttOption dalam file AiotMqttOption.java guna menghitung nilai parameter yang diperlukan untuk menetapkan koneksi MQTT ke IoT Platform.

    Berikut ini adalah instruksi pengembangan dan kode contoh:

    • Hitung nilai parameter koneksi MQTT clientId, username, dan password. Konfigurasikan parameter username dan password dalam objek MqttConnectOptions.

      final private String PRODUCTKEY = "a11xsrW****";
      final private String DEVICENAME = "paho_android";
      final private String DEVICESECRET = "tLMT9QWD36U2SArglGqcHCDK9rK9****";
      
      /* Memperoleh parameter koneksi MQTT clientId, username, dan password.  */
      AiotMqttOption aiotMqttOption = new AiotMqttOption().getMqttOption(PRODUCTKEY, DEVICENAME, DEVICESECRET);
      if (aiotMqttOption == null) {
          Log.e(TAG, "informasi perangkat salah");
      } else {
          clientId = aiotMqttOption.getClientId();
          userName = aiotMqttOption.getUsername();
          passWord = aiotMqttOption.getPassword();
      }
      
      /* Buat objek MqttConnectOptions dan konfigurasikan parameter username dan password.  */
      MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
      mqttConnectOptions.setUserName(userName);
      mqttConnectOptions.setPassword(passWord.toCharArray());
    • Hubungkan klien ke IoT Platform.

      Buat objek MqttAndroidClient dan konfigurasikan callback. Gunakan objek mqttConnectOptions untuk memanggil metode connect() guna menetapkan koneksi.

      /* Buat objek MqttAndroidClient dan konfigurasikan callback.  */
      mqttAndroidClient = new MqttAndroidClient(getApplicationContext(), host, clientId);
      mqttAndroidClient.setCallback(new MqttCallback() {
          @Override
          public void connectionLost(Throwable cause) {
              Log.i(TAG, "koneksi hilang");
          }
      
          @Override
          public void messageArrived(String topic, MqttMessage message) throws Exception {
              Log.i(TAG, "topik: " + topic + ", msg: " + new String(message.getPayload()));
          }
      
          @Override
          public void deliveryComplete(IMqttDeliveryToken token) {
              Log.i(TAG, "pesan terkirim");
          }
      });
      
      /* Tetapkan koneksi ke IoT Platform melalui MQTT.  */
      try {
          mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
              @Override
              public void onSuccess(IMqttToken asyncActionToken) {
                  Log.i(TAG, "koneksi berhasil");
      
                  subscribeTopic(SUB_TOPIC);
              }
      
              @Override
              public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                  Log.i(TAG, "koneksi gagal");
              }
          });
      
      } catch (MqttException e) {
          e.printStackTrace();
      }
    • Publikasikan pesan. Definisikan metode publishMessage() untuk mempublikasikan pesan dengan payload tertentu ke topik /${prodcutKey}/${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, "publikasi berhasil!");
                  }
      
                  @Override
                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                      Log.i(TAG, "publikasi gagal!");
                  }
              });
          } catch (MqttException e) {
              Log.e(TAG, e.toString());
              e.printStackTrace();
          }
      }

      Untuk informasi lebih lanjut tentang topik, lihat Topik.

    • Definisikan metode subscribeTopic() untuk berlangganan topik tertentu dan memperoleh 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, "berlangganan berhasil");
                  }
      
                  @Override
                  public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                      Log.i(TAG, "berlangganan gagal");
                  }
              });
      
          } 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.

Kode contoh

Kode contoh berikut menunjukkan cara menghubungkan ke IoT Platform.

  1. Unduh paket demo dan ekstraknya.

  2. Impor aiot-android-demo ke Android Studio.

  3. Dalam direktori app/src/main/java/com.linkkit.aiot_android_demo, ganti informasi perangkat dengan informasi perangkat Anda dalam file MainActivity.

    • Ganti PRODUCTKEY, DEVICENAME, dan DEVICESECRET dengan informasi sertifikat perangkat Anda.

    • Ganti .iot-as-mqtt.cn-shanghai.aliyuncs.com:443 dalam kode final String host = "tcp://" + PRODUCTKEY + ".iot-as-mqtt.cn-shanghai.aliyuncs.com:443"; dengan titik akhir instans Anda.

      • Jika Anda menggunakan instans Enterprise Edition atau instans publik dari versi baru, tentukan final String host = "tcp://" + "${MQTT endpoint of your instance}".

        Untuk memperoleh titik akhir MQTT, lakukan langkah-langkah berikut: Masuk ke Konsol IoT Platform. Di halaman Overview, klik kartu instans yang ingin Anda kelola. Di sudut kanan atas halaman Instance Details, klik View Development Configurations. Untuk informasi lebih lanjut, lihat Lihat titik akhir dari sebuah instans.

      • Jika Anda menggunakan instans publik dari versi lama, lakukan langkah berikut:

        Ganti cn-shanghai dalam kode dengan ID wilayah tempat perangkat Anda berada. Untuk informasi lebih lanjut tentang ID wilayah, lihat Wilayah yang Didukung.

  4. Bangun dan jalankan demo.

    Setelah demo dijalankan, Anda dapat melihat log lokal di Logcat.

    2019-12-04 19:44:01.824 5952-5987/com.linkkit.aiot_android_demo W/OpenGLRenderer: Gagal memilih config dengan EGL_SWAP_BEHAVIOR_PRESERVED, mencoba lagi tanpa...
    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 tidak didukung
    2019-12-04 19:44:01.854 5952-5987/com.linkkit.aiot_android_demo D/HostConnection: createUnique: panggil
    ...
    ...
    2019-12-04 19:44:01.860 5952-5987/com.linkkit.aiot_android_demo D/eglCodecCommon: allocate: Mintalah blok ukuran 0x1000
    2019-12-04 19:44:01.861 5952-5987/com.linkkit.aiot_android_demo D/eglCodecCommon: allocate: ioctl allocate mengembalikan offset 0x3ff706000 ukuran 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: Daftarkan alarmreceiver ke 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: Jadwalkan alarm berikutnya pada 1575459902256
    2019-12-04 19:44:02.256 5952-6023/com.linkkit.aiot_android_demo D/AlarmPingSender: Alarm jadwal menggunakan setExactAndAllowWhileIdle, berikutnya: 60000
    2019-12-04 19:44:02.272 5952-5952/com.linkkit.aiot_android_demo I/AiotMqtt: koneksi berhasil
    2019-12-04 19:44:02.301 5952-5952/com.linkkit.aiot_android_demo I/AiotMqtt: berlangganan berhasil

    Di Konsol IoT Platform, Anda dapat melihat status perangkat dan log.

    • Pilih Devices > Devices. Halaman Perangkat menunjukkan bahwa perangkat dalam keadaan Online.

    • Pilih Maintenance > Device Log. Lalu, klik tab Cloud run log atau Device local log untuk melihat log. Untuk informasi lebih lanjut, lihat Log IoT Platform dan Log Lokal Perangkat.

Kode kesalahan

Jika perangkat gagal menetapkan koneksi MQTT ke IoT Platform, Anda dapat mendiagnosis masalah berdasarkan kode kesalahan. Untuk informasi lebih lanjut, lihat Pemecahan Masalah.