我正在研究一个连接到GetStream的函数,以便获取所选供稿组的活动。问题在于,GetStream返回的是提要组中的所有活动,而不是特定子弹的活动。用MySQL术语,它忽略了WHERE UUID = uuid:)
这是我当前正在使用的返回所有活动的代码,在设置它之前,我尝试将elementFeed设置为nil,但这也不起作用。
func getStream(uuid: String, completion: @escaping([StreamActivity], Bool, APPError?) -> Void) {
let group = DispatchGroup()
group.enter()
var activities = [StreamActivity]()
elementFeed = nil
elementFeed = Client.shared.flatFeed(feedSlug: "element", userId: uuid)
elementFeed?.get(typeOf: StreamActivity.self, enrich: false, pagination: .limit(20), ranking: "", includeReactions: [], completion: { results in
if let foundActivities = results.value?.results {
activities.append(contentsOf: foundActivities)
group.leave()
} else {
completion([], false, .GetDiscussions)
group.leave()
}
})
group.notify(queue: .main) {
self.isUserFollowing(uuid: uuid) { (following) in
completion(activities, following, nil)
}
}
}
这是用于创建活动的代码:
func addActivity(type: ActivityType, body: String?, uuid: String, completion: @escaping(Bool, APPError?) -> Void) {
var feed: FeedId?
var originFeed: FeedId?
switch type {
case .comment:
feed = FeedId(feedSlug: "element", userId: uuid)
case .reply:
originFeed = FeedId(feedSlug: "comment", userId: uuid)
default:
break
}
let activity = StreamActivity(actor: StreamUser.current!, verb: type.rawValue, object: "element:\(uuid)", body: body!)
activity.feedIds = [feed!]
elementFeed = Client.shared.flatFeed(feedSlug: "element", userId: uuid)
elementFeed?.add(activity, completion: { (result) in
if result.error == nil {
completion(true, nil)
} else {
completion(false, .PostComment)
}
print("GETSTREAM: Activity added:\(result)")
})
}
Stream Feed API不允许您读取Feed之外的活动。提要已实现,因此当您执行这样的呼叫时
Client.shared.flatFeed(feedSlug: "element", userId: uuid)
您没有执行查询(即SELECT * FROM活动,其中slug =?AND userId =?),但您正在读取(直接通过目标或从后面的提要)添加到元素的活动:$ uuid提要。
如果提要包含错误的活动,那是因为用于添加活动或创建关注关系的逻辑出了问题。
[当您阅读提要时,Stream会添加有关每个活动来源的信息;这样的信息存储在称为“来源”的字段中。如果原始字段丢失/为空,则表示该活动已直接添加到Feed中;如果活动是通过关注关系添加的,则“来源”字段将设置为活动来源的Feed ID。
例如:
如果元素:x跟随用户:z;用户Z添加的所有活动都会传播到element:x,并且在该供稿上的原点=“ user:z”。
您可以使用“来源”字段获取有关该活动为何在Feed中的更多信息;应该是非常有用的信息,以找出集成问题所在。