Google 登录和支付接入
应用上架 google play 应用市场,接入google 登录和支付是一个必不可少的流程,本文就介绍一下接入google登录和支付的流程。
Google 登录
设置你的 Google API 控制台项目
1. 创建项目
在 API 控制台 中打开您的项目,如果您还没有项目,请创建一个。
没有项目,就新建一个。
2. 完善 OAuth 同意屏幕信息
在 OAuth 同意屏幕页面上,确保所有信息都完整准确。特别是,请确保您已指定应用程序的隐私政策和服务条款的 URL。
点击创建,修改应用注册信息,按照提示将内容如实填写,最后点击保存并继续。
3. 创建客户端ID(Android 和 Web)
在 凭证 页面上,创建一个 Android 客户端 ID(需要指定应用程序的包名称和 SHA-1 签名)。
在 凭证 页面上,创建一个 Web 应用程序客户端 ID。将 JavaScript 来源 和 重定向 URI 字段留空。
创建完成后显示如下:
注:
-
不管是授权登录还是一键登录都需要使用Web客户端ID才能成功,因为使用 Android 客户端ID测试(失败),推荐用使用Web方式登入。官方文档在官方文档说明了 必须要用Web客户端ID 才可以
-
应用上线后(可以先提交一个内部测试应用,不用官方审核)在google play中获取Google生成的SHA-1 再根据这个值在Google Cloud 中创建一个Android Aouth客户端ID 不然google会一直返回 10。
添加依赖项
1. 在项目的build.gradle中添加google()
buildscript {
repositories {
google()
mavenCentral()
...
}
}
allprojects {
repositories {
google()
mavenCentral()
...
}
}
2. 在 build.gradle (Module: app) 并中添加库
dependencies {
...
// google 账号登录
implementation 'com.google.android.gms:play-services-auth:21.0.0'
}
授权登录
public class GoogleHelper {
private GoogleSignInClient mGoogleSignInClient;
//该方法要放在onCreate里面,不能放在监听器里
private ActivityResultLauncher<Intent> mLauncher;
private AppCompatActivity mActivity;
public GoogleHelper(AppCompatActivity activity) {
mActivity = activity;
}
public void registerForActivityResult(GoogleLoginCallback callback) {
mLauncher = mActivity.registerForActivityResult(new ActivityResultContracts.StartActivityForResult(), new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == Activity.RESULT_OK) {
LogUtil.e(TAG, "setActivityResultGoogle");
Task<GoogleSignInAccount> task1 = GoogleSignIn.getSignedInAccountFromIntent(result.getData());
try {
GoogleSignInAccount account = task1.getResult(ApiException.class);
UserInfoBean user = new UserInfoBean();
user.setThirdId(account.getId());
user.setEmail(account.getEmail());
Uri photoUrl = account.getPhotoUrl();
if (photoUrl != null) {
user.setHeadUrl(photoUrl.toString());
}
user.setNickname(account.getDisplayName());
UserInfoHelper.setMyInfo(user);
if (callback != null) {
callback.onCallback(true, account.getId());
}
} catch (ApiException e) {
e.printStackTrace();
if (callback != null) {
callback.onCallback(false, "");
}
LogUtil.e(TAG, "ApiException:" + e.getMessage());
}
} else {
if (callback != null) {
callback.onCallback(false, "");
}
}
}
});
}
private void signInClient() {
if (mGoogleSignInClient == null) {
String clientId = "XXXXXXXXXXXXXX";
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken(clientId)
.build();
mGoogleSignInClient = GoogleSignIn.getClient(mActivity, gso);
}
}
/**
* 获取 google Intent ,跳转到谷歌登录
*
* @return
*/
public Intent getGoogleIntent() {
Intent signInIntent;
if (mGoogleSignInClient == null) {
signInClient();
}
signInIntent = mGoogleSignInClient.getSignInIntent();
return signInIntent;
}
public void login() {
mLauncher.launch(getGoogleIntent());
}
public void logOut(OnCompleteListener listener) {
if (mGoogleSignInClient == null) {
signInClient();
}
mGoogleSignInClient.signOut().addOnCompleteListener(listener);
}
public interface GoogleLoginCallback {
void onCallback(boolean success, String accountId);
}
public void release() {
mActivity = null;
if (mGoogleSignInClient != null) {
mGoogleSignInClient = null;
}
if (mLauncher != null) {
mLauncher.unregister();
mLauncher = null;
}
}
}
使用Web客户端ID测试(成功)
开始测试,授权登录: