全部产品
Search
文档中心

IoT Platform:Verifikasi dan sambungkan perangkat

更新时间:Jul 06, 2025

Topik ini menjelaskan cara menginisialisasi Link SDK untuk Java guna menyambungkan perangkat ke IoT Platform.

Prasyarat

  • Produk dan perangkat telah dibuat. Untuk informasi lebih lanjut, lihat Buat Produk dan Perangkat.

  • Informasi verifikasi perangkat dan titik akhir tempat Anda ingin menyambungkan perangkat diperoleh.

Informasi latar belakang

  • Link SDK untuk Java memungkinkan Anda menggunakan hanya DeviceSecrets untuk memverifikasi identitas perangkat. Tabel berikut menjelaskan metode verifikasi yang didukung oleh SDK.

    Metode verifikasi

    Metode pendaftaran

    Deskripsi

    Verifikasi satu-sertifikat-per-perangkat

    Tidak tersedia

    Sertifikat perangkat yang mencakup ProductKey, DeviceName, dan DeviceSecret diinstal pada setiap perangkat.

    Verifikasi satu-sertifikat-per-produk

    Pra-pendaftaran

    • Sertifikat produk yang mencakup ProductKey dan ProductSecret diinstal pada semua perangkat dari suatu produk.

    • Anda harus mengaktifkan fitur dynamic registration untuk produk tersebut.

    • Pendaftaran dinamis memungkinkan perangkat mendapatkan DeviceSecret.

    Tanpa pra-pendaftaran

    • Sertifikat produk yang mencakup ProductKey dan ProductSecret diinstal pada semua perangkat dari suatu produk.

    • Anda harus mengaktifkan fitur dynamic registration untuk produk tersebut.

    • Pendaftaran dinamis memungkinkan perangkat mendapatkan kombinasi ClientID dan DeviceToken.

    Catatan

    Untuk informasi tentang perbedaan antara verifikasi satu-sertifikat-per-produk dengan pra-pendaftaran dan tanpa pra-pendaftaran, lihat Perbedaan antara metode verifikasi.

  • Untuk informasi tentang parameter Link SDK untuk Java, lihat LinkKitInitParams.

Verifikasi satu-sertifikat-per-perangkat

Kode contoh untuk verifikasi satu-sertifikat-per-perangkat:

String productKey = "${YourProductKey}";
String deviceName = "${YourDeviceName}";
String deviceSecret = "${YourDeviceSecret}";

LinkKitInitParams params = new LinkKitInitParams();

/**
 * Langkah 1: Konfigurasikan parameter yang diperlukan untuk inisialisasi Message Queuing Telemetry Transport (MQTT).
 */
IoTMqttClientConfig config = new IoTMqttClientConfig();

MqttConfigure.mqttHost = "{YourInstanceId}.mqtt.iothub.aliyuncs.com:8883";

/*
 * Tentukan apakah akan menerima pesan offline.
 * Parameter ini sesuai dengan parameter cleanSession dari koneksi MQTT.
 */
config.receiveOfflineMsg = false;
params.mqttClientConfig = config;

/**
 * Langkah 2: Tentukan informasi verifikasi yang diperlukan untuk menginisialisasi perangkat.
 */
DeviceInfo deviceInfo = new DeviceInfo();
deviceInfo.productKey = productKey;
deviceInfo.deviceName = deviceName;
deviceInfo.deviceSecret = deviceSecret;
params.deviceInfo = deviceInfo;

/**
 * Langkah 3: Tentukan nama pengguna, token, dan clientId perangkat.
 * Langkah ini hanya diperlukan jika Anda menggunakan metode verifikasi satu-sertifikat-per-produk tanpa pra-pendaftaran untuk memverifikasi perangkat.
 * Secara default, langkah ini dilewati.
 */
 // MqttConfigure.deviceToken="${YourDeviceToken}";
 // MqttConfigure.clientId="${YourClientId}";


