【发布时间】:2018-01-02 15:04:41
【问题描述】:
我正在尝试从 IBM IoT 平台订阅事件。
我测试的示例来自 IBM 博客:https://www.ibm.com/developerworks/library/iot-mobile-phone-iot-device-bluemix-apps-trs/。在这个链接中,可以下载代码。
通过此示例,Android 应用程序可以成功连接并将事件发布到 IBM IoT 平台,但是当我尝试“订阅”时,总是收到错误“连接丢失”。是什么导致了这个问题?谢谢!
相关代码为:
public IMqttToken subscribeToEvent(String deviceType, String deviceId, String event, String format, int qos, Object userContext, IMqttActionListener listener) throws MqttException {
String eventTopic = "iot-2/type/" + deviceType + "/id/" + deviceId + "/evt/" + event + "/fmt/"+format;
return subscribe(eventTopic, qos, userContext, listener);
}
public static void subscribeEvent(Context context,String event) {
Log.v(TAG, ".subscribeEvent() entered")
try {
MyIoTActionListener listener = new MyIoTActionListener(context, Constants.ActionStateStatus.SUBSCRIBE);
IoTClient iotClient = IoTClient.getInstance(context);
String deviceType = "Android";
String deviceId = "...";
iotClient.subscribeToEvent(deviceType, deviceId, event, "json", 0, context,listener);
} catch (MqttException e) {
Log.d(TAG, ".SubscribeEvent() received exception on SubscribeEvent()");
}
}
连接网址是:
String connectionURI = "tcp://" + this.getOrganization() + ".messaging.internetofthings.ibmcloud.com:1883";
ssl 无法正常工作。
【问题讨论】:
-
您如何进行身份验证?您是否使用创建设备 ID 时生成的令牌?如果您订阅主题字符串 eventTopic = "iot-2/type/" + deviceType + "/id/" + deviceId + "/evt/" + event + "/fmt/"+format;不允许并且连接已关闭。尝试生成 API 密钥和令牌,并使用它们进行身份验证和订阅。
-
谢谢伊丹!现在我已经解决了这个问题。设备客户端只能发布其事件和订阅命令。应用程序客户端可以发布和订阅事件和命令。当我尝试使用设备客户端订阅事件时,显然失败了。
-
是的,你是对的,这就是为什么我问身份验证是如何完成的。很高兴它现在可以工作了。
标签: android ibm-cloud mqtt watson-iot