Flutter iOS集成SignInWithApple无法获取用户信息问题求助
解决Flutter iOS中Sign In with Apple无法获取用户邮箱/全名的问题
核心原因:Apple登录的授权特性
Apple仅在用户首次授权你的应用登录时,才会返回email和fullName字段。如果用户之前已经授权过你的应用,后续调用接口只会返回授权码和身份令牌,不会再返回用户的邮箱和全名信息。
验证方法
在iOS设备的「设置」→「Apple ID」→「密码与安全性」→「使用Apple ID的应用」中找到你的应用,点击「停止使用Apple ID」,然后重新打开应用发起Apple登录,此时应该能获取到邮箱和全名。
其他排查点
确认nonce处理逻辑正确
确保generateNonce和sha256ofString的实现符合Apple的要求,错误的nonce生成会导致令牌内容异常。参考官方标准实现:String generateNonce([int length = 32]) { final charset = '0123456789ABCDEFGHIJKLMNOPQRSTUVXYZabcdefghijklmnopqrstuvwxyz-._'; final random = Random.secure(); return List.generate(length, (_) => charset[random.nextInt(charset.length)]).join(); } String sha256ofString(String input) { final bytes = utf8.encode(input); final digest = sha256.convert(bytes); return digest.toString(); }注意:需要导入
dart:convert和package:crypto/crypto.dart包。检查开发者后台配置
- 确认App ID已启用「Sign In with Apple」服务
- 确认「Sign In with Apple」的配置中,Primary App ID与你的应用Bundle ID一致
- 确认团队ID和密钥配置正确(如果使用服务器验证的话)
正确解码身份令牌
使用JWT解码工具(如jwt_decode包)解析身份令牌,检查payload中是否包含email、given_name、family_name字段:import 'package:jwt_decode/jwt_decode.dart'; Map<String, dynamic> payload = Jwt.parseJwt(appleCredential.identityToken!); String? email = payload['email']; String? givenName = payload['given_name'];
内容的提问来源于stack exchange,提问作者Veoxer
相关产品推荐
相关产品推荐

