Skip to content

tinycreative/react-native-dropbox-chooser

Repository files navigation

react-native-dropbox-chooser

What is this?

For more details check out https://www.dropbox.com/developers/chooser#ios for an explanation.

Only Works On Device

This will only work on Device. This will open up a window prompting you to install the Dropbox app on the Simulator.

Install

npm install react-native-dropbox-chooser --save

Sign up

You'll need to sign up and get an app key from Dropbox.

First go here https://www.dropbox.com/developers/apps/create.

  • Select "Dropbox API"
  • Select what you need access to
  • Name your app
  • Agree to TOS
  • Submit

You'll see a section where it says "App key" and a series of numbers/letters. We'll need this in a second.

Setup

First off add it to your project. How to link native modules can be found here. http://facebook.github.io/react-native/docs/linking-libraries-ios.html#content.

This will use LinkingIOS so we'll need to add this code to your AppDelegate.m

At the top of the file you will need to add #import "RCTLinkingManager.h"

Should look like

#import "AppDelegate.h"

#import "RCTRootView.h"
#import "RCTLinkingManager.h"

Then before the @end you need to add this code.

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
  return [RCTLinkingManager application:application openURL:url sourceApplication:sourceApplication annotation:annotation];
}

Explanation can be found here https://facebook.github.io/react-native/docs/linkingios.html#content.

This will now start complaining that RCTLinkingManager doesn't exist.

We'll need to add header search paths for the Libraries. Go to Build Settings, find Header Search Paths, and add $(SRCROOT)/../node_modules/react-native/Libraries. Set it to recursive.

Because we are using the chooser we'll need to add the below configuration to the Info.plist What this will allow us to do is throw over the the Dropbox app and have it send us the links back.

<key>LSApplicationQueriesSchemes</key>
<array>
  <string>dbapi-1</string>
  <string>dbapi-3</string>
</array>

Now go to the Info tab.

At the bottom it will have a section called URL Types. Open it and press the +.

Add db-APPKEYHERE into the URL Schemes input box.

How to use

Require the module.

var DropboxClient = require('react-native-dropbox-chooser');
  componentDidMount() {
    DropboxClient.init({
      appId: 'YOURAPPIDHERE',
      onFiles: this.handleFiles //Callback that receives file(s) when they are selected
    });
  },

  componentWillUnmount() {
    DropboxClient.remove(); //Don't forge to remove it
  },

Done

We should be good to go!