仅供参考我在AWS AppSync论坛中发布了此问题originally(以防AWS将来回答)。
我一直在努力创建一个简单的帖子应用程序,就像docs中的那个,但我找不到在一个视图控制器中处理多个订阅的文档或指南。
三个突变:onCreatePost,onUpdatePost,onDeletePost (当然还有三个订阅这些突变)
在Xcode中,我在viewDidLoad()期间调用了三个函数:subscribeToNewPosts(),subscribeToUpdatedPosts(),subscribeToDeletedPosts()
每个订阅功能都可以运行并创建具有正确功能的订阅,并相应地更新表格视图如果单独使用。但是,如果一个接一个地调用,则只有最后一个订阅实际上会接收数据并更新表视图。在订阅所有三个突变后,我在AppSyncMQTTClient.swift中查看了topicSubscribersDictionary的断点
func startNewSubscription(subscriptionInfo: AWSSubscriptionInfo) {
var topicQueue = [String]()
let mqttClient = MQTTClient<AnyObject, AnyObject>()
mqttClient.clientDelegate = self
for topic in subscriptionInfo.topics {
if topicSubscribersDictionary[topic] != nil {
// if the client wants subscriptions and is allowed we add it to list of subscribe
topicQueue.append(topic)
}
}
mqttClients.append(mqttClient)
mqttClientsWithTopics[mqttClient] = topicQueue
mqttClient.connect(withClientId: subscriptionInfo.clientId, toHost: subscriptionInfo.url, statusCallback: nil)
}
并且所有三个订阅实际上都在字典中......
我是否需要多个appSyncClient实例,每个订阅一个?这是架构设计的问题吗?
示例用例:简单的聊天应用。新会话开始= OnCreatePostSubscription;该对话中的新传入消息= OnUpdatePostSubscription
答案 0 :(得分:4)
您是否在API Key
中使用AppSync
进行授权?如果您使用的是API Key
,则此时SDK仅支持一个订阅。您可以切换到IAM
(Cognito Identity)或基于Cognito UserPools
的身份验证,看看多个订阅是否适合您?
答案 1 :(得分:0)
我设法让多个订阅与API Key
合作,将startSubscriptions
内的startNewSubscription
调用替换为AWSAppSyncSubscriptionWatcher
if let subscriptionInfo = subscriptionResult.subscrptionInfo {
self.subscriptionTopic = subscriptionResult.newTopics
self.client?.addWatcher(watcher: self, topics: subscriptionResult.newTopics!, identifier: self.uniqueIdentifier)
//self.client?.startSubscriptions(subscriptionInfo: subscriptionInfo)
subscriptionInfo.forEach { self.client?.startNewSubscription(subscriptionInfo: $0) }
}
除了要求分叉iOS SKD
之外,还没有找到这种方法的任何副作用