Swift GetStream添加活动由于403而失败
正在尝试使用Swift的GetStream,我无法添加活动Swift GetStream添加活动由于403而失败,swift,getstream-io,Swift,Getstream Io,正在尝试使用Swift的GetStream,我无法添加活动 class MyActivity : Activity {} ... let client = Client(apiKey: <MyApiKey>, appId: <MyApiKey>, token: <Token>) let ericFeed = client.flatFeed(feedSlug: "user", userId: "eric") let activity = MyActivity
class MyActivity : Activity {}
...
let client = Client(apiKey: <MyApiKey>, appId: <MyApiKey>, token: <Token>)
let ericFeed = client.flatFeed(feedSlug: "user", userId: "eric")
let activity = MyActivity(actor: "eric", verb: "waves", object: "picture:10", foreignId: "picture:10")
ericFeed.add(activity) { result in
print("!result!")
print(result)
}
我在仪表板上接收到以下日志:
有几件事需要记住。 首先,当请求结束时,您的客户机可能被解除分配,这就是为什么没有调用回调,但是日志可以显示请求已完成。我建议您使用一个共享的客户端实例,这样会很容易使用。要设置共享客户端,您需要编写以下内容:
Client.config = .init(apiKey: "<MyApiKey>", appId: "<MyApiKey>", token: "<Token>")
更多信息请访问
我建议您仅使用feedSlug
参数创建提要,并且流userId
将取自令牌。但是它是可选的,因为currentUserId
是可选的。例如:
let ericFeed = Client.shared.flatFeed(feedSlug: "user")
ericFeed?.add(activity)
对于您的活动,流客户端应该始终使用当前流用户作为参与者。因此,我们需要更新您的MyActivity
的定义
最后,以下是您的代码:
// Define your activity.
class MyActivity: EnrichedActivity<GetStream.User, String, DefaultReaction> {
// ...
}
// Setup Stream Client.
Client.config = .init(apiKey: <MyApiKey>, appId: <MyApiKey>, token: <Token>)
// Setup the current user.
Client.shared.getCurrentUser {
let ericFeed = Client.shared.flatFeed(feedSlug: "user")
let activity = MyActivity(actor: Client.shared.currentUser!, verb: "waves", object: "picture:10", foreignId: "picture:10")
ericFeed?.add(activity) { result in
print("!result!")
print(result)
}
}
//定义您的活动。
类MyActivity:EnrichedActivity{
// ...
}
//安装流客户端。
Client.config=.init(apiKey:,appId:,token:)
//设置当前用户。
Client.shared.getCurrentUser{
让ericFeed=Client.shared.flatFeed(feedSlug:“用户”)
让activity=MyActivity(actor:Client.shared.currentUser!,动词:“waves”,对象:“picture:10”,异化为:“picture:10”)
ericFeed?添加(活动){结果为
打印(“!结果!”)
打印(结果)
}
}
您能分享生成代币的代码吗?FTR代币由三部分组成,三部分之间用点分隔(a.b.c)。如果您编辑了最后一部分(例如a.b.[编辑]),则可以安全地共享实际令牌。你能做到吗?@TommasoBarbugli当然,完成:)Client.shared.getCurrentUser
的回调现在返回“失败:找不到用户”。变量ericFeed不是nil,并且addActivity的回调仍然没有被调用。如果用户不存在,getCurrentUser
是否应该创建该用户?是的,getCurrentUser
应该为您创建或更新(如果存在)该用户。您是否尝试使用共享客户端?是的,我现在使用Client.config=.init(apiKey:,appId:,token:)
@SimoneChelo请检查我的答案更新。您需要修改MyActivity
的定义。我们将更新我们的文档。@SimoneChelo我的错。请在如何创建当前用户的答案中检查我的更新。如果您将使用自己的用户类型,那么需要将GetStream.User
更改为您的类型。
let ericFeed = Client.shared.flatFeed(feedSlug: "user")
ericFeed?.add(activity)
// Define your activity.
class MyActivity: EnrichedActivity<GetStream.User, String, DefaultReaction> {
// ...
}
// Setup Stream Client.
Client.config = .init(apiKey: <MyApiKey>, appId: <MyApiKey>, token: <Token>)
// Setup the current user.
Client.shared.getCurrentUser {
let ericFeed = Client.shared.flatFeed(feedSlug: "user")
let activity = MyActivity(actor: Client.shared.currentUser!, verb: "waves", object: "picture:10", foreignId: "picture:10")
ericFeed?.add(activity) { result in
print("!result!")
print(result)
}
}