LinkKit.getInstance().init(params, new ILinkKitConnectListener() {
    public void onError(AError aError) {
        ALog.e(TAG, "Init Error error= "+aError);
    }
    public void onInitDone(InitResult initResult) {
        ALog.i(TAG, "onInitDone result=" + initResult);
    }
});
Catatan
  • Jika onInitDone dikembalikan setelah Anda mengirim permintaan inisialisasi, inisialisasi berhasil. Jika onError dikembalikan, inisialisasi gagal.

  • Jika inisialisasi gagal, Anda dapat mengonfigurasi parameter yang diperlukan untuk menginisialisasi ulang perangkat sesuai dengan kebutuhan bisnis Anda. Link SDK untuk Java tidak secara otomatis menyambungkan ulang perangkat ke IoT Platform.

  • Jika inisialisasi berhasil dan perangkat terputus dari IoT Platform, Link SDK untuk Java secara otomatis menyambungkan ulang perangkat ke IoT Platform.

Pendaftaran dinamis

Verifikasi satu-sertifikat-per-produk juga dikenal sebagai pendaftaran dinamis. Fitur ini digunakan untuk meminta DeviceSecrets dari IoT Platform. Metode verifikasi satu-sertifikat-per-produk diklasifikasikan menjadi jenis-jenis berikut: tanpa pra-pendaftaran dan pra-pendaftaran. Sebelum menggunakan fitur ini, pastikan prasyarat berikut terpenuhi:

  • Pendaftaran dinamis diaktifkan untuk produk yang Anda buat di konsol IoT Platform.

  • Dalam file deviceinfo dari paket demo, parameter deviceSecret dibiarkan kosong dan nilai ditentukan untuk parameter productSecret.

  • Pastikan Langkah 1, Langkah 2, dan Langkah 3 dalam kode contoh berikut dilakukan.

  • Setelah pendaftaran dinamis selesai, Anda harus menutup koneksi persisten untuk pendaftaran dinamis. Untuk informasi lebih lanjut, lihat kode contoh di Langkah 4.

  • Kode contoh menunjukkan cara melakukan verifikasi satu-sertifikat-per-produk dengan pra-pendaftaran. Anda dapat merujuk catatan penggunaan di Langkah 1 dari kode contoh untuk melakukan verifikasi satu-sertifikat-per-produk tanpa pra-pendaftaran.

  • Untuk memastikan keamanan perangkat, bakar DeviceSecret ke perangkat setelah Anda mendapatkan DeviceSecret dengan menggunakan metode verifikasi satu-sertifikat-per-produk. Jika Anda ingin menyambungkan perangkat Anda ke IoT Platform, lihat bagian "Verifikasi satu-sertifikat-per-perangkat" dari topik ini.

Tabel berikut menjelaskan perbedaan antara metode verifikasi satu-sertifikat-per-produk tanpa pra-pendaftaran dan pra-pendaftaran.

Item

Pra-pendaftaran

Tanpa pra-pendaftaran

Protokol

Message Queuing Telemetry Transport (MQTT) dan HTTPS

MQTT

Wilayah

  • Pendaftaran dinamis berbasis MQTT tersedia di semua wilayah yang didukung oleh IoT Platform.

  • Pendaftaran dinamis berbasis HTTPS hanya tersedia di wilayah China (Shanghai). Kami merekomendasikan agar Anda tidak menggunakan pendaftaran dinamis berbasis HTTPS. Kode contoh tidak termasuk kode untuk metode ini.

China (Shanghai) dan China (Beijing)

DeviceSecrets yang dikembalikan

Untuk informasi lebih lanjut tentang cara menggunakan DeviceSecret, lihat Langkah 1 dalam kode contoh untuk verifikasi satu-sertifikat-per-perangkat.

Bakar ClientID dan DeviceToken perangkat ke perangkat. Dengan cara ini, informasi tersebut dapat digunakan saat Anda menggunakan fitur tertentu, seperti menyambungkan perangkat ke IoT Platform. Untuk informasi lebih lanjut, lihat Langkah 3 dalam kode contoh untuk verifikasi satu-sertifikat-per-perangkat.

Pendaftaran perangkat

Anda harus mendaftarkan DeviceName perangkat terlebih dahulu di konsol IoT Platform.

Anda tidak perlu mendaftarkan DeviceName perangkat terlebih dahulu di konsol IoT Platform.

