我正在构建一个 iOS 应用程序,我想使用 MQTT 来订阅/发布消息到 MQTT 服务器。在研究 MQTT 库后,I found this library这似乎足以满足我的目的。请注意,我已经使用 CloudMQTT 在线制作了一个 MQTT 服务器。在弄清楚如何使 CocoaPods 工作,以及如何在我的 Podfile 上添加依赖项之后,我终于启动并运行了它。在我的第一个 View 的 viewDidLoad 函数中,我尝试通过将此行添加到我的 .h 文件来连接到我的 MQTT 服务器:
@interface VBViewController : UIViewController<MQTTSessionDelegate>
在我的 .m 文件中,在 viewDidLoad 函数中,我这样做了:
MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init];
transport.host = @"mPortNumber.cloudmqtt.com";
transport.port = portNumber;
session = [[MQTTSession alloc] init];
session.transport = transport;
session.delegate=self;
[session connectAndWaitTimeout:30];
[session subscribeToTopic"username/messagesFolder/#" atLevel:2 subscribeHandler:^(NSError *error, NSArray<NSNumber *> *gQoss){
if (error) {
NSLog(@"Subscription failed %@", error.localizedDescription);
} else {
NSLog(@"Subscription sucessfull! Granted Qos: %@", gQoss);
}
}];
但是,在运行它时,订阅失败/成功消息都没有出现。我认为我可能使用了错误的端口号,所以我使用了提供的所有三个端口,简单端口、SSL 端口和 Websockets 端口。在这些都不起作用之后,我尝试通过使用斜杠来更改文件夹目录,但这也不起作用。
我也尝试发送和接收消息,但也没有成功。
由于我还没有更新我的 iOS 开发者许可证,所以我正在使用模拟器。我不想为了弄清楚这个简单的事情而破坏我所有的 10 个部署。这可能是无法连接到我的 MQTT 服务器的原因吗?我会怀疑,因为模拟器可以连接到互联网并使用 Safari 浏览,所以它几乎可以连接到互联网。
我在初始化/导入 MQTT 方法方面是否遗漏了什么?
Best Answer-推荐答案 strong>
使用 connectAndWaitTimeout 时不会收到任何回调。
尝试使用注释中指定的 connectWithConnectHandler(connectHandler: MQTTConnectHandler!) ,你会得到:
/**
@return nothing and returns immediately. To check the connect results, register as an MQTTSessionDelegate and
- watch for events
- watch for connect or connectionRefused messages
- watch for error messages
or use the connectHandler block
*/
还要确保您不需要加密即可成功连接。
关于iOS - MQTT 客户端框架确实连接/工作,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/37238831/
|