谷歌登录接口调用

首先要进入到google的开发者控制台

https://console.cloud.google.com/apis/dashboard?pli=1

(1)添加一个api和服务

然后进入到OAuth权限请求页面进行请求,

之后在凭据里面选择创建凭据,选择OAuth2.0客户端,选择android,要找自己的包和SHA1

SHA1的获取方式是进入到android studio的

之后进入到C:\用户\名字\.android目录之后输入keytool -list -v -keystore debug.keystore

之后输入密码,默认为android,就能获取到自己的SHA1

,之后再做一个Web应用的OAuth2.0客户端

后进行代码的编写,在app的build.gradle的dependencies中添加依赖

implementation 'com.google.android.gms:play-services-auth:20.6.0'

并在AndroidManifest中添加

<uses-permission android:name="android.permission.INTERNET"/>权限,之后在string的resources里面添加

<string name="default_web_client_id">?????</string>编写代码时???是Web应用的客户端ID。之后进行编码

package com.example.bluegalsses;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;

/**
 * 主活动类,负责处理用户登录和登出功能。
 * 使用Google Sign-In API实现。
 */
public class MainActivity extends AppCompatActivity {

    // Google Sign-In 请求代码
    private static final int RC_SIGN_IN = 9001;
    // Google Sign-In 客户端对象
    private GoogleSignInClient mGoogleSignInClient;
    // 登录按钮
    private SignInButton signInButton;
    // 登出按钮
    private Button signOutButton;

    /**
     * 活动创建时初始化界面和Google Sign-In 客户端。
     * @param savedInstanceState 如果存在,恢复之前的保存状态。
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 配置Google Sign-In 选项
        // 配置Google Sign-In
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

        signInButton = findViewById(R.id.sign_in_button);
        signOutButton = findViewById(R.id.sign_out_button);

        // 设置登录按钮点击事件
        signInButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signIn();
            }
        });

        // 设置登出按钮点击事件
        signOutButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                signOut();
            }
        });
    }

    /**
     * 触发Google登录流程。
     */
    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    /**
     * 处理登录流程的结果。
     * @param requestCode 请求代码
     * @param resultCode 结果代码
     * @param data 返回的Intent
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            handleSignInResult(task);
        }
    }

    /**
     * 处理登录结果。
     * @param completedTask 完成的登录任务
     */
    private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
        try {
            GoogleSignInAccount account = completedTask.getResult(ApiException.class);
            updateUI(account);

            // 打印用户信息
            if (account != null) {
                String personName = account.getDisplayName();
                String personEmail = account.getEmail();
                String personId = account.getId();
                Uri personPhoto = account.getPhotoUrl();

                Log.d("GoogleSignIn", "Name: " + personName);
                Log.d("GoogleSignIn", "Email: " + personEmail);
                Log.d("GoogleSignIn", "ID: " + personId);
                Log.d("GoogleSignIn", "Photo URL: " + personPhoto);
            }
        } catch (ApiException e) {
            Log.w("GoogleSignIn", "signInResult:failed code=" + e.getStatusCode());
            updateUI(null);
        }
    }

    /**
     * 根据用户登录状态更新界面。
     * @param account 当前登录的Google账户
     */
    private void updateUI(GoogleSignInAccount account) {
        if (account != null) {
            signInButton.setVisibility(View.GONE);
            signOutButton.setVisibility(View.VISIBLE);
            Log.e("msg", "Signed in as " + account.getDisplayName());
            Toast.makeText(this, "Signed in as " + account.getDisplayName(), Toast.LENGTH_LONG).show();
        } else {
            signInButton.setVisibility(View.VISIBLE);
            signOutButton.setVisibility(View.GONE);
            Log.e("msg", "Signed out");
            Toast.makeText(this, "Signed out", Toast.LENGTH_LONG).show();
        }
    }

    /**
     * 触发Google登出流程。
     */
    private void signOut() {
        mGoogleSignInClient.signOut()
                .addOnCompleteListener(this, new OnCompleteListener<Void>() {
                    @Override
                    public void onComplete(@NonNull Task<Void> task) {
                        updateUI(null);
                    }
                });
    }
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center">

    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <Button
        android:id="@+id/sign_out_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Sign Out" />
</LinearLayout>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值