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
相关产品推荐
相关产品推荐

