Forum Discussion

whats's avatar
whats
Explorer | Level 4
3 years ago

Xcode swiftydropbox setup

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

Replies have been turned off for this discussion
  • Здравко's avatar
    Здравко
    Legendary | Level 20
    3 years ago

    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's avatar
    whats
    Explorer | Level 4
    3 years ago

    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's avatar
    Greg-DB
    Icon for Dropbox Community Moderator rankDropbox Community Moderator
    3 years ago

    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's avatar
    whats
    Explorer | Level 4
    3 years ago
    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)
    }
    }


  • Здравко's avatar
    Здравко
    Legendary | Level 20
    3 years ago

    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's avatar
    whats
    Explorer | Level 4
    3 years ago

    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

  • Здравко's avatar
    Здравко
    Legendary | Level 20
    3 years ago

    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's avatar
    whats
    Explorer | Level 4
    3 years ago

    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 !

About Dropbox API Support & Feedback

Node avatar for Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.

The Dropbox Community team is active from Monday to Friday. We try to respond to you as soon as we can, usually within 2 hours.

If you need more help you can view your support options (expected response time for an email or ticket is 24 hours), or contact us on X, Facebook or Instagram.

For more info on available support options for your Dropbox plan, see this article.

If you found the answer to your question in this Community thread, please 'like' the post to say thanks and to let us know it was useful!