iOS集成Facebook至Cognito用户池:邮箱/手机号未同步问题排查
问题分析与解决方案
核心原因:Facebook权限审核与应用状态限制
你遇到的邮箱/手机号无法同步到Cognito的问题,核心原因大概率是Facebook应用的权限未通过审核,以及可能的权限请求不完整。结合你提到的“登录审核错误提示”,具体拆解如下:
1. 未审核应用的权限限制
Facebook应用处于开发模式时,仅允许应用的管理员、开发者和已添加的测试用户获取请求的权限(如email),普通用户即便授权,也无法返回敏感信息。如果你的测试账号不在内部测试列表中,即便自己配置了邮箱手机号,也无法被应用获取。
另外,user_phone_number(手机号)属于Facebook的敏感权限,必须完成商业验证+权限审核才能向普通用户开放,开发模式下仅内部用户能测试该权限。
2. 权限请求与配置遗漏
- Amplify配置的Scope不全:你的
amplifyconfiguration.json中仅请求了openid和email,如果需要获取手机号,必须添加user_phone_number到Scopes数组中。 - Facebook后台权限未配置:需在Facebook开发者后台的「登录产品」设置里,将
email和user_phone_number添加到「请求的权限」列表并保存,否则即便Amplify请求了权限,Facebook也不会返回对应信息。
3. Cognito属性映射需确认
进入Cognito用户池的「身份提供商」→「Facebook」配置页,确保:
- Facebook的
email字段已映射到Cognito的email属性 - Facebook的
phone_number字段已映射到Cognito的phone_number属性 - 所有映射项均已勾选「启用」
排查与解决步骤
- 验证测试用户身份:确认测试账号是Facebook应用的开发者/管理员,或已添加到「测试用户」列表中,用该账号重新登录测试是否能获取邮箱。
- 补充权限配置:
- 在
amplifyconfiguration.json的Scopes中添加user_phone_number(如果需要手机号):"Scopes": ["openid", "email", "user_phone_number"] - 在Facebook开发者后台的「登录产品」→「权限与功能」中,添加并启用
email和user_phone_number权限。
- 在
- 完成商业验证与权限审核:
- 如果需要面向普通用户获取手机号,必须先完成Facebook的商业验证(提交企业资质等材料)。
- 提交
email和user_phone_number权限的审核申请,说明权限的使用场景,审核通过后普通用户即可正常授权并同步信息。
- 检查Cognito映射:重新确认Cognito的属性映射规则,确保字段对应正确且已启用。
附:你提供的代码与配置
iOS登录代码
Amplify.Publisher.create { try await Amplify.Auth.signInWithWebUI(for: .facebook, presentationAnchor: window) }.sink { if case let .failure(authError) = $0 { print("Sign in failed \(authError)") } } receiveValue: { signInResult in if signInResult.isSignedIn { print("Sign in succeeded") } }
amplifyconfiguration.json配置
{ "auth": { "plugins": { "awsCognitoAuthPlugin": { "IdentityManager": { "Default": {} }, "CognitoUserPool": { "Default": { "PoolId": "us-*********", "AppClientId": "************", "AppClientSecret": "************", "Region": "us-************" } }, "Auth": { "Default": { "authenticationFlowType": "USER_SRP_AUTH", "OAuth": { "WebDomain": "************", "AppClientId": "************", "AppClientSecret": "************", "SignInRedirectURI": "************://", "SignOutRedirectURI": "", "Scopes": ["openid", "email"] } } } } } } }
内容的提问来源于stack exchange,提问作者Neo
相关产品推荐
相关产品推荐

