首先要进入到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>