Cette rubrique utilise le fichier de démonstration ./demos/dynreg_basic_demo.c du SDK Link C pour illustrer comment appeler les API du SDK Link afin d' envoyer une requête HTTPS à IoT Platform, d'enregistrer un appareil de manière dynamique et d'obtenir les informations d'authentification nécessaires à l'activation de l'appareil.
Informations générales
Pour plus d'informations sur l'enregistrement dynamique HTTPS, consultez la rubrique Présentation de l'enregistrement dynamique HTTPS.
Étape 1 : Initialisation
-
Ajoutez les fichiers d'en-tête.
#include "aiot_state_api.h" #include "aiot_sysdep_api.h" #include "aiot_dynreg_api.h" -
Configurez les dépendances sous-jacentes et la sortie des journaux.
aiot_sysdep_set_portfile(&g_aiot_sysdep_portfile); aiot_state_set_logcb(demo_state_logcb); -
Appelez aiot_dynreg_init pour créer une instance de client
dynreget initialiser les paramètres par défaut.dynreg_handle = aiot_dynreg_init(); if (dynreg_handle == NULL) { printf("aiot_dynreg_init failed\n"); return -1; }
Étape 2 : Configuration des fonctionnalités
Appelez aiot_dynreg_init pour configurer les fonctionnalités suivantes.
Pour plus d'informations sur les éléments de configuration, consultez la rubrique Éléments de configuration de l'enregistrement dynamique HTTPS.
-
Configurez les paramètres de connexion.
-
Exemple de code :
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); …… …… -
Paramètres associés :
Paramètre
Exemple
Description
url
iot-auth.cn-shanghai.aliyuncs.com
Nom de domaine du serveur pour l'enregistrement dynamique HTTPS.
Vous pouvez remplacer
cn-shanghaidans l'exemple par l'ID de la région où votre service est déployé afin d'obtenir l'endpoint de votre appareil.Dans le coin supérieur gauche de la console IoT Platform, vérifiez la région de déploiement de votre service. Pour plus d'informations sur les ID de région, consultez la rubrique Régions prises en charge.
Cet exemple utilise une instance publique dans la région Chine (Shanghai).
RemarqueLes régions Chine (Pékin) et Chine (Shenzhen) ne sont pas prises en charge.
product_key
a18wP
ProductKey et ProductSecret obtenus lors de la création d'un produit dans la console IoT Platform. Pour plus d'informations, consultez la rubrique Créer un produit.
product_secret
CpIlPVCXI7
device_name
LightSwitch
Nom de l'appareil. La valeur de ce paramètre doit correspondre au DeviceName spécifié lors de l'ajout de l'appareil au produit dans IoT Platform.
IoT Platform vérifie le DeviceName lors de l'activation de l'appareil. Nous vous recommandons d'utiliser un identifiant directement lisible depuis l'appareil, tel que l'adresse MAC, l'IMEI (International Mobile Equipment Identity) ou le numéro de série (SN), comme DeviceName.
ImportantLe nom doit être identique à celui spécifié lors de la création de l'appareil dans IoT Platform.
-
-
Configurez le rappel de message.
-
Configurez la fonction de rappel de message.
-
Exemple de code :
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); …… …… } -
Paramètres associés :
|
**Élément de configuration**
|
**Valeur d'exemple**
|
**Description**
| | --- | --- | --- | |
AIOT_DYNREGOPT_RECV_HANDLER
|
demo_dynreg_recv_handler
|
Définit le rappel de message. Lorsqu'un message est reçu, le traitement correspondant est effectué selon les paramètres de cette fonction de rappel.
| |
AIOT_DYNREGOPT_USERDATA
|
&demo_info
|
Définit le contexte à renvoyer lorsque `demo_dynregmq_recv_handler` est appelé.
|
-
-
Définissez la fonction de rappel de message.
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; } }
-
Étape 3 : Envoi d'une requête
Appelez aiot_dynreg_send_request, qui utilise les paramètres Configurer la connexion pour envoyer une requête d'enregistrement dynamique au serveur.
/* 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;
}
Étape 4 : Réception d'un accusé de réception
Une fois le message de requête d'enregistrement envoyé, IoT Platform renvoie un accusé de réception. L'appareil appelle ensuite aiot_dynreg_recv pour recevoir l'accusé de réception et exécuter l'action correspondante en fonction de la fonction de rappel de message.
res = aiot_dynreg_recv(dynreg_handle);
if (res < STATE_SUCCESS) {
printf("aiot_dynreg_recv failed: -0x%04X\n", -res);
return -1;
}
Le programme d'exemple se contente d'imprimer les informations. Toutefois, dans un environnement de production, vous devez également enregistrer les informations d'authentification de l'identité de l'appareil renvoyées dans un fichier local. Ces informations servent à la connexion à IoT Platform à chaque ouverture de session de l'appareil.
if (demo_info.device_secret != NULL) {
printf("device secret: %s\n", demo_info.device_secret);
free(demo_info.device_secret);
}
Étape 5 : Sortie du programme
Appelez aiot_dynreg_deinit pour détruire l'instance de client dynreg et libérer les ressources.
res = aiot_dynregmq_deinit(&dynregmq_handle);
Étapes suivantes
-
Après avoir configuré le fichier d'exemple, compilez-le pour générer le fichier exécutable
./output/dynreg-basic-demo.Pour plus d'informations, consultez la rubrique Compiler et exécuter.
Pour une description détaillée des résultats d'opération, consultez le journal d'opérations.