cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 
Announcements
Want to learn some quick and useful tips to make your day easier? Check out how Calvin uses Replay to get feedback from other teams at Dropbox 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: 

Is linking necessary to download files?

Is linking necessary to download files?

Ghulam A.
New member | Level 1

Is it possible to download files from my app folder (Dropbox) to my app without linking an account? If so, how would I do that?

30 Replies 30

Greg-DB
Dropbox Staff

Tokens don't expire by themselves (but they can be manually revoked).

What doesn't work exactly? What error or output are you getting?

Ghulam A.
New member | Level 1

Basically, when I try to output the words in my text file, all I get back is null as so in my NSLog:

2016-01-08 22:38:45.124 My App Name[804:200098] (null)

Versus:

2016-01-08 22:42:30.358 DBRoulette[812:201530] Testing...

I know that the code I used works, because I tested it in DBRoulette logging in normally rather than using a token. I basically put the code inside the "Random photo" button's function and it worked fine. I got exactly what was in my text file to display in the NSLog as shown above.

Greg-DB
Dropbox Staff

Have you implemented both of the delegate methods?

- (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath;

- (void)restClient:(DBRestClient*)client loadFileFailedWithError:(NSError*)error;

What do you get from those?

Ghulam A.
New member | Level 1

On a side note, I've noticed that the file seems to remain cached (in DBRoulette) as when the function is called before linking it still displays text but the old text. I've tested this by changing the text in my text file between builds. Is this supposed to happen? Will all my files automatically cache for the user too? This is good if so, but I just wanted to make sure.

Anyways, I just tried implementing both delegate methods and added NSLogs inside them. In DBRoulette, which I know is working I did see the message I put in the loadFile: function so I confirmed again that it works there.

However, in my actual app I got nothing at all (not counting the previous (null) NSLog for displaying the contents of the file). Not even the NSLog error message in loadFileFailedWithError:. I don't think it would fail to load without an error so maybe it isn't loading at all? I have to be missing something, but I'm not quite sure what. Again, it has to be something with how I'm linking my account manually, because when I login to link it works perfectly fine with all the rest of the code being the same but not hen I use a token. You have my code above, but the only difference other than linking I can point out is that in the working one I put the download code in a function but in my actual app I put it in in the viewDidLoad

Greg-DB
Dropbox Staff

The iOS Core SDK doesn't do any caching for you, and I'm not sure what functionality you're referring to in DBRoulette. The DBRoulette sample app displays images, not text, anyway, unless you're referring to a modified version of it?

Anyway, there are a few things that might cause your delegate methods to not be called:

1. Your rest client is nil or is being released (e.g., by ARC) prematurely.
2. You're making the call in a background thread that doesn't have a run loop.
3. Your delegate method that should be called back has a typo in it. Unfortunately the SDK doesn't warn you if it can't find a delegate method to call; it just completes without telling anyone.

 

Ghulam A.
New member | Level 1

Yes, I was using a modified version. Do you see anything missing in the code for my app a few responses above? If not, where else should I check?

Greg-DB
Dropbox Staff

Nothing jumps out at me, besides the lack of implementation of the delegate methods. Have you finished implementing those and looked into the causes I mentioned that may lead to them not being called?

Ghulam A.
New member | Level 1

Which delegate methods have I not implemented? I wasn't sure what was needed since I'm not going to have a normal login. Maybe that's what I'm missing.

Greg-DB
Dropbox Staff

For loadFile, you just need these two:

- (void)restClient:(DBRestClient*)client loadedFile:(NSString*)destPath;

- (void)restClient:(DBRestClient*)client loadFileFailedWithError:(NSError*)error;

Earlier you did say you implemented them, but I wanted to check since that's the only thing that seemed to be missing from the latest code you've shared.

For loadMetadata you need:

- (void)restClient:(DBRestClient*)client loadedMetadata:(DBMetadata*)metadata;
- (void)restClient:(DBRestClient*)client loadMetadataFailedWithError:(NSError*)error;

Greg-DB
Dropbox Staff

Two other things I just noticed:

- You don't seem to actually be constructing your client anywhere that you've shared. E.g.:

    self.restClient = [[DBRestClient alloc] initWithSession:[DBSession sharedSession]];
    self.restClient.delegate = self;

- You're printing out the contents of the local file immediately after kicking off the API calls, but note that these calls are asynchronous, so you may be reading that data before the API call finished to download the latest version. That may be the "caching" you were referring to before.

Need more support?
Who's talking

Top contributors to this post

  • User avatar
    Ghulam A. New member | Level 1
  • User avatar
    Greg-DB Dropbox Staff
What do Dropbox user levels mean?