Android — Apple 网页 OAuth 登录(login-apple)
验收状态
源码候选已建立,但没有正式业务模块发布 Tag / 远程 Reposilite 版本,也没有完成真实游戏项目签名与第三方服务端联调。 单模块 CI 或五模块共存编译不能等同上线验收。生产接入必须以实测、正式版本和固定游戏协议为准。
源码目录:modules/login-apple。仅使用 Android 系统 Intent/HTTPS,不包含 Apple 私钥、client_secret、网页 Cookie 或服务端授权码交换。
必备的服务端流程
- 后端生成随机且一次性的 state、nonce,与服务端授权会话绑定;构建 Apple 的 HTTPS authorize URL。
- Apple
form_post授权回调交给后端,后端完成授权码交换、凭证验签、会话安全保护。 - 后端把短期一次性
backend_code和匹配的 state 通过已验证 HTTPS Android App Link 回跳到真实游戏 Activity。 - Activity 调用独立模块的
handleRedirect验证回跳 scheme/host/path/state,只把一次性码交后端再次确认游戏账号。
宿主调用
java
ROLoginApple auth = new ROLoginApple(
Uri.parse("https://app.example.com/apple/complete"),
serverGeneratedRandomState, new ROLoginApple.Completion() {
@Override public void onBackendCode(String code) {
// 再请求游戏后端验证一次性码;此回调本身不是登录成功。
}
@Override public void onFailure(String message, boolean cancelled) {}
});
auth.start(activity, backendCreatedAppleAuthorizeUri);
// 已启用且校验过的 Android App Links Activity 的 onNewIntent:
auth.handleRedirect(intent.getData());本模块不提供 Apple OAuth 服务器;没有真实 Apple Services ID、HTTPS 回跳、业务服务端就无法完成正式登录验收。