# 广播通信使用示例
#### Java SDK使用示例
本文介绍如何使用JAVA SDK进行广播通信的开发。
#### 开发环境要求
本示例使用的开发环境为JDK 1.8及以上版本。
#### 配置应用侧SDK
1. 配置Maven依赖。
   ```
   <dependency>
       <groupId>com.huaweicloud.sdk</groupId>
       <artifactId>huaweicloud-sdk-core</artifactId>
       <version>[3.0.40-rc, 3.2.0)</version>
   </dependency>
   <dependency>
       <groupId>com.huaweicloud.sdk</groupId>
       <artifactId>huaweicloud-sdk-iotda</artifactId>
       <version>[3.0.40-rc, 3.2.0)</version>
   </dependency>
   ```
   
2. 下发广播消息完整样例如下，topic必须为"$oc/broadcast/"前缀，消息内容需要使用BASE64编码。
   ```
   public class BroadcastMessageSolution {
       // REGION_ID：如果是上海一，请填写"cn-east-3"；如果是北京四，请填写"cn-north-4";如果是华南广州，请填写"cn-south-4"
       private static final String REGION_ID = "<YOUR REGION ID>";
       // ENDPOINT：请在控制台的"总览"界面的"平台接入地址"中查看“应用侧”的https接入地址。
       private static final String ENDPOINT = "<YOUR ENDPOINT>";
       // 标准版/企业版：需自行创建Region对象
       public static final Region REGION_CN_NORTH_4 = new Region(REGION_ID, ENDPOINT);
       public static void main(String[] args) {
           String ak = "<YOUR AK>";
           String sk = "<YOUR SK>";
           String projectId = "<YOUR PROJECTID>";
           // 创建认证
           ICredential auth = new BasicCredentials().withDerivedPredicate(AbstractCredentials.DEFAULT_DERIVED_PREDICATE)
               .withAk(ak)
               .withSk(sk)
               .withProjectId(projectId);
           // 创建IoTDAClient实例并初始化
           IoTDAClient client = IoTDAClient.newBuilder().withCredential(auth)
               // 基础版：请选择IoTDARegion中的Region对象
               //.withRegion(IoTDARegion.CN_NORTH_4)
               // 标准版/企业版：需自行创建Region对象
               .withRegion(REGION_CN_NORTH_4).build();
           // 实例化请求对象
           BroadcastMessageRequest request = new BroadcastMessageRequest();
           DeviceBroadcastRequest body = new DeviceBroadcastRequest();
           body.withMessage(Base64.getEncoder().encodeToString("hello".getBytes()));
           body.withTopicFullName("$oc/broadcast/test");
           request.withBody(body);
           try {
               BroadcastMessageResponse response = client.broadcastMessage(request);
               System.out.println(response.toString());
           } catch (ConnectionException e) {
               e.printStackTrace();
           } catch (RequestTimeoutException e) {
               e.printStackTrace();
           } catch (ServiceResponseException e) {
               e.printStackTrace();
               System.out.println(e.getHttpStatusCode());
               System.out.println(e.getRequestId());
               System.out.println(e.getErrorCode());
               System.out.println(e.getErrorMsg());
           }
       }
   }
   ```
   表1参数说明 
   | 参数                      | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   |:---|:---|
   | ak                     | 您的华为云账号访问密钥ID（Access Key ID）。请在华为云控制台"我的凭证 \> 访问密钥"页面上创建和查看您的 AK/SK。更多信息请查看[访问密钥](https://support.huaweicloud.com/usermanual-ca/ca_01_0003.html)。                                                                                                                                                                                                                                                                                                                             |
   | sk                     | 您的华为云账号秘密访问密钥（Secret Access Key）。                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | projectId               | 项目ID。获取方法请参见[获取项目ID](https://support.huaweicloud.com/api-iothub/iot_06_v5_1001.html)。                                                                                                                                                                                                                                                                                                                                                                                          |
   | IoTDARegion.CN_NORTH_4 | 请替换为您要访问的物联网平台的区域，当前物联网平台可以访问的区域，在SDK代码[IoTDARegion.java](https://github.com/huaweicloud/huaweicloud-sdk-java-v3/tree/master/services/iotda/src/main/java/com/huaweicloud/sdk/iotda/v5/region/IoTDARegion.java)中已经定义。 您可以在控制台上查看当前服务所在区域名称，区域名称、区域和终端节点的对应关系，具体步骤请参考[平台对接信息](https://support.huaweicloud.com/usermanual-iothub/iot_01_01271.html#ZH-CN_TOPIC_0000001514571325__section436212919379)。 |
   | REGION_ID              | 请替换为您要访问的物联网平台的区域。如果是上海一，请填写"cn-east-3"；如果是北京四，请填写"cn-north-4";如果是华南广州，请填写"cn-south-4"。                                                                                                                                                                                                                                                                                                                                                                                         |
   | ENDPOINT                 | 请在控制台的"总览"界面的"接入信息"中查看"应用接入"的https接入地址。                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | DEVICE_ID              | 下发消息的设备ID，用于唯一标识一个设备，在注册设备时由物联网平台分配获得。 取值范围：长度不超过128，只允许字母、数字、下划线（_）、连接符（-）的组合。                                                                                                                                                                                                                                                                                                                                                                                                |
      
   
 
#### 配置设备侧SDK
1. 配置设备侧SDK的Maven依赖。
   ```
   <dependency>
   <groupId>com.huaweicloud</groupId>
   <artifactId>iot-device-sdk-java</artifactId>
   <version>1.1.4</version>
   </dependency>
   ```
   
2. 配置设备侧SDK，设备连接参数。
   ```
   //加载iot平台的ca证书，获取链接参考：证书资源。
   URL resource = BroadcastMessageSample.class.getClassLoader().getResource("ca.jks");
   File file = new File(resource.getPath());
   //注意格式为：ssl://域名信息:端口号。
   //域名获取方式：登录华为云IoTDA控制台左侧导航栏“总览”页签，在选择的实例基本信息中，单击“接入信息”。选择8883端口对应的接入域名。
   String serverUrl = "ssl://<localhost>:8883";
   //在IoT平台创建的设备ID。
   String deviceId = "<deviceId>";
   //设备ID对应的密钥。
   String deviceSecret = "<secret>";
   //创建设备
   IoTDevice device = new IoTDevice(serverUrl, deviceId, deviceSecret, file);
   if (device.init() != 0) {
       return;
   }
   ```
   
3. 订阅广播Topic，广播Topic需使用"$oc/broadcast/"前缀。
   ```
   device.getClient().subscribeTopic("$oc/broadcast/test", null, rawMessage -> {
       log.info(" on receive message topic : {} , payload : {}", rawMessage.getTopic(),
           new String(rawMessage.getPayload()));
       rawMessage.getPayload();
   }, 0);
   ```
   
 
#### 测试验证
先运行设备侧 SDK代码，使设备上线，并订阅广播topic。然后运行应用侧SDK代码，调用broadcastMessage接口向设备发送广播消息，设备侧收到的广播消息样例如下：
图1广播消息样例   
![](https://support.huaweicloud.com/usermanual-iothub/figure/zh-cn_image_0000002567938492.png "点击放大")
