You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android应用接入Google登录后如何接收账号远程登出事件通知

实现Google账号远程登出感知方案

核心实现逻辑

Google Sign-In SDK原生提供了账号授权状态变更的监听能力,配合前台主动校验即可实现和Gmail一致的实时感知效果,不需要自行实现轮询或长连接。

具体实现步骤

1. 注册远程授权撤销监听器

在初始化GoogleSignInClient的onCreate方法中追加监听注册代码,账号被远程登出/撤销授权时会自动触发回调:

protected void onCreate(Bundle savedInstanceState) {
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .build();
    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);
    
    // 新增:注册远程登出监听
    mGoogleSignInClient.addOnCredentialRevokedListener(() -> {
        runOnUiThread(() -> {
            Toast.makeText(this, "账号已在其他设备登出", Toast.LENGTH_SHORT).show();
            handleLocalLogoutLogic();
        });
    });
}

2. 前台场景主动校验补全

为了避免网络延迟导致的监听回调不及时,在Activity的onResume生命周期中主动校验登录状态:

@Override
protected void onResume() {
    super.onResume();
    // 先校验本地是否还有登录账号缓存
    GoogleSignInAccount signedInAccount = GoogleSignIn.getLastSignedInAccount(this);
    if (signedInAccount == null) {
        handleLocalLogoutLogic();
        return;
    }
    // 静默请求校验账号有效性,无UI弹窗不打扰用户
    mGoogleSignInClient.silentSignIn().addOnCompleteListener(task -> {
        if (!task.isSuccessful()) {
            handleLocalLogoutLogic();
        }
    });
}

3. 封装通用登出逻辑

把登出后需要执行的操作封装为公共方法,供上述两个场景统一调用:

private void handleLocalLogoutLogic() {
    // 清除本地存储的用户信息、登录态标记
    // 跳转至登录页面
    // 其他你需要的登出后处理逻辑
}

注意事项

  • 不需要自行维护后台轮询任务,SDK的状态同步由谷歌Play服务统一管理,功耗极低
  • 不要直接用本地缓存的GoogleSignInAccount对象判断登录有效性,本地缓存不会随远程登出自动更新

内容的提问来源于stack exchange,提问作者nerlijma

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:18:00