Anyone wants to take over
I'm no longer using this library myself and currently don't have the time to maintain it. If anyone wants to take over, please let me know.
TDLib-iOS is a wrapper around Telegram's tdlib to interact with the Telegram API using Swift.
This library depends on TDJSON, a build of tdlib for iOS, and PromiseKit for better async programming.
TDLib-iOS provides a nativ Swift interface, that is generated from the td_api.tl using the a custom parser. A full documentation of the generated Swift API can be found here.
Just add github "leoMehlig/TDLib-iOS"
to your Cartfile
and do the usual Carthage stuff.
Other options are not supported right now, but PR are more then welcome.
Create the coordinator, this instance will take care of sending request, receiving responses and handling all the inital setup.
let coordinator = Coordinator(client: TDJsonClient(), apiId: <Telegram API ID>, apiHash: <Telegram API Hash>)
You can get an api key from Telegram.
You can subscribe to the Coordinator.authorizationState
for updates about the current Auth State of the API. Here is an example of how to handle the sign in flow:
coordinator.authorizationState.subscribe(on: .main) { event in
guard let state = event.value else {
return
}
switch state {
case .waitTdlibParameters, .waitEncryptionKey:
// Ignore these! TDLib-iOS will handle them.
case .waitPhoneNumber:
// Show sign in screen.
case .waitCode(let isRegistered, let tos, let codeInfo):
// Show code input screen.
case .waitPassword(let passwordHint, _, _):
// Show passoword screen (will only happen when the user has setup 2FA).
case .ready:
// Show main view
case .loggingOut, .closing, .closed:
break
}
Stream
The
Stream
is a custom implementation of a data stream that calls a subscribing function every time a new value is assigned the theStream.current
field.As a user of the library you never have to create a stream and only use them to get respond to changes in the
authorizationState
and when downloading images/documents.You can subscribe to stream by adding yourself as an observer using the
Stream.subscribe
method. The method take an token (optional) to later unsubscribe, a queue (defaults to DispatchQueue.global()) and a callback that provided you with the new events. There is also a convience methos to avoid reference cycles, calledsubscribeStrong
.
To send a request to tdlib
use the Coordinator.send
method.
coordinator.send(GetChats(offsetOrder: offsetOrder, offsetChatId: offsetChatId, limit: limit)).done { ids in
print("Got chat ids: \(ids)")
}
The send method takes a TDFunction
and returns a Promise
of the Result
of the function. Of cause this request can also fail!!!
For more infos about
Promises
see the PromiseKit documentation.
The Coordinator
wraps an instance of a TDJsonClient
with in turn is just an interface to the c++
api of tdlib
. TDLib-iOS
communicates with tdlib
via a json
interface, which is very error prone when using directly. To prevent typos and wrong json format the library provides a generated Swift version of all avaiable functions.