Your workflow is unique 👨💻 - tell us how you use Dropbox here.
Forum Discussion
NachoMurphy
8 years agoExplorer | Level 3
Dropbox Xamarin OAuth Flow Question - Retrieving the Access Token
Hi there, I have a mobile app on Android that uses Xamarin's tools to do some basic dropbox operations. In the past we used the Sync SDK to use dropbox quite easily. With the June v1 shut off comin...
Greg-DB
Dropbox Community Moderator
8 years agoThanks for the additional information!
If I understand correctly, you're using the API v2 .NET SDK, but you're trying to implement the app authorization flow the way the API v2 Java SDK does it. These two SDKs work differently though, so there will be a disconnect between the two. You won't be able to easily reconcile the two, so I recommend picking one or the other (whatever makes the most sense for your app/platform) and following the documentation/sample for the one you pick.
For reference, the Android app sample that uses the API v2 Java SDK uses a custom URL scheme as defined in the Manifest to directly receive the redirect after sending the user through the app authorization flow. Dropbox does some special handling for you to make use of that "db-<app_key>" URL scheme.
The API v2 .NET SDK on the other hand uses either the standard OAuth 2 'token' or 'code' flow. You can see how the code flow is initiated here and received here. There's a sample of initiating the token flow here (which your code so far uses) and receiving it here. I.e., you can use ParseTokenFragment to parse the token from the redirect URI.
(Also, I should note that you should no longer use web view for the OAuth app authorization flow, in order to support the embedded Google Sign In flow, as Google is no longer allowing their sign in flow to be processed in web views.)
In any case, the actual exception you're getting seems to be a ClassNotFoundException for class "MyApp.App.ImageGallery". That's not part of the Dropbox SDK though, and seems to just be part of your app, so I'm afraid I can't offer help with that in particular.
NachoMurphy
8 years agoExplorer | Level 3
Thanks for the response.
In light of the Web View news, I'm going to opt for only using the .NET SDK after all. It's true that I had been using parts of both SDKs before. It's frustrating because in the time between my posts I had implemented a WebView soution that was partially working. Oh well, so much for that.
Back to the issue then: I'm using the .NET approach to the OAuth flow. I use the android browser to navigate to the authorize URL. Then the user would sign in if needed and hit Allow. My newest issue then becomes: I get how the .NET SDK example uses BrowserNavigating to capture the event and can then parse the access token from the URI, but how would I do that for android? Is there a way to attach a listener to the browser intent? This is the immediate obstacle I'm facing at present.
Here's some revised code:
private void HandleDropboxOperation()
{
waitingOnDropboxUpload = true;
taskCode = AuthActivity.RandomString(16);
Toast.MakeText(this, "Uploading...", ToastLength.Short).Show();
//see if there is an existing user access token stored
sp = GetSharedPreferences(SharedPrefsName, FileCreationMode.Private);
AccessTokenValue = sp.GetString(AccessTokenKey, string.Empty);
if (AccessTokenValue.Equals(string.Empty))
{
this.OAth2State = Guid.NewGuid().ToString("N");
var authorizeUri = DropboxOAuth2Helper.GetAuthorizeUri(OAuthResponseType.Token, DropboxAppKey, new Uri(RedirectUri), state: Guid.NewGuid().ToString("N"));
//no browser object available - use intent instead
Android.Net.Uri.Builder b = new Android.Net.Uri.Builder();
b.AppendPath(authorizeUri.ToString());
Intent browserIntent = new Intent(Intent.ActionView, b.Build());
StartActivityForResult(Intent.CreateChooser(browserIntent, "Open With"), 1);
//below is from the .NET SDK code - how to implement in Android?
//OAuth2Response result = DropboxOAuth2Helper.ParseTokenFragment(e.Uri);
//proceed with upload after token is obtained
}
else
{
InitiateUpload();
}
}About Dropbox API Support and Feedback
Get help with the Dropbox API from fellow developers and experts.
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!