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".
        }
    }
}