Hi everyone,
I'm having trouble with managing multiple users in my app using SwiftyDropbox. While I can connect users, their tokens are expiring and not auto-refreshing as expected. Here are some snippets of my implementation:
public func setupWithAppKeyMultiUserDesktop(_ key: String) {
DropboxClientsManager.setupWithAppKeyMultiUserDesktop(key, tokenUid: nil)
NSAppleEventManager.shared().setEventHandler(self,
andSelector: #selector(handleGetURLEvent),
forEventClass: AEEventClass(kInternetEventClass),
andEventID: AEEventID(kAEGetURL))
}
@objc func handleGetURLEvent(_ event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) {
if let aeEventDescriptor = event?.paramDescriptor(forKeyword: AEKeyword(keyDirectObject)),
let urlStr = aeEventDescriptor.stringValue, let url = URL(string: urlStr) {
let oauthCompletion: DropboxOAuthCompletion = {
if let authResult = $0 {
switch authResult {
case .success(let accessToken):
let tokenUid = accessToken.uid
self.clients[tokenUid] = DropboxClient(accessToken: accessToken.accessToken)
self.fetchUserData(tokenUid: tokenUid)
case .cancel:
print("Authorization flow was manually canceled by user!")
case .error(_, let description):
print("Error: \(String(describing: description))")
}
}
}
DropboxClientsManager.handleRedirectURL(url, includeBackgroundClient: false, completion: oauthCompletion)
NSApp.activate(ignoringOtherApps: true)
}
}
private func fetchUserData(tokenUid: String) {
guard let client = clients[tokenUid] else { return }
client.users.getCurrentAccount().response { result, error in
if let userData = result {
let account = DropboxAccount(tokenUid: tokenUid, fullAccount: userData)
self.connectedAccounts.append(account)
} else if let error {
if case .authError(let authError, _, _, _) = error, case .expiredAccessToken = authError {
DropboxClientsManager.reauthorizeClient(tokenUid)
self.fetchUserData(tokenUid: tokenUid)
}
}
}
}
Despite the reauthorization logic, tokens are not refreshing correctly. Any advice on how to resolve this issue would be greatly appreciated.
Thanks