Topik ini menjelaskan cara memanggil operasi API dari Link SDK untuk C guna mengirim permintaan HTTPS ke IoT Platform dan mendaftarkan perangkat secara dinamis serta mendapatkan informasi verifikasi yang diperlukan untuk mengaktifkan perangkat. Dalam contoh ini, digunakan file kode contoh bernama ./demos/dynreg_basic_demo.c.
Informasi latar belakang
Untuk detail lebih lanjut tentang pendaftaran dinamis berbasis HTTPS, lihat Ikhtisar.
Langkah 1: Inisialisasi instance klien
Tambahkan file header.
#include "aiot_state_api.h" #include "aiot_sysdep_api.h" #include "aiot_dynreg_api.h"Tambahkan dependensi dasar dan konfigurasikan fitur output log.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);Panggil fungsi aiot_dynreg_init untuk membuat instance klien bernama
dynregdan mengonfigurasi parameter default.dynreg_handle = aiot_dynreg_init(); if (dynreg_handle == NULL) { printf("aiot_dynreg_init gagal\n"); return -1; }
Langkah 2: Konfigurasikan fitur yang diperlukan
Gunakan fungsi aiot_dynreg_init untuk mengonfigurasi item berikut:
Untuk informasi lebih lanjut, lihat Pendaftaran Dinamis Berbasis HTTPS.
Konfigurasikan parameter koneksi.
Contoh kode:
char *url = "iot-auth.cn-shanghai.aliyuncs.com"; …… char *product_key = "a18wP******"; char *product_secret = "CpIlPVCXI7******"; char *device_name = "LightSwitch"; …… …… /* Tentukan titik akhir server. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_HOST, (void *)host); /* Tentukan port server. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PORT, (void *)&port); /* Tentukan ProductKey produk tempat perangkat milik. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_KEY, (void *)product_key); /* Tentukan ProductSecret produk tempat perangkat milik. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_SECRET, (void *)product_secret); /* Tentukan DeviceName perangkat. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_DEVICE_NAME, (void *)device_name); /* Tentukan kredensial keamanan koneksi. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_NETWORK_CRED, (void *)&cred); …… ……Parameter:
Parameter
Contoh
Deskripsi
url
iot-auth.cn-shanghai.aliyuncs.com
Titik akhir server HTTPS.
Ganti
cn-shanghaidalam kode contoh dengan ID wilayah tempat IoT Platform diaktifkan untuk mendapatkan titik akhir yang ingin Anda hubungkan dengan perangkat Anda.Anda dapat melihat wilayah di pojok kiri atas konsol IoT Platform. Untuk informasi lebih lanjut tentang ID wilayah, lihat .Wilayah yang didukung.
Dalam contoh ini, digunakan instans publik yang berada di wilayah China (Shanghai).
CatatanWilayah China (Beijing) dan China (Shenzhen) tidak didukung.
product_key
a18wP******
ProductKey dan ProductSecret yang Anda simpan saat membuat produk di konsol IoT Platform. Untuk informasi lebih lanjut, lihat Buat produk.
product_secret
CpIlPVCXI7******
device_name
LightSwitch
DeviceName perangkat. Nilai parameter ini harus sama dengan DeviceName yang Anda tentukan saat menambahkan perangkat ke produk di IoT Platform.
IoT Platform memeriksa DeviceName ketika perangkat memulai permintaan aktivasi. Kami merekomendasikan menggunakan pengenal yang dapat diperoleh dari perangkat sebagai DeviceName. Pengenal tersebut bisa berupa alamat MAC, Identitas Peralatan Bergerak Internasional (IMEI), atau nomor seri (SN) perangkat.
PentingNilai parameter ini harus sama dengan DeviceName yang Anda tentukan saat menambahkan perangkat di konsol IoT Platform.
Konfigurasikan callback pesan.
Tentukan fungsi callback untuk pesan.
Contoh Kode:
int main(int argc, char *argv[]) { …… …… aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_RECV_HANDLER, (void *)demo_dynreg_recv_handler); aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_USERDATA, (void *)&demo_info); …… …… }Parameter:
Parameter
Contoh
Deskripsi
AIOT_DYNREGOPT_RECV_HANDLER
demo_dynreg_recv_handler
Fungsi callback pesan. Ketika pesan diterima, fungsi callback dipanggil untuk melakukan operasi yang diperlukan.
AIOT_DYNREGOPT_USERDATA
&demo_info
Konteks. Ketika fungsi
demo_dynregmq_recv_handlerdipanggil, nilai yang diperoleh dari fungsi dikembalikan.
Definisikan fungsi callback untuk pesan.
void demo_dynreg_recv_handler(void *handle, const aiot_dynreg_recv_t *packet, void *userdata) { demo_info_t *demo_info = (demo_info_t *)userdata; switch (packet->type) { case AIOT_DYNREGRECV_STATUS_CODE: { demo_info->code = packet->data.status_code.code; } break; /* TODO: Anda harus menyimpan ruang ke mana parameter paket dalam callback menunjuk. Setelah callback diimplementasikan, ruang tersebut dilepaskan. */ case AIOT_DYNREGRECV_DEVICE_INFO: { demo_info->device_secret = malloc(strlen(packet->data.device_info.device_secret) + 1); if (demo_info->device_secret != NULL) { memset(demo_info->device_secret, 0, strlen(packet->data.device_info.device_secret) + 1); memcpy(demo_info->device_secret, packet->data.device_info.device_secret, strlen(packet->data.device_info.device_secret)); } } break; default: { } break; } }
Langkah 3: Kirim permintaan
Panggil operasi aiot_dynregmq_send_request untuk mengirim permintaan pendaftaran dinamis ke server. Untuk detail konfigurasi parameter, lihat Konfigurasikan parameter koneksi.
/* Kirim permintaan pendaftaran dinamis. */
res = aiot_dynreg_send_request(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_send_request gagal: -0x%04X\n", -res);
return -1;
}Langkah 4: Terima respons
Setelah permintaan pendaftaran dikirim, IoT Platform mengembalikan respons. Perangkat memanggil operasi aiot_dynreg_recv untuk menerima data respons, lalu memanggil fungsi callback pesan guna memproses data tersebut.
res = aiot_dynreg_recv(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_recv gagal: -0x%04X\n", -res);
return -1;
} Dalam contoh ini, data respons dicetak. Anda perlu menentukan logika untuk menyimpan informasi verifikasi perangkat yang dikembalikan. Informasi ini digunakan saat perangkat terhubung ke IoT Platform.
if (demo_info.device_secret != NULL) {
printf("rahasia perangkat: %s\n", demo_info.device_secret);
free(demo_info.device_secret);
}Langkah 5: Keluar dari program
Panggil fungsi aiot_dynreg_deinit untuk menghapus instance klien dynreg dan melepaskan sumber daya terkait.
res = aiot_dynregmq_deinit(&dynregmq_handle);
Apa yang harus dilakukan selanjutnya
Setelah mengonfigurasi file kode contoh, kompilasikan file tersebut untuk menghasilkan file yang dapat dieksekusi. Dalam contoh ini, file yang dihasilkan adalah
./output/mqtt-basic-demo.Untuk informasi lebih lanjut, lihat Siapkan Lingkungan.
Untuk informasi lebih lanjut mengenai hasil eksekusi, lihat Lihat log.