Jumlah penggunaan

  • Anda dapat menggunakan sertifikat perangkat untuk mengaktifkan hanya satu perangkat fisik. Jika Perangkat A diaktifkan menggunakan DeviceName dan Perangkat B perlu menggunakan DeviceName tersebut, Anda dapat menghapus Perangkat A di konsol IoT Platform dan menonaktifkan DeviceSecret Perangkat A. Dengan cara ini, Anda dapat menggunakan DeviceName untuk membuat dan mengaktifkan Perangkat B.

  • Jika perangkat perlu diaktifkan ulang karena DeviceSecret hilang, Anda harus memanggil operasi API ResetThing untuk mengatur status perangkat menjadi Inactive. Kemudian, Anda dapat mengaktifkan ulang perangkat. DeviceSecret yang diterbitkan oleh IoT Platform tetap tidak berubah.

Anda dapat mengaktifkan hingga lima perangkat fisik menggunakan ProductKey, ProductSecret, dan DeviceName yang sama di konsol IoT Platform pada saat bersamaan. IoT Platform menghasilkan ClientID dan DeviceToken unik untuk setiap perangkat.

Kode contoh untuk pendaftaran dinamis:

        String deviceName = "${YourDeviceName}";
        String productKey = "${YourProductKey}";
        String productSecret = "${YourProductSecret}";

        // Langkah 1: Periksa apakah metode verifikasi satu-sertifikat-per-produk adalah tanpa pra-pendaftaran atau pra-pendaftaran.
        // Kasus 1: Jika Anda mengatur parameter registerType ke regnwl, metode verifikasi satu-sertifikat-per-produk tanpa pra-pendaftaran digunakan dan Anda tidak perlu membuat perangkat.
        // Kasus 2: Jika Anda membiarkan parameter registerType kosong atau mengatur parameter registerType ke register, metode verifikasi satu-sertifikat-per-produk pra-pendaftaran digunakan dan Anda harus membuat perangkat.
        String registerType = "register";

        // Langkah 2: Tentukan titik akhir untuk pendaftaran dinamis.
        MqttConfigure.mqttHost = "ssl://${YourMqttHostUrl}:8883";

        MqttInitParams initParams = new MqttInitParams(productKey, productSecret, deviceName, "",registerType);

        // Langkah 3: Jika Anda menggunakan instance publik versi baru atau instance Enterprise Edition, tentukan ID instance yang Anda peroleh dari halaman Detail Instance di konsol IoT Platform untuk pendaftaran dinamis.
        initParams.instanceId = "${YourInstanceId}";

        final Object lock = new Object();
        LinkKit.getInstance().deviceDynamicRegister(initParams, new IOnCallListener() {
            @Override
            public void onSuccess(com.aliyun.alink.linksdk.channel.core.base.ARequest request, com.aliyun.alink.linksdk.channel.core.base.AResponse response) {
                try {
                    String responseData = new String((byte[]) response.data);
                    JSONObject jsonObject = JSONObject.parseObject(responseData);
                    // Output yang dikembalikan jika metode verifikasi satu-sertifikat-per-produk pra-pendaftaran digunakan.
                    String deviceSecret = jsonObject.getString("deviceSecret");

                    // Output yang dikembalikan jika metode verifikasi satu-sertifikat-per-produk tanpa pra-pendaftaran digunakan.
                    String clientId = jsonObject.getString("clientId");
                    String deviceToken = jsonObject.getString("deviceToken");

                    // Simpan kredensial yang dikembalikan dan lanjutkan ke Langkah 4. Setelah Anda menyelesaikan Langkah 4, Anda dapat menggunakan metode onSuccess untuk menyambungkan perangkat ke IoT Platform.
                    
                    // Panggil operasi API yang menunggu thread.
                    synchronized (lock){
                        lock.notify();
                    }

                } catch (Exception e) {
                }
            }

            @Override
            public void onFailed(ARequest aRequest, com.aliyun.alink.linksdk.channel.core.base.AError aError) {
                System.out.println("mqtt dynamic registration failed");
                // Panggil operasi API yang menunggu thread.
                synchronized (lock){
                    lock.notify();
                }
            }

            @Override
            public boolean needUISafety() {
                return false;
            }
        });

        try {
            // Tunggu pesan downstream. Dalam kebanyakan kasus, pesan downstream dikembalikan dalam waktu 1 detik.
            synchronized (lock){
                lock.wait(3000);
            }

            // Langkah 4: Nonaktifkan instance pendaftaran dinamis. 
            // Jangan jalankan fungsi berikut di callback LinkKit.getInstance().deviceDynamicRegister. Jika tidak, kesalahan mungkin terjadi.
            LinkKit.getInstance().stopDeviceDynamicRegister(2000, null, new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken iMqttToken) {
                    System.out.println("mqtt dynamic registration success");
                    // Sambungkan perangkat ke IoT Platform dan inisialisasi koneksi. Untuk informasi lebih lanjut, lihat bagian "Verifikasi satu-sertifikat-per-perangkat" dari topik ini.
                }

                @Override
                public void onFailure(IMqttToken iMqttToken, Throwable throwable) {
                    System.out.println("mqtt dynamic registration failed");
                }
            });

        } catch (Exception e) {
        }

