AWS AppSync在同一视图控制器中的多个订阅无法正常工作 – iOS Swift
仅供参考我最初在AWS AppSync论坛中发布了这个问题(以防AWS将来回答)。
我一直试图制作一个简单的post应用程序,如文档中的那个,但我没有找到在一个视图控制器中处理多个订阅的文档或指南。
三个突变:onCreatePost,onUpdatePost,onDeletePost(当然还有三个订阅这些突变)
在Xcode中,我在viewDidLoad()期间调用了三个函数:subscribeToNewPosts(),subscribeToUpdatedPosts(),subscribeToDeletedPosts()
每个订阅function都可以工作并创建具有正确function的订阅,并相应地更新表视图( 如果单独使用) 。 但是,如果一个接一个地调用,则只有最后一个订阅实际上会接收数据并更新表视图。 在订阅所有三个突变后,我在AppSyncMQTClient.swift中查看了topicSubscribersDictionary的断点
func startNewSubscription(subscriptionInfo: AWSSubscriptionInfo) { var topicQueue = [String]() let mqttClient = MQTTClient() 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实例,每个订阅一个? 这是架构设计的问题吗?
schema.graphql
schema.json
mutations.graphql
queries.graphql
subscriptions.graphql
示例用例:简单的聊天应用。 新会话开始= OnCreatePostSubscription; 该会话中的新传入消息= OnUpdatePostSubscription
您是否在AppSync
使用API Key
进行授权? 如果您使用的是API Key
,则此时SDK仅支持一个订阅。 您可以切换到IAM
(Cognito Identity)或基于Cognito UserPools
的身份validation,看看多个订阅是否适合您?
我通过在startSubscriptions
startNewSubscription
调用startSubscriptions
替换为startSubscriptions
, startNewSubscription
使用API Key
进行多次订阅
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之外,还没有找到任何这种方法的副作用