I'm using GooglesignInClient in my android app to authenticate users and simultaneously requesting to access Blogger with Scope and Authorization code.
here is the code
 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .requestServerAuthCode(getString(R.string.web_client_id))
                .requestScopes(new Scope("https://www.googleapis.com/auth/blogger"))
                .build();
        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
        signInButton = findViewById(R.id.sign_in_button);
        signInButton.setSize(SignInButton.SIZE_STANDARD);
        signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Intent signInIntent = mGoogleSignInClient.getSignInIntent();
                startActivityForResult(signInIntent, RC_SIGN_IN);
            }
        });
After the user successfully signed in, I'm getting an Authorization code
 GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(getApplicationContext());
 String auth_code = acct.getServerAuthCode(); // it gives code like 4/0Ay0e-g5p.....
Still now there is no problem. But now how can I use this Authorization code to exchange for access-token and refresh-token?
I had seen some Stackoverflow code and did this.
String TOKEN_URL = "http://www.googleapis.com/oauth2/v4/token";
    OkHttpClient client = new OkHttpClient();
            RequestBody requestBody = new FormEncodingBuilder()
                    .add("grant_type", "authorization_code")
                    .add("client_id", String.valueOf(R.string.web_client_id))
                    .add("client_secret", "[my client serect code]")
                    .add("code",auth_code)  
                    .add("redirect_uri","")      //which uri should I give here since it is an android app?
                    .add("id_token",idToken)
                    .build();
            Log.e(TAG, "requestbody is setted");
    
            final com.squareup.okhttp.Request  request = new com.squareup.okhttp.Request .Builder().header("content-type","application/x-www-from-urlencoded").url(TOKEN_URL).post(requestBody).build();
            client.newCall(request).enqueue(new Callback() {
                @Override
                public void onFailure(Request request, IOException e) {
                    Log.e(TAG, "onFailure: " + e.toString());
                }
    
                @Override
                public void onResponse(Response response) throws IOException {
                    Log.e(TAG, "onResponse: " + response.toString());
                }
            }); 
when I run this app I'm getting a 403 error. This is my error log
Response{protocol=http/1.1, code=403, message=Forbidden, url=http://www.googleapis.com/oauth2/v4/token}
Here I'm using webserver type OAuth 2.0 Client ID since I need a client-secret, but also created OAuth 2.0 Client ID for android and given package name and SHA-1 key. Now my doubt is
- How can I get refresh token and access token from android?
 - Since it is an android app which redirect_uri should I give if needed?
 - Is there any library for android to achieve this solution?
 
Please help me someone... Thanks in advance.