You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Expo托管iOS应用点击“使用Google登录”崩溃求助

解决方案:Expo托管iOS端Google登录崩溃排查

1. 移除iOS无效API调用

你的代码中调用了await GoogleSignin.hasPlayServices();,这是Android专属API,iOS环境下调用会直接触发崩溃,必须删除这一行:

修改后的SignIn函数:

const SignIn = async () => {
    try {
        // 建议将configure移至App初始化阶段,避免每次登录重复配置
        const userInfo = await GoogleSignin.signIn();
        // 后续业务逻辑...
    } catch (error) {
        // 新增错误捕获,便于排查问题
        console.error('Google登录错误:', error);
    }
};

2. 清理重复的URL Scheme配置

你在app.json的plugins和ios.infoPList中重复配置了Google的URL Scheme,会导致系统重复注册引发崩溃。删除ios.infoPList中的CFBundleURLTypes部分,由@react-native-google-signin/google-signin插件自动处理:

修改后的app.json片段:

"plugins": [
    "expo-apple-authentication",
    [
        "@react-native-google-signin/google-signin",
        {
            "iosUrlScheme": "com.googleusercontent.apps.xxx-xxx"
        }
    ]
],
"ios": {
    "bundleIdentifier": "myapp",
    "infoPList": {
        "UIRequiresFullScreen": true,
        // 保留其他原有配置
    }
}

3. 修正Google Signin配置逻辑

  • 不要在SignIn函数内重复调用GoogleSignin.configure,建议在App启动时(如App.js的useEffect中)仅配置一次:
// App.js
import { GoogleSignin } from '@react-native-google-signin/google-signin';
import { useEffect } from 'react';

useEffect(() => {
    GoogleSignin.configure({
        webClientId: "xxx-xxx.apps.googleusercontent.com",
        androidClientId: "xxx-xxx.googleusercontent.com",
        iosClientId: "xxx-xxx.apps.googleusercontent.com", // 确认是iOS客户端专属ID,勿与Web/Android ID混淆
    });
}, []);
  • 核对iosClientId为Google Cloud Console中iOS客户端生成的ID,ID不匹配会直接导致登录失败或崩溃。

4. 验证Google Cloud Console配置

  • 确认Google Cloud中iOS客户端的Bundle ID与app.json的bundleIdentifier完全一致(注意大小写、拼写);
  • 确认iOS客户端的Authorized redirect URIs已包含你的URL Scheme(com.googleusercontent.apps.xxx-xxx)。

5. 无Xcode时收集崩溃日志

  • 系统日志采集:让测试用户开启「设置>隐私与安全性>分析与改进>共享iPhone分析」,崩溃后在「分析数据」中找到以应用名称开头的日志,导出后查看崩溃堆栈;
  • 集成Sentry:使用Expo免费额度的Sentry集成,配置后崩溃日志会自动上传,无需付费即可查看:
"plugins": [
    ["sentry-expo", {
        "organization": "你的组织名",
        "project": "你的项目名",
        "authToken": "你的Sentry授权令牌"
    }]
]

6. 依赖兼容性调整

尝试将@react-native-google-signin/google-signin降级至v10.1.1,部分用户反馈v11.x版本在Expo 49环境下存在iOS兼容性问题。


内容的提问来源于stack exchange,提问作者Muhammad Abbas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 03:10:35