Search code examples
androiduber-api

Uber login fail gives "invalid_login" for first time login and works well for other time


I have implement Uber- cabs in my project. When I don't have Uber app installed on user device. Uber login fails for first time with error msg "invalid_grant". But if immediately you login again it works well. Dont have issue if Uber app installed on user device.

Webview for Uber login:-
     mPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
            if (!mPreferences.contains(Constants.PREF_KEY_AUTH_UBER)) {

                AlertDialog.Builder alert = new AlertDialog.Builder(getContext());
                alert.setTitle("Uber Login");


                WebView mWebView = new WebView(getContext()) {
                    @Override
                    public boolean onCheckIsTextEditor() {
                        return true;
                    }
                };

                mWebView.getSettings().setJavaScriptEnabled(true);

                WebViewClient client = new WebViewClient() {


                    @SuppressLint("CommitPrefEdits")
                    @Override
                    public void onPageFinished(WebView view, String url) {

                        Log.e(TAG, "onPageFinished: " + url);

                        if (url.contains("localhost:8888")) {
                            final String authToken = url.substring(url.indexOf("=") + 1);
                            presenter.postForUberToken(new UberRequestsPresenter.UberPresenterForToken() {
                                @Override
                                public void onTokenReceivedOnError() {
                                    progressBarUberProductListLoading.setVisibility(View.GONE);
                                    showToast(getActivity(), getResources().getString(R.string.error_msg_uber));
                                }

                                @Override
                                public void onTokenReceived(UberRequestsPresenter.UberTokenReceivedBody body) {
                                    SharedPreferences pref = PreferenceManager.getDefaultSharedPreferences(getContext());
                                    pref.edit().putString(Constants.PREF_KEY_AUTH_UBER, gson.toJson(body)).commit();
                                    uberLogin(body, true);
                                }
                            }, authToken);
                            if (mDialogWebViewOla != null) {
                                mDialogWebViewOla.dismiss();
    //                            if (getActivity().findViewById(R.id.progress_bar) != null)
    //                                getActivity().findViewById(R.id.progress_bar).setVisibility(View.VISIBLE);
                            }
                        }
                    }
                };

                mWebView.setWebViewClient(client);
                alert.setView(mWebView);
                mDialogWebViewOla = alert.show();
                mWebView.loadUrl(UBER_AUTH_HIT_URL);

url after @onPageFinished and redirect_uri are same. Getting 401 unauthorized error - "invalid_grant" for first time login

I can't force user to ask for login again. Any alternative or solution. Please tell me if need more details


Solution

  • The invalid_grant error shows up when:

    • the auth code was used already - maybe you are caching codes?
    • the auth code was invalidated through a newer code?
    • the value for grant_type is not authorization_code nor refresh_token

    Please find more details in the POST /token documentation.