Todos los productos
Search
Centro de documentos

IoT Platform:Ejemplo de registro dinámico por HTTPS

Última actualización: Sep 07, 2026

Este tema utiliza el./demos/dynreg_basic_demo.c archivo de demostración del SDK de Link en C como ejemplo para mostrarle cómo llamar a las API de Link SDK y enviar una solicitud HTTPS a IoT Platform, registrar un dispositivo de forma dinámica y obtener la información de autenticación necesaria para activar el dispositivo.

Contexto

Para obtener más información sobre el registro dinámico por HTTPS, consulte Overview of HTTPS dynamic registration.

Paso 1: Inicialización

  1. Agregue los archivos de encabezado.

    #include "aiot_state_api.h"
    #include "aiot_sysdep_api.h"
    #include "aiot_dynreg_api.h"
  2. Configure las dependencias subyacentes y la salida de registros.

        aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile);
        aiot_state_set_logcb(demo_state_logcb);
  3. Llame a aiot_dynreg_init para crear una dynreg instancia de cliente e inicializar los parámetros predeterminados.

        dynreg_handle = aiot_dynreg_init();
        if (dynreg_handle == NULL) {
            printf("aiot_dynreg_init failed\n");
            return -1;
        }

Paso 2: Configurar funciones

Llame a aiot_dynreg_init para configurar las siguientes funciones.

  1. Configure connection parameters.

  2. Configure message callbacks.

  3. Para obtener más información sobre los elementos de configuración, consulte HTTPS Dynamic Registration Configuration Items.

  4. Configure los parámetros de conexión.

    • Código de ejemplo:

          char       *url = "iot-auth.cn-shanghai.aliyuncs.com"; 
          ……
          char *product_key       = "a18wP******";
          char *product_secret    = "CpIlPVCXI7******";
          char *device_name       = "LightSwitch";
          ……
          ……
          /* Configure the server address. */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_HOST, (void *)host);
          /* Configure the server port. */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PORT, (void *)&port);
          /* Configure the ProductKey of the device. */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_KEY, (void *)product_key);
          /* Configure the ProductSecret of the device. */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_PRODUCT_SECRET, (void *)product_secret);
          /* Configure the DeviceName of the device. */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_DEVICE_NAME, (void *)device_name);
          /* Configure the security credentials for the network connection. */
          aiot_dynreg_setopt(dynreg_handle, AIOT_DYNREGOPT_NETWORK_CRED, (void *)&cred);
          ……
          ……
    • Parámetros relacionados:

      Parámetro

      Ejemplo

      Descripción

      url

      iot-auth.cn-shanghai.aliyuncs.com

      El nombre de dominio del servidor para el registro dinámico por HTTPS.

      Cambie cn-shanghai del ejemplo por el identificador de la región donde se despliega su servicio. Así obtendrá el endpoint correspondiente a su dispositivo.

      En la esquina superior izquierda de la consola de IoT Platform, consulte la región donde está desplegado su servicio. Para obtener más información sobre los identificadores de región, consulte Supported regions.

      Este ejemplo utiliza una instancia pública en la región China (Shanghai).

      Nota

      Las regiones China (Beijing) y China (Shenzhen) no son compatibles.

      product_key

      a18wP

      La ProductKey y la ProductSecret que se obtienen al crear un producto en la consola de IoT Platform. Para obtener más información, consulte Create a product.

      product_secret

      CpIlPVCXI7

      device_name

      LightSwitch

      El nombre del dispositivo. El valor de este parámetro debe coincidir con el DeviceName que especificó al agregar el dispositivo al producto en IoT Platform.

      IoT Platform verifica el DeviceName durante la activación del dispositivo. Se recomienda usar un identificador que pueda leerse directamente desde el dispositivo, como la dirección MAC, el número de identidad internacional de equipo móvil (IMEI) o el número de serie (SN), como DeviceName.

      Importante

      El nombre debe ser igual al que especificó cuando creó el dispositivo en IoT Platform.

  5. Configure la devolución de llamada de mensajes.

    1. Configure la función de devolución de llamada de mensajes.

      • Código de ejemplo:

         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);
            …… 
            ……
        }
      • Parámetros relacionados:

        Elemento de configuración

        Valor de ejemplo

        Descripción

        AIOT_DYNREGOPT_RECV_HANDLER

        demo_dynreg_recv_handler

        Establece la devolución de llamada de mensajes. Cuando se recibe un mensaje, se ejecuta el procesamiento correspondiente según la configuración de esta función de devolución de llamada.

        AIOT_DYNREGOPT_USERDATA

        &demo_info

        Establezca el contexto que se devuelve cuando se llama a demo_dynregmq_recv_handler.

    2. Defina la función de devolución de llamada de mensajes.

      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: In the callback, you must save the content of the space pointed to by the packet. After the callback returns, this space is released. */
              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;
          }
      }

Paso 3: Enviar una solicitud

Llame a aiot_dynreg_send_request, que usa los parámetros de Configure connection para enviar una solicitud de registro dinámico al servidor.

/* Send a dynamic registration request. */
    res = aiot_dynreg_send_request(dynreg_handle);
    if (res < STATE_SUCCESS) {
        printf("aiot_dynreg_send_request failed: -0x%04X\n", -res);
        return -1;
    }

Paso 4: Recibir una confirmación

Después de enviar el mensaje de solicitud de registro , IoT Platform devuelve una confirmación. A continuación, el dispositivo llama a aiot_dynreg_recv para recibir la confirmación y ejecutar la acción correspondiente según la función de devolución de llamada de mensajes.

    res = aiot_dynreg_recv(dynreg_handle);
    if (res < STATE_SUCCESS) {
        printf("aiot_dynreg_recv failed: -0x%04X\n", -res);
        return -1;
    }  

El programa de ejemplo solo imprime el resultado. Sin embargo, en un entorno de producción también debe guardar la información de autenticación de identidad del dispositivo devuelta en un archivo local. Esta información se utiliza para conectarse a IoT Platform cada vez que el dispositivo inicia sesión.

    if (demo_info.device_secret != NULL) {
        printf("device secret: %s\n", demo_info.device_secret);
        free(demo_info.device_secret);
    }

Paso 5: Salir del programa

Llame a aiot_dynreg_deinit para destruir la dynreg instancia de cliente y liberar los recursos.

    res = aiot_dynregmq_deinit(&dynregmq_handle);           

Pasos siguientes

  • Una vez configurado el archivo de ejemplo, compílelo para generar el archivo ejecutable ./output/dynreg-basic-demo.

    Para obtener más información, consulte Compile and run.

  • Para consultar una descripción detallada de los resultados de la operación, revise operational log.