Register a Dropbox API app from https://www.dropbox.com/developers .
You need a Dropbox app key. Public clients using PKCE do not need an app secret,
and must not embed one in the application.
For Android, add below in AndroidManifest.xml (replace DROPBOXKEY with your key)
<activity
android:name="com.dropbox.core.android.AuthActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask">
<intent-filter>
<!-- Change this to be db- followed by your app key -->
<data android:scheme="db-DROPBOXKEY" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.BROWSABLE" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
If you need more help setting up Android, please read https://github.com/dropbox/dropbox-sdk-java#setup .
3.a) If you are using Swift, add below code to AppDelegate.swift
import ObjectiveDropboxOfficial
// should be inside AppDelegate class
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if let authResult = DBClientsManager.handleRedirectURL(url) {
if authResult.isSuccess() {
print("dropbox auth success")
} else if (authResult.isCancel()) {
print("dropbox auth cancel")
} else if (authResult.isError()) {
print("dropbox auth error \(authResult.errorDescription)")
}
}
return true
}
// if your are linked with ObjectiveDropboxOfficial 6.x use below code instead
override func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
DBClientsManager.handleRedirectURL(url, completion:{ (authResult) in
if let authResult = authResult {
if authResult.isSuccess() {
print("dropbox auth success")
} else if (authResult.isCancel()) {
print("dropbox auth cancel")
} else if (authResult.isError()) {
print("dropbox auth error \(authResult.errorDescription)")
}
}
});
return true
}
3.b) If you are using Objective C, add below code to AppDelegate.m
#import <ObjectiveDropboxOfficial/ObjectiveDropboxOfficial.h>
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
DBOAuthResult *authResult = [DBClientsManager handleRedirectURL:url];
if (authResult != nil) {
if ([authResult isSuccess]) {
NSLog(@"Success! User is logged into Dropbox.");
} else if ([authResult isCancel]) {
NSLog(@"Authorization flow was manually canceled by user!");
} else if ([authResult isError]) {
NSLog(@"Error: %@", authResult);
}
}
return NO;
}
// if your are linked with ObjectiveDropboxOfficial 6.x use below code instead
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url
options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
BOOL result = [DBClientsManager handleRedirectURL:url completion: ^(DBOAuthResult *authResult) {
if (authResult != nil) {
if ([authResult isSuccess]) {
NSLog(@"Success! User is logged into Dropbox.");
} else if ([authResult isCancel]) {
NSLog(@"Authorization flow was manually canceled by user!");
} else if ([authResult isError]) {
NSLog(@"Error: %@", authResult);
}
}
}];
return NO;
}
Update Deployment Target to iOS 9.0 or above from Xcode. (dropbox_client 0.7.0 and above)
Add below permissions to your app from Dropbox App Console:
files.metadata.read
files.metadata.write
files.content.read
files.content.write
If you need more help setting up for iOS, please read https://github.com/dropbox/dropbox-sdk-obj-c#get-started .
Usage
import'package:dropbox_client/dropbox_client.dart';
FutureinitDropbox() async {
// Initialize a public client for PKCE. Call only once.awaitDropbox.init(dropbox_clientId, dropbox_key);
}
The optional third argument is retained for legacy confidential-client flows:
// Legacy AuthorizationString accessToken;
FuturetestLogin() async {
// this will run Dropbox app if possible, if not it will run authorization using a web browser.awaitDropbox.authorize();
}
FuturegetAccessToken() async {
accessToken = awaitDropbox.getAccessToken();
}
FutureloginWithAccessToken() async {
awaitDropbox.authorizeWithAccessToken(accessToken);
}
FuturetestLogout() async {
// unlink removes authorizationawaitDropbox.unlink();
}
// OAuth 2 code flow with PKCE that grants a short-lived tokenString credentials;
FuturetestLogin() async {
// this will run Dropbox app if possible, if not it will run authorization using a web browser.awaitDropbox.authorizePKCE();
}
FuturegetCredentials() async {
credentials = awaitDropbox.getCredentials();
}
FutureloginWithCredentials() async {
awaitDropbox.authorizeWithCredentials(credentials);
}
FuturetestLogout() async {
// unlink removes authorizationawaitDropbox.unlink();
}
// List / Upload / DownloadFuturetestListFolder() async {
final result = awaitDropbox.listFolder(''); // list root folderprint(result);
final url = awaitDropbox.getTemporaryLink('/file.txt');
print(url);
}
FuturetestUpload() async {
final filepath = '/path/to/local/file.txt';
final result = awaitDropbox.upload(filepath, '/file.txt', (uploaded, total) {
print('progress $uploaded / $total');
});
}
FuturetestDownload() async {
final filepath = '/path/to/local/file.txt';
final result = awaitDropbox.download('/dropbox_file.txt', filepath, (downloaded, total) {
print('progress $downloaded / $total');
});
}