This SDK helps your Java App make HTTP requests to the Uber Rides API.
Register your app in the Uber developer dashboard. Notice that the app gets a client ID, secret, and server token required for authenticating with the API.
Note: Using Android? Be sure to checkout the Uber Android SDK in addition, which has native authentication mechanisms.
Uber Rides SDK:
dependencies {
compile 'com.uber.sdk:uber-rides:x.y.z'
}
Uber Oauth Client Adapter:
dependencies {
compile 'com.uber.sdk:uber-core-oauth-client-adapter:x.y.z'
}
Uber Rides SDK:
<dependency>
<groupId>com.uber.sdk</groupId>
<artifactId>uber-rides</artifactId>
<version>x.y.z</version>
</dependency>
Uber Oauth Client Adapter:
<dependency>
<groupId>com.uber.sdk</groupId>
<artifactId>uber-core-oauth-client-adapter</artifactId>
<version>x.y.z</version>
</dependency>
To make calls, you need to create an authenticated session with the API. While operations on behalf of users require a user-authorized token using OAuth 2, general requests can use server-token authentication.
// Get the server token for your app from the developer dashboard.
SessionConfiguration config = new SessionConfiguration.Builder()
.setClientId("YOUR_CLIENT_ID")
.setServerToken("YOUR_SERVER_TOKEN")
.build();
ServerTokenSession session = new ServerTokenSession(config));
In an OAuth session, the app first asks the user to authorize and then exchanges the authorization code for an access token from Uber. Note: Make sure the redirect URI matches the callback URI in the developer dashboard for the app.
Step 1. Create an OAuth2Credentials object with your client ID, client secret, scopes, and a redirect callback URI to capture the user’s authorization code.
SessionConfiguration config = new SessionConfiguration.Builder()
.setClientId("YOUR_CLIENT_ID")
.setClientSecret("YOUR_CLIENT_SECRET")
.setScopes(yourScopes)
.setRedirectUri(redirectUri)
.build();
OAuth2Credentials credentials = new OAuth2Credentials.Builder()
.setSessionConfiguration(config)
.build();
Step 2. Navigate the user to the authorization URL from the OAuth2Credentials object.
String authorizationUrl = credentials.getAuthorizationUrl();
Step 3. Once the user approves the request, you get an authorization code. Create a credential object to store the authorization code and the user ID.
Credential credential = credentials.authenticate(authorizationCode, userId);
Step 4. Create a session object using the credential object.
CredentialsSession session = new CredentialsSession(config, credential)
Step 5. Instantiate a service using a session to start making calls.
RidesService service = UberRidesApi.with(session).createService();
Note: Keep each user's access token in a secure data store. Reuse the same token to make API calls on behalf of your user without repeating the authorization flow each time they visit your app. The SDK handles the token refresh automatically when it makes API requests with an UberRidesService
.
Both synchronous and asynchronous calls work with the Uber rides Java SDK. The networking stack for the Uber SDK is powered by Retrofit 2 and the same model of threading is available.
Response<UserProfile> response = service.getUserProfile().execute();
if (response.isSuccessful()) {
//Success
UserProfile profile = response.body();
} else {
//Failure
ApiError error = ErrorParser.parseError(response);
}
service.getUserProfile().enqueue(new Callback<UserProfile>() {
@Override
public void onResponse(Call<UserProfile> call, Response<UserProfile> response) {
if (response.isSuccessful()) {
//Success
UserProfile profile = response.body();
} else {
//Api Failure
ApiError error = ErrorParser.parseError(response);
}
}
@Override
public void onFailure(Call<UserProfile> call, Throwable t) {
//Network Failure
}
});
Use the Java classes in the samples folder to test standard requests. Alternatively, you can download a sample from the releases page to try them out.
For full documentation, visit our Developer Site.
// Get a list of products for a specific location in GPS coordinates, example: 37.79f, -122.39f.
Response<List<Product>> response = service.getProducts(37.79f, -122.39f).execute();
List<Product> products = response.body();
String productId = products.get(0).getProductId();
// Request an Uber ride by giving the GPS coordinates for pickup and drop-off.
RideRequestParameters rideRequestParameters = new RideRequestParameters.Builder().setPickupCoordinates(37.77f, -122.41f)
.setProductId(productId)
.setDropoffCoordinates(37.49f, -122.41f)
.build();
Ride ride = service.requestRide(rideRequestParameters).execute().body();
String rideId = ride.getRideId();
Warning: This real-world request can send an Uber driver to the specified start location. To develop
and test against endpoints in a sandbox environment, instantiate your UberRidesService
with a Session
whose Environment
is set to SANDBOX
.
This will take an existing session and generate a new one pointing to SANDBOX
.
SessionConfiguration config = existingConfig.newBuilder().setEnvironment(Environment.SANDBOX).build()
CredentialsSession session = new CredentialsSession(config, credential));
RidesService service = UberRidesApi.with(session);
See our documentation to learn more about the sandbox environment.
If you request a ride in the sandbox, you can step through the different states of the ride.
SandboxRideRequestParameters rideParameters = new SandboxRideRequestParameters.Builder().setStatus(“accepted”).build();
Response<Void> response = service.updateSandboxRide(rideId, rideParameters).execute();
A successful update returns a 204 for response.code()
.
Note: The updateSandboxRide
method is not valid in the PRODUCTION
Environment
, where the ride status changes automatically. In a PRODUCTION
Environment
, the call will fail.
Uber developers actively monitor the uber-api tag on StackOverflow. If you need help installing or using the library, ask a question there. Make sure to tag your question with uber-api
and java
!
As the Uber SDK get closer to a 1.0 release, the API's will become more stable. In the meantime, be sure to check out the changelog to know what differs!
We :heart: contributions. If you find a bug in the library or would like to add new features, go ahead and open issues or pull requests against this repo. Before you do so, please sign the Uber CLA. Also, be sure to write a test for your bug fix or feature to show that it works as expected.