使用Capacitor调用Google APIs时出现Error 403问题求助
iOS端调用Google Calendar API返回403的排查方案
核心原因分析
你的问题大概率和权限范围、凭证配置或Token有效性相关,Google APIs完全支持Capacitor应用发起请求,不是平台限制导致的。以下是具体排查点:
1. Access Token的权限范围(Scopes)未包含Calendar权限
浏览器端可能在认证时请求了Calendar相关权限,但iOS端的capacitor-google-auth配置里遗漏了对应scope。Google Calendar API需要明确申请权限:
- 若需读写日历:
https://www.googleapis.com/auth/calendar - 若仅需只读:
https://www.googleapis.com/auth/calendar.readonly
检查capacitor.config.json中的GoogleAuth配置,确保scopes数组包含所需权限:
{ "plugins": { "GoogleAuth": { "scopes": [ "email", "profile", "https://www.googleapis.com/auth/calendar.readonly" ], "clientId": "YOUR_IOS_CLIENT_ID", "iosClientId": "YOUR_IOS_SPECIFIC_CLIENT_ID" } } }
2. Google Cloud Console的iOS客户端凭证配置错误
即使你添加了REVERSED_CLIENT_ID的URL scheme,若Cloud Console中的iOS客户端凭证配置有误,Token会因受众(Audience)不匹配被API拒绝:
- 确认iOS客户端的Bundle ID和你Xcode项目中的Bundle ID完全一致(大小写、标点都不能错)
- 检查Google Cloud Console中是否已启用Google Calendar API(搜索API库,找到Calendar API并启用)
- 确保你在
capacitor.config.json中填写的iosClientId是Cloud Console中iOS客户端的Client ID,而非Web客户端的ID
3. Access Token的受众(Audience)验证失败
Capacitor-google-auth返回的Token可能绑定了错误的客户端ID,导致API不认。你可以解码Token(用本地JWT解码工具操作)查看aud字段:
- 若
aud值不是你Cloud Console中iOS客户端的Client ID,说明认证时用错了客户端凭证,需修正capacitor.config.json中的iosClientId配置
4. Axios请求头格式错误
确认Authorization头的格式完全正确:
- 必须是
Bearer <你的Access Token>,注意Bearer和Token之间有一个空格 - 检查请求头的key是否为
Authorization(严格遵循规范可避免兼容性问题)
比如正确的Axios请求配置:
axios.get('https://www.googleapis.com/calendar/v3/calendars/primary/events', { headers: { 'Authorization': `Bearer ${accessToken}` } })
内容的提问来源于stack exchange,提问作者Joshua Reinier
相关产品推荐
相关产品推荐

