我正在使用Uber API开发应用程序,我使用Retrofit库从API检索数据。
我已使用以下端点授权我的应用程序:
https://login.uber.com/oauth/v2/authorize?client_id=<CLIENT_ID>&response_type=code
但是当我尝试使用以下端点估算产品时:
https://api.uber.com/v1.2/requests/estimate?start_latitude=37.7752278&start_longitude=-122.4197513&end_latitude=37.7773228&end_longitude=-122.4272052
然后我遇到了一个问题:
此端点至少需要以下范围之一:profile,surge_accept,request.delegate.tos_accept,request,request.delegate&#34;,&#34; code&#34;:&#34;未经授权
在实施此终端之前,我已经完成了授权和遵循优步官方文件的令牌程序。
我也在下面显示我的源代码,请告诉我出错的地方:
----> Intializing UBER SDK <----
public void initializeUber() {
if (!UberSdk.isInitialized()) {
configuration = new SessionConfiguration.Builder().setClientId("LWOUTh3AUBkVtaI-cK58-t_pspsvRFfk").setServerToken("J5MNweewRs8vj4-dC0r9OMI4-qjibix0xv6gncGs").setRedirectUri("REDIRECT_URL").setScopes(Arrays.asList(Scope.REQUEST)).setEnvironment(SessionConfiguration.Environment.SANDBOX).build();
UberSdk.initialize(configuration);
accessTokenManager = new AccessTokenManager(context);
System.out.println("Configuration- ---->
"+configuration.toString());
loginManager = new LoginManager(accessTokenManager, new UberLoginCallback(context), configuration, LOGIN_CODE);
} else {
Log.i(TAG, "Uber SDK already initialized");
}
}
public LoginManager getLoginManager() {
PreferenceManager(context).setUberAuthToken(loginManager.getAccessTokenManager().getAccessToken().toString());
System.out.println("Is authenticated-+loginManager.getAccessTokenManager().getAccessToken());
return loginManager;
}
-----> Created API Interface <----
@POST("v1.2/requests/estimate?")
Call<RequestEstimateFare> getRequestEstimateFare(@Query("start_latitude") String start_latitude, @Query("start_longitude") String start_longitude, @Query("end_latitude") String end_latitude, @Query("end_longitude") String end_longitude);
----> Retrofit Library calling <-----
apiInterface = retrofitConfig.createService(ApiInterface.class);
retrofitConfig.changeApiBaseUrl("https://api.uber.com/");
apiInterface.getRequestEstimateFare ("37.7752315", "-122.418075", "37.7752415", "-122.518075").enqueue(new Callback<RequestEstimateFare>() {
@Override
public void onResponse(Call<RequestEstimateFare> call, Response<RequestEstimateFare> response) {
}
@Override
public void onFailure(Call<RequestEstimateFare> call, Throwable t) {
}
});
我仍然遇到同样的问题。
答案 0 :(得分:1)
问题是您没有请求“请求”&#39; oauth授权过程中的范围。
像:
https://login.uber.com/oauth/v2/authorize?client_id=<CLIENT_ID>&response_type=code&scope=request
或者如果你想要所有范围,那么你需要传递所有链接,如:
https://login.uber.com/oauth/v2/authorize?client_id=<CLIENT_ID>&response_type=code&scope=request request_receipt history profile
答案 1 :(得分:0)
首先,您是否将此请求作为您的5个已批准的开发者帐户之一?或者您是否要求完全访问?
https://developer.uber.com/docs/riders/references/api/v1.2/requests-estimate-post
特权范围此端点需要使用特权范围 在所有优步车手的生产。您可以使用此端点 在您作为自己或您注册的任何5个身份进行身份验证时立即 开发人员。当您准备好广泛分发您的应用程序时 所有优步车手使用,您可以要求完全访问。更多 有关范围的信息。
继发于此我不确定您的请求如何使用查询参数而不是JSON请求体?我只能使用
来查询您的查询{"start_latitude": 37.7752278, "start_longitude": -122.4197513, "end_latitude": 37.7773228, "end_longitude":-122.4272052}