Users - GetStream/stream-swift GitHub Wiki
Setup the default Stream user with a token.
Client.shared.setupUser(token: token) { result in
if let currentUser = try? result.get() {
// Load you feeds.
} else if let error = result.error {
print("Authorization error:", error)
}
// or
if GetStream.User.current != nil {
}
}
If you want to use own custom Stream User:
let user = CustomUser(id: "john-doe", name: "John Doe")
Client.shared.setupUser(user, token: token) { result in
if let currentUser = try? result.get() {
// Load you feeds.
} else if let error = result.error {
print("Authorization error:", error)
}
}
Adding users
// create a new user, if the user already exist an error is returned
client.create(user: User(id: "john-doe"), getOrCreate: false) { result in /* ... */ }
// get or create a new user, if the user already exist the user is returned
client.create(user: User(id: "john-doe"), getOrCreate: true) { result in /* ... */ }
Retrieving users
client.get(userId: "123") { result in /* ... */ }
Removing users
client.delete(userId: "123") { result in /* ... */ }
Updating users
client.update(user: User(id: "john-doe")) { result in /* ... */ }
Custom User
You can add custom properties to the User
with own custom class:
final class CustomUser: GetStream.User {
private enum CodingKeys: String, CodingKey {
case name
}
var name: String
init(id: String, name: String) {
self.name = name
super.init(id: id)
}
required init(from decoder: Decoder) throws {
let dataContainer = try decoder.container(keyedBy: DataCodingKeys.self)
let container = try dataContainer.nestedContainer(keyedBy: CodingKeys.self, forKey: .data)
name = try container.decode(String.self, forKey: .name)
try super.init(from: decoder)
}
override func encode(to encoder: Encoder) throws {
var dataContainer = encoder.container(keyedBy: DataCodingKeys.self)
var container = dataContainer.nestedContainer(keyedBy: CodingKeys.self, forKey: .data)
try container.encode(name, forKey: .name)
try super.encode(to: encoder)
}
}
Here is an example how to get a custom User:
let user = CustomUser(id: "alice123", name: "Alice")
Client.shared.create(user: user) { result in
if let error = result.error {
print("User creating error:", error)
return
}
// Let's try retrieve details of the created user.
Client.shared.get(typeOf: CustomUser.self, userId: "alice123") { result in
// here the user is a CustomUser type.
if let customUser = try? result.get() {
print(customUser.name) // it will print "Alice".
}
}
}