Cloud-to-device communications guidance
IoT Hub provides three options for device apps to expose functionality to a back-end app:
Direct methods for communications that require immediate confirmation of the result. Direct methods are often used for interactive control of devices such as turning on a fan.
Twin's desired properties for long-running commands intended to put the device into a certain desired state. For example, set the telemetry send interval to 30 minutes.
Cloud-to-device messages for one-way notifications to the device app.
The features described in this article are available only in the standard tier of IoT Hub. For more information about the basic and standard/free IoT Hub tiers, see Choose the right IoT Hub tier.
Here is a detailed comparison of the various cloud-to-device communication options.
|Direct methods||Twin's desired properties||Cloud-to-device messages|
|Scenario||Commands that require immediate confirmation, such as turning on a fan.||Long-running commands intended to put the device into a certain desired state. For example, set the telemetry send interval to 30 minutes.||One-way notifications to the device app.|
|Data flow||Two-way. The device app can respond to the method right away. The solution back end receives the outcome contextually to the request.||One-way. The device app receives a notification with the property change.||One-way. The device app receives the message|
|Durability||Disconnected devices are not contacted. The solution back end is notified that the device is not connected.||Property values are preserved in the device twin. Device will read it at next reconnection. Property values are retrievable with the IoT Hub query language.||Messages can be retained by IoT Hub for up to 48 hours.|
|Targets||Single device using deviceId, or multiple devices using jobs.||Single device using deviceId, or multiple devices using jobs.||Single device by deviceId.|
|Size||Maximum direct method payload size is 128 KB.||Maximum desired properties size is 32 KB.||Up to 64 KB messages.|
|Frequency||High. For more information, see IoT Hub limits.||Medium. For more information, see IoT Hub limits.||Low. For more information, see IoT Hub limits.|
|Protocol||Available using MQTT or AMQP.||Available using MQTT or AMQP.||Available on all protocols. Device must poll when using HTTPS.|
Learn how to use direct methods, desired properties, and cloud-to-device messages in the following tutorials: