gpt4 book ai didi

swift - GetStream 添加事件因 403 而失败

转载 作者:搜寻专家 更新时间:2023-11-01 06:53:27 24 4
gpt4 key购买 nike

尝试使用 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(actor: "eric", verb: "waves", object: "picture:10", foreignId: "picture:10")
ericFeed.add(activity) { result in
print("!result!")
print(result)
}

token 在服务器端生成,格式为 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VyX2lkIjoiZXJpYyJ9.AAAAAAAAAAAAAAAA-AAAAAAAAAAAAAAAA-AAAAAAAA 和:

  1. client.currentUserId 返回 eric(所以, token 是正确的?)
  2. ericFeed.add(activity) 的回调没有被调用
  3. 在我的应用程序的仪表板日志中,我看到添加事件的尝试失败,错误为 403

我尝试了不同的 ID(使用不同的标记),包括 actor: "eric"actor: "user:eric"。可能出了什么问题?

生成 token 的代码(php 服务器)是:

$userId = "eric";
$client = new GetStream\Stream\Client(<MyApiKey>, <MyAppSecret>);
$userToken = $client->createUserSessionToken($userId);

然后我在仪表板上收到日志:

log1


log2

最佳答案

有几件事需要牢记。首先,可能您的客户端在请求结束时被释放,这就是没有调用回调的原因,但日志可以向您显示请求已完成。我建议你使用一个共享的 Client 实例,它会很容易使用。要设置共享客户端,您需要这样写:

Client.config = .init(apiKey: "<MyApiKey>", appId: "<MyApiKey>", token: "<Token>")

有关客户端设置的更多信息,请参阅 wiki page .

第二个重要的事情是,您必须创建/更新您的 Stream 用户。从服务器端,您将获得带有 Stream userId 的 token ,并且可以请求 Stream 用户。最简单的方法是调用 Client.shared.create(user:) 来创建/更新用户。因此,它仍然是 Stream Client 设置的一部分:

Client.shared.create(user: GetStream.User(id: Client.shared.currentUserId!)) { result in
// Update the client with the current user.
Client.shared.currentUser = try? result.get()
// Do all your requests from here. Reload feeds and etc.
}

更多信息请参见 docs .

我建议您只使用 feedSlug 参数创建提要,并且 Stream userId 将从 token 中获取。但它是可选的,因为 currentUserId 是可选的。例如:

let ericFeed = Client.shared.flatFeed(feedSlug: "user")
ericFeed?.add(activity)

对于您的事件,Stream 客户端应始终将当前 Stream 用户用作参与者。因此,我们需要更新您的 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)
}
}

关于swift - GetStream 添加事件因 403 而失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55512731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com