Topik ini menggunakan file demo ./demos/dynreg_basic_demo.c dalam C Link SDK sebagai contoh untuk menunjukkan cara memanggil API Link SDK guna mengirim permintaan HTTPS ke IoT Platform, mendaftarkan perangkat secara dinamis, dan memperoleh informasi otentikasi yang diperlukan untuk aktivasi perangkat.
Informasi latar belakang
Untuk informasi selengkapnya tentang registrasi dinamis HTTPS, lihat Ikhtisar registrasi dinamis HTTPS.
Langkah 1: Inisialisasi
Tambahkan file header.
#include "aiot_state_api.h" #include "aiot_sysdep_api.h" #include "aiot_dynreg_api.h"Konfigurasikan dependensi tingkat dasar dan output log.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb);Panggil aiot_dynreg_init untuk membuat instans client
dynregdan menginisialisasi parameter default.dynreg_handle = aiot_dynreg_init(); if (dynreg_handle == NULL) { printf("aiot_dynreg_init failed\n"); return -1; }
Langkah 2: Konfigurasi fitur
Anda dapat memanggil aiot_dynreg_init untuk mengonfigurasi fitur-fitur berikut.
Untuk informasi selengkapnya tentang item konfigurasi, lihat Item Konfigurasi Registrasi Dinamis HTTPS.
Konfigurasi parameter koneksi.
Kode contoh:
char *url = "iot-auth.cn-shanghai.aliyuncs.com"; …… char *product_key = "a18wP******"; char *product_secret = "CpIlPVCXI7******"; char *device_name = "LightSwitch"; …… …… /* Konfigurasi alamat server. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_HOST, (void *)host); /* Konfigurasi port server. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PORT, (void *)&port); /* Konfigurasi ProductKey perangkat. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_KEY, (void *)product_key); /* Konfigurasi ProductSecret perangkat. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_SECRET, (void *)product_secret); /* Konfigurasi DeviceName perangkat. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_DEVICE_NAME, (void *)device_name); /* Konfigurasi kredensial keamanan untuk koneksi jaringan. */ aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_NETWORK_CRED, (void *)&cred); …… ……Parameter terkait:
Parameter
Contoh
Deskripsi
url
iot-auth.cn-shanghai.aliyuncs.com
Nama domain server untuk registrasi dinamis HTTPS.
Anda dapat mengganti
cn-shanghaipada contoh dengan ID wilayah tempat layanan Anda dideploy untuk memperoleh titik akhir bagi perangkat Anda.Di pojok kiri atas Konsol IoT Platform, lihat wilayah tempat layanan Anda dideploy. Untuk informasi selengkapnya tentang ID wilayah, lihat Wilayah yang didukung.
Contoh ini menggunakan instans publik di wilayah Tiongkok (Shanghai).
CatatanWilayah Tiongkok (Beijing) dan Tiongkok (Shenzhen) tidak didukung.
product_key
a18wP******
KunciProduk dan RahasiaProduk yang diperoleh saat Anda membuat Produk di Konsol IoT Platform. Untuk informasi selengkapnya, lihat Buat Produk.
product_secret
CpIlPVCXI7******
device_name
LightSwitch
Nama perangkat. Nilai parameter ini harus sama dengan NamaPerangkat yang Anda tentukan saat menambahkan perangkat ke Produk di IoT Platform.
IoT Platform memverifikasi NamaPerangkat selama aktivasi perangkat. Kami menyarankan agar Anda menggunakan ID yang dapat langsung dibaca dari perangkat, seperti alamat MAC, International Mobile Equipment Identity (IMEI), atau nomor seri (SN), sebagai NamaPerangkat.
PentingNama tersebut harus sama dengan yang ditentukan saat Anda membuat perangkat di IoT Platform.
Konfigurasi callback pesan.
Konfigurasi fungsi callback pesan.
Kode contoh:
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 terkait:
Item konfigurasi
Nilai contoh
Deskripsi
AIOT_DYNREGOPT_RECV_HANDLER
demo_dynreg_recv_handler
Menetapkan callback pesan. Saat pesan diterima, pemrosesan yang sesuai dilakukan berdasarkan pengaturan fungsi callback ini.
AIOT_DYNREGOPT_USERDATA
&demo_info
Menetapkan konteks yang akan dikembalikan saat
demo_dynregmq_recv_handlerdipanggil.
Definisikan fungsi callback 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: Di dalam callback, Anda harus menyimpan konten dari ruang yang ditunjuk oleh packet. Setelah callback dikembalikan, ruang ini dilepas. */ 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 aiot_dynreg_send_request, yang menggunakan parameter koneksi untuk mengirim permintaan registrasi dinamis ke server.
/* Kirim permintaan registrasi dinamis. */
res = aiot_dynreg_send_request(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_send_request failed: -0x%04X\n", -res);
return -1;
}Langkah 4: Terima acknowledgement
Setelah pesan permintaan registrasi dikirim, IoT Platform mengembalikan acknowledgement. Perangkat kemudian memanggil aiot_dynreg_recv untuk menerima acknowledgement tersebut dan menjalankan aksi yang sesuai berdasarkan fungsi callback pesan.
res = aiot_dynreg_recv(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_recv failed: -0x%04X\n", -res);
return -1;
} Program contoh hanya melakukan operasi pencetakan. Namun, di lingkungan produksi, Anda juga harus menyimpan informasi otentikasi identitas perangkat yang dikembalikan ke file lokal. Informasi ini digunakan untuk menghubungkan ke IoT Platform setiap kali perangkat login.
if (demo_info.device_secret != NULL) {
printf("device secret: %s\n", demo_info.device_secret);
free(demo_info.device_secret);
}Langkah 5: Keluar dari program
Panggil aiot_dynreg_deinit untuk menghapus instans client dynreg dan melepas sumber daya.
res = aiot_dynregmq_deinit(&dynregmq_handle); Langkah selanjutnya
Setelah Anda mengonfigurasi file contoh, kompilasi file tersebut untuk menghasilkan file yang dapat dieksekusi
./output/dynreg-basic-demo.Untuk informasi selengkapnya, lihat Kompilasi dan jalankan.
Untuk deskripsi hasil operasi secara rinci, lihat log operasional.