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

Expo React Native生产环境Clerk认证失效及DNS配置困惑求助

问题概述
  • 技术栈:React Native + Expo + Clerk认证
  • 现象:开发环境登录功能正常,打包为APK后登录按钮失效,出现空白屏,日志报错:
    WARN  [Error: ClerkJS: Network error at "https://clerk.dns-dynamic.net/v1/client/sign_ins?_clerk_js_version=4.70.3&_is_native=1" - TypeError: Network request failed. Please try again.]
    ERROR  OAuth error  [TypeError: Cannot read property 'toString' of null]
    
  • 已做操作:切换Clerk到生产模式、更新publishableKey,通过以下命令打包AAB后转APK:
    eas login
    eas build:configure
    eas build -p android
    
  • 困惑点:Clerk生产配置要求DNS配置,但应用仅本地使用,无法理解必要性

解决方案

1. 解决Clerk生产环境的来源验证问题

Clerk生产环境并非要求网站DNS解析,而是需要验证APP的身份来源:

  • 登录Clerk控制台,找到你的生产环境应用
  • 进入「Settings → Native Apps」,添加你的Android应用包名(必须和eas.json中配置的android.package一致)
  • 进入「Settings → Allowed Origins」,添加exp://(如果保留Expo特性)和你的APP包名对应的格式android://<你的包名>
  • 生产环境下Clerk会拒绝未授权来源的API请求,这是核心原因,开发环境因为有豁免所以正常

2. 修复APK转换过程的潜在问题

用Python脚本转换AAB到APK可能导致签名、配置丢失:

  • 改用官方bundletool工具转换,确保APK完整性:
    # 生成APKS包
    bundletool build-apks --bundle=./path/to/your/app-release.aab --output=app.apks --ks=your-keystore.jks --ks-pass=pass:your-keystore-password --ks-key-alias=your-key-alias --key-pass=pass:your-key-password
    # 安装到设备
    bundletool install-apks --apks=app.apks
    
  • 或者直接让EAS Build生成APK:修改eas.json的build配置,添加buildType: "apk":
    {
      "build": {
        "production": {
          "android": {
            "buildType": "apk"
          }
        }
      }
    }
    
    再执行eas build -p android直接得到APK,跳过转换步骤

3. 核对Clerk生产配置细节

  • 确认使用的是生产环境的publishableKey(以pk_live_开头,而非pk_test_)
  • 在Expo的app.config.js或app.json中确保生产环境变量正确配置:
    export default {
      expo: {
        // ...其他配置
        extra: {
          clerkPublishableKey: process.env.CLERK_PUBLISHABLE_KEY || "pk_live_xxx"
        }
      }
    }
    
  • 初始化ClerkProvider时正确读取生产密钥:
    import { ClerkProvider } from '@clerk/clerk-expo';
    import Constants from 'expo-constants';
    
    export default function App() {
      return (
        <ClerkProvider publishableKey={Constants.expoConfig.extra.clerkPublishableKey}>
          {/* 你的应用组件 */}
        </ClerkProvider>
      );
    }
    

4. 排查网络请求异常

  • 日志中的clerk.dns-dynamic.net如果是你自定义的Clerk域名,需确保该域名能正常解析、SSL证书有效;如果是误配置,改为Clerk默认的API域名(比如api.clerk.dev)
  • 用抓包工具(如Charles、Proxyman)捕获APK的网络请求,确认是否存在DNS解析失败、SSL握手错误或请求被拦截的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 11:45:54