如何使用自定义Topic进行通信 | 您所在的位置:网站首页 › 阿里云物联网平台数据传到手机端 › 如何使用自定义Topic进行通信 |
配置设备端SDK订阅Topic。 配置设备认证信息、设置初始化连接参数、初始化连接,请参见设备发送消息给服务器中的相应示例代码。 设备要接收服务器发送的消息,还需订阅消息Topic。 配置设备端订阅Topic示例如下: //初始化成功以后的回调。 @Override public void onInitDone(InitResult initResult) { //设置订阅的Topic。 MqttSubscribeRequest request = new MqttSubscribeRequest(); request.topic = "/" + productKey + "/" + deviceName + "/user/cloudmsg"; request.isSubscribe = true; //发出订阅请求并设置订阅成功或者失败的回调函数。 LinkKit.getInstance().subscribe(request, new IConnectSubscribeListener() { @Override public void onSuccess() { System.out.println(""); } @Override public void onFailure(AError aError) { } }); //设置订阅的下行消息到来时的回调函数。 IConnectNotifyListener notifyListener = new IConnectNotifyListener() { //此处定义收到下行消息以后的回调函数。 @Override public void onNotify(String connectId, String topic, AMessage aMessage) { System.out.println( "received message from " + topic + ":" + new String((byte[])aMessage.getData())); } @Override public boolean shouldHandle(String s, String s1) { return false; } @Override public void onConnectStateChange(String s, ConnectState connectState) { } }; LinkKit.getInstance().registerOnNotifyListener(notifyListener); }其中,request.topic值需修改为具有订阅权限的自定义Topic。 配置云端SDK调用物联网平台接口Pub发布消息。参数说明,请参见Pub,使用说明,请参见Java SDK使用说明。 设置身份认证信息。 String regionId = "cn-shanghai"; String accessKey = "LTAI4GFGQvKuqHJhFaj****"; String accessSecret = "iMS8ZhCDdfJbCMeA005sieKe****"; final String productKey = "a1uzcH0****"; final String deviceName = "device1"; final String iotInstanceId = "iot-2w****";实际业务场景中,您需修改以下参数值。 参数 示例 说明 accessKey LTAI4GFGQvKuqHJhFaj**** 您的阿里云账号的AccessKey ID和AccessKey Secret。 登录物联网平台控制台,将鼠标移至账号头像上,然后单击AccessKey管理,获取AccessKey ID和AccessKey Secret。 说明如果使用RAM用户,您需授予该RAM用户管理物联网平台的权限(AliyunIOTFullAccess),否则将连接失败。授权方法请参见授权RAM用户访问物联网平台。 accessSecret iMS8ZhCDdfJbCMeA005sieKe**** productKey a1uzcH0**** 设备证书信息。您可在物联网平台控制台的设备详情页面查看。具体操作,请参见查看具体设备信息。 deviceName device1 region cn-shanghai 您物联网平台设备所在地域的Region ID。Region ID表达方法,请参见地域列表。 iotInstanceId iot-2w**** 设备所属实例的ID。 您可在控制台的实例概览页面查看。 若有ID值,必须传入该ID值。 若无实例概览页面或ID值,传入空值,即iotInstanceId = ""。 设置连接参数。 //设置client的参数。 DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKey, accessSecret); IAcsClient client = new DefaultAcsClient(profile);设置消息发布参数。 PubRequest request = new PubRequest(); request.setIotInstanceId(iotInstanceId); request.setQos(0); //设置发布消息的Topic。 request.setTopicFullName("/" + productKey + "/" + deviceName + "/user/cloudmsg"); request.setProductKey(productKey); //设置消息的内容,一定要用Base64编码,否则乱码。 request.setMessageContent(Base64.encode("{\"accuracy\":0.001,\"time\":now}"));实际业务场景中,您需修改调用接口的请求参数。详细说明,请参见Pub。 发送消息。 try { PubResponse response = client.getAcsResponse(request); System.out.println("pub success?:" + response.getSuccess()); } catch (Exception e) { System.out.println(e); }设备端接收到的消息如下: msg = [{"accuracy":0.001,"time":now}] |
CopyRight 2018-2019 实验室设备网 版权所有 |