Dropbox API Support & Feedback
Find help with the Dropbox API from other developers.
Hey,
i try to get the refresh token with the Java SDK (Android App).
I start authentication with this:
Auth.startOAuth2Authentication(getContext(), "abc");
And then in onResume:
@Override
public void onResume() {
super.onResume();
if (_isCloudAuthFlow) {
_isCloudAuthFlow = false;
String token = Auth.getOAuth2Token();
String refresh = Auth.getDbxCredential().getRefreshToken();
_businessLogic.getSharedPreferences().edit().putString(getString(R.string.all_settings_dropbox_authtoken), token).apply();
}
}
I get a authToken but the refresh token is always null.
Can you help?
The startOAuth2Authentication method uses the old flow, which currently gives legacy "long-lived access tokens", which don't expire by themselves. Note that starting September 30th, 2021 Dropbox will no longer return new long-lived access tokens, so you should switch to the new flow.
The startOAuth2PKCE uses the new flow, which gives "short-lived access tokens", which do expire by themselves, as well as "refresh tokens", which don't expire by themselves.
You should use the startOAuth2PKCE method instead of startOAuth2Authentication now. You can find an example here:
@Greg-DB wrote:You should use the startOAuth2PKCE method instead of startOAuth2Authentication now. You can find an example here:
Yes, with the startOAuth2PKCE - Method i get a refresh token. Does the authToken with startOAuth2Authentication - Method never expire?
The startOAuth2Authentication method uses the old flow, which currently gives legacy "long-lived access tokens", which don't expire by themselves. Note that starting September 30th, 2021 Dropbox will no longer return new long-lived access tokens, so you should switch to the new flow.
The startOAuth2PKCE uses the new flow, which gives "short-lived access tokens", which do expire by themselves, as well as "refresh tokens", which don't expire by themselves.
Thanks
can you clarify if the only thing I need to do is to set short lived token online in the console, and then use this different authorization method, and the API will take care of it, or if I need to do anything different? I don't understand if I need to store any access token or if I need to make different calls later. Thank you
Normally I check if I have the token, then call:
Auth.startOAuth2Authentication(getActivity(), db_k);
While now I call:
Auth.startOAuth2PKCE(context, db_k, DbxRequestConfig.newBuilder("app")
.withHttpRequestor(new OkHttp3Requestor(OkHttp3Requestor.defaultOkHttpClient()))
.build(), Collections.singleton("files.content.write"));
Which gives me a token, that then I store, and re-use the following time and also for the actual operation:
DropboxClientFactory.init(accessToken);
PicassoClient.init(context, DropboxClientFactory.getClient());
DbxClientV2 mDbxClient = DropboxClientFactory.getClient();
mDbxClient.files().uploadBuilder("/"+recordingToExport.getName()+"_Features.csv")
.withMode(WriteMode.OVERWRITE)
.uploadAndFinish(inputStream);
How does this code change when using short lived access tokens?
Your documentation on github doesn't seem to use any of this. Please help
@marcoalt I see you've also opened a new thread for this, so I'll follow up with you there.
Hi there!
If you need more help you can view your support options (expected response time for a ticket is 24 hours), or contact us on Twitter or Facebook.
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!