cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Announcements
We are making some updates so the Community might be down for a few hours on Monday the 11th of November. Apologies for the inconvenience and thank you for your patience. You can find out more here.

Dropbox API Support & Feedback

Find help with the Dropbox API from other developers.

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

Re: Xcode swiftydropbox setup

Xcode swiftydropbox setup

whats
Explorer | Level 4

Hey,

 

Has anyone been able to set up Swiftydropbox without any user prompt ? I dont know the order or what needs to be called. I don't want the user to have to set up any login. Any quick breakdowns on the process for me to use a refresh key and app key in order to get the access token without a user prompt would be amazing

 

Thank you !

18 Replies 18

whats
Explorer | Level 4

Thank you again for the detailed reply! I guess I am lost to which part needs the app secret, I was unable to locate where I could pass it

Здравко
Legendary | Level 20

@whats, If it's so hard for you to add support for app secret, then perform OAuth flow using PKCE (as I mentioned it as a variant before). In such a way you wouldn't need app secret and can use Dropbox Swift SDK as is (without change). You don't need to implement such a flow in the same language. Throughout the forum and other SDKs are lot of examples you can "hire". For instance take a look here. It's a Python script that you can perform OAuth on (it uses PKCE). Once you authenticate yourself, get the saved refresh token and use it. 😉 In such a case only app key would be needed - something Dropbox Swift SDK supports. That's it.

Hope this helps.

 

PS: Keep in mind that providing this application to somebody else will let other person access to your account - something potentially dangerous for your data - take care.

whats
Explorer | Level 4

I have performed the Oauth and have the refresh key, my implementation currently isnt working. I assume its an authentication issue, is there any way to have the http request errors post to console when testing the app so that I can see what error I am running into?

Greg-DB
Dropbox Staff

@whats The SwiftyDropbox SDK doesn't offer a way to print out the raw HTTP request/response, but you should be able to check the `error` for any given call, e.g., as shown in the `response` handler in the examples here.

whats
Explorer | Level 4
Hey @Здравко  would this be the right approach? I would then call client.upload for a rough example. I have the manually obtained refreshToken and appKey
 
class <CLASSNAME>: TransportClient{
private var client:DropboxClient
init(){
client=DropboxClient(appKey:"<APPKEY>",refreshToken:"<REFRESHTOKEN>")
}
}
 
extension DropboxClient{
public convenience init(appKey:"<APPKEY>",refreshToken:"<REFRESHTOKEN>"){
let transportClient=DropboxTransportClientImpl(transportClient:transportClient:)
self.init(transportClient:transportClient)
}
}
 
extension DropboxTransportClientImpl{
public convenience init(appKey:"<APPKEY>",refreshToken:"<REFRESHTOKEN>"){
let oauthManager=DropboxOAuthManager(appKey:"<APPKEY>",secureStorageAccess: SecureStorageAccesDefaultImpl.init())
var dropboxToken=DropboxAccessToken(accessToken:"",uid:"",refreshToken:"<REFRESHTOKEN>")
oauthManager.refreshAccessToken(dropboxToken,scopes:[],queue:nil,completion:{_in})
let accessTokenProvider=ShortLivedAccessTokenProvider(token:dropboxToken,tokenRefresher:oauthManager)
self.init(accessTokenProvider:accessTokenProvider,selectUser:nil,pathRoot:nil)
}
}


Здравко
Legendary | Level 20

Hm..🤔 Once you have refresh token using PKCE (you didn't mention but I suppose you used PKCE since it's mandatory for skipping app secret), would be easier just to call something like:

import SwiftyDropbox

let token = DropboxAccessToken(accessToken: "", uid: "",
                               refreshToken: "<your refresh token here>",
                               tokenExpirationTimestamp: ("0" as TimeInterval))
let client = DropboxClient(accessToken: token,
                   dropboxOauthManager: DropboxOAuthManager.sharedOAuthManager)

 ... and use the client further on as in all examples. It's simpler. Isn't it? 🧐 The above code is just an illustration. You should have initialized the SDK already before running above code - see again the referred example (where the app key goes)!

 

PS: While you use PKCE, you don't need to change anything in SDK itself. 😉

whats
Explorer | Level 4

Hmmm, I tried to implement these three things and seem to have made it worse. It now crashes as soon as it launches with the Termination Reason: Namespace SIGNAL, Code 4 Illegal instruction:4

Здравко
Legendary | Level 20

This means that your (Intel) processor tries access something uninitialized (most probably). Did you initialize your SDK in advance, as I noted? If not, DropboxOAuthManager.sharedOAuthManager points to nowhere! Something that likely be reason for such signal.

Of course might be something else too. You can investigate where this happens. 🙋 Try debug it!

whats
Explorer | Level 4

Interesting! Thank you for all the help so far, I was thinking that I perhaps didnt play the initialization in the correct spot. I will investigate this further !

Need more support?