Tentukan titik akhir

Kode contoh:

// Tentukan titik akhir untuk parameter LinkKitInitParams dalam permintaan MQTT.
IoTMqttClientConfig clientConfig = new IoTMqttClientConfig();
clientConfig.channelHost = "a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com:8883";
linkKitInitParams.mqttClientConfig = clientConfig;           

Parameter:

Parameter

Contoh

Deskripsi

channelHost

a18wP******.iot-as-mqtt.cn-shanghai.aliyuncs.com:8883

Tentukan titik akhir tempat Anda ingin menyambungkan perangkat dalam format ${Endpoint}:${Nomor port}.

  • Untuk melihat titik akhir instance Enterprise Edition atau instance publik versi baru, kunjungi panel Konfigurasi Pengembangan halaman Detail Instance di konsol IoT Platform.

  • Jika Anda menggunakan instance publik versi sebelumnya, titik akhir instance publik tersebut dalam format ${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:8883.

Untuk informasi tentang instance publik versi baru dan sebelumnya, instance Enterprise Edition, dan titik akhir, lihat Lihat titik akhir instance.

Pengaturan lainnya

Anda dapat mengonfigurasi parameter berikut untuk mengatur pengaturan tambahan yang terkait dengan koneksi perangkat.

  • Koneksi MQTT

    Item

    Deskripsi

    Kode contoh

    Interval keepalive

    Tentukan interval keepalive untuk perangkat. Parameter ini menentukan periode waktu selama koneksi persisten dapat dipertahankan antara perangkat dan IoT Platform.

    MqttConfigure.setKeepAliveInterval(int interval);

    Tingkat QoS

    Tentukan tingkat Quality of Service (QoS). Tingkat QoS adalah perjanjian yang mendefinisikan tingkat kualitas pengiriman pesan antara perangkat dan IoT Platform. Nilai valid:

    • 0: Setiap pesan dikirim paling banyak sekali.

    • 1: Setiap pesan dikirim setidaknya sekali.

    - Parameter qos.
    MqttPublishRequest request = new MqttPublishRequest();
    // Nilai valid: 0 dan 1. Nilai default: 0.
    request.qos = 0;
    request.isRPC = false;
    request.topic = topic.replace("request", "response");
    String resId = topic.substring(topic.indexOf("rrpc/request/")+13);
    request.msgId = resId;
    // Konfigurasikan parameter di atas berdasarkan kebutuhan bisnis Anda. Informasi di atas disediakan hanya untuk referensi.
    request.payloadObj = "{\"id\":\"" + resId + "\", \"code\":\"200\"" + ",\"data\":{} }";

    Pesan offline

    Parameter cleanSession menentukan apakah akan menerima pesan offline.

    /**
     * Konfigurasikan parameter yang diperlukan untuk inisialisasi MQTT.
     */
    IoTMqttClientConfig config = new IoTMqttClientConfig();
    config.productKey = deviceInfoData.productKey;
    config.deviceName = deviceInfoData.deviceName;
    config.deviceSecret = deviceInfoData.deviceSecret;
    config.channelHost = pk + ".iot-as-mqtt." + deviceInfoData.region + ".aliyuncs.com:1883";
    /**
     * Tentukan apakah akan menerima pesan offline.
     * Definisi berikut sesuai dengan kode berikut: receiveOfflineMsg = !cleanSession. Secara default, pesan offline tidak dapat diterima.
     */
    config.receiveOfflineMsg = false;
    params.mqttClientConfig = config;
  • Dukungan untuk Logging dan Log4j

    Anda dapat menjalankan perintah berikut untuk mendapatkan log debugging:

    ALog.setLevel(ALog.LEVEL_DEBUG);
    MqttLogger.isLoggable = true;

    Di Link SDK untuk Java V1.2.3.1 dan versi lebih baru, Anda dapat mengonfigurasi fungsi log interceptor global untuk memproses log berdasarkan kebutuhan bisnis Anda. Misalnya, Anda dapat menggunakan Log4j untuk menyimpan log di penyimpanan persisten seperti file.

    Kode contoh:

            ALog.setLogDispatcher(new ILogDispatcher() {
                @Override
                public void log(int level, String prefix, String msg) {
                    switch (level){
                        case LEVEL_DEBUG:
                            System.out.println("debug:"+ prefix + msg);
                            break;
                        case LEVEL_INFO:
                            System.out.println("info:" + prefix + msg);
                            break;
                        case LEVEL_ERROR:
                            System.out.println("error:" + prefix + msg);
                            break;
                        case LEVEL_WARNING:
                            System.out.println("warnings:" + prefix + msg);
                            break;
                        default:
                            System.out.println("other:" + prefix + msg);
                    }
                }
            });
  • Status Koneksi dan Pendengar Pesan Downstream

    Untuk mendengarkan pesan koneksi dan pemutusan perangkat serta data yang dikirim dari IoT Platform, konfigurasikan pendengar berikut:

    IConnectNotifyListener notifyListener = new IConnectNotifyListener() {
        @Override
        public void onNotify(String connectId, String topic, AMessage aMessage) {
            // Callback untuk data downstream dari IoT Platform, seperti connectId, tipe koneksi, topik downstream dari IoT Platform, dan parameter aMessage yang menentukan isi pesan yang dikirim dari IoT Platform.
            //String pushData = new String((byte[]) aMessage.data);
            // Contoh pushData:  {"method":"thing.service.test_service","id":"123374967","params":{"vv":60},"version":"1.0.0"}
            // Parameter method menentukan tipe layanan. Parameter params menentukan konten data yang ingin Anda dorong.    
    }
        @Override
        public boolean shouldHandle(String connectId, String topic) {
            // Tentukan apakah akan memproses data downstream dari topik IoT Platform.
            // Jika topik tidak diproses, pendengar onNotify tidak dapat menerima data downstream dari topik IoT Platform.
            return true; // Tentukan logika pemrosesan data yang diperlukan untuk pendengar berdasarkan skenario bisnis Anda. 
        }
        @Override
        public void onConnectStateChange(String connectId, ConnectState connectState) {
            // Callback untuk perubahan status koneksi tipe koneksi yang sesuai. Untuk informasi tentang status koneksi, lihat ConnectState di SDK.
            // Jika SDK mendeteksi bahwa perangkat terputus dari IoT Platform karena fluktuasi jaringan, SDK secara otomatis menyambungkan ulang perangkat pada interval 1 detik, 2 detik, 4 detik, 8 detik, dan 128 detik. Setelah interval percobaan ulang mencapai 128 detik, SDK mencoba lagi pada interval 128 detik sampai perangkat tersambung kembali ke IoT Platform. 
        }
    }
    // Daftarkan pendengar untuk mendengarkan data downstream, termasuk status koneksi persisten dan data downstream dari IoT Platform.
    LinkKit.getInstance().registerOnNotifyListener(notifyListener);
                
  • Deinitialisasi

    Kode berikut menunjukkan cara melakukan deinitialisasi:

    // Hapus pendaftaran pendengar notifyListener. Pastikan Anda menghapus pendaftaran pendengar yang Anda daftarkan.
    LinkKit.getInstance().unRegisterOnNotifyListener(notifyListener);
    LinkKit.getInstance().deinit();