Expo 应用程序因 React-native-google-mobile-ads 崩溃 [在 app.json 的 React-native-google-mobile-ads 密钥中找不到 ios_appd_id 密钥]

问题描述 投票:0回答:3

我在使用react-native-google-mobile-ads时遇到此错误:https://github.com/invertase/react-native-google-mobile-ads/issues/194

我的应用程序正在使用带有 EAS 构建系统的 expo 管理工作流程。

我的应用程序为 Android 构建,但在 iOS 上失败,并出现以下错误:

ios_appd_id key not found in react-native-google-mobile-ads key in app.json. App will crash without it.
这很奇怪,因为 app.json 具有正确的定义:

"react-native-google-mobile-ads": {
    "android_app_id": "ca-app-pub-xxx",
    "ios_app_id": "ca-app-pub-xxx",
    "user_tracking_usage_description": "This identifier will be used to deliver personalized ads to you."
  }

无论我如何更改代码或依赖项,这种情况都会不断出现。为了调试并找到可重现的示例,我慢慢构建了一个新项目,该项目是通过 expo init 创建的(就像我最初的项目一样)。然而,我现在已经将每个文件精确地复制到新的、全新的应用程序中,包括所有资产(图标、启动画面),并且我根本无法重现该错误。这两个应用程序是彼此的精确复制品(code、app.json、eas.json、package.json)。事实上,新的应用程序工作得非常好,并且在开发和生产模式下的行为都符合预期。我很困惑。上述错误发生在构建过程的“运行 fastlane”阶段。

有错误的 fastlane 日志在这里:https://pastebin.com/4cD8T3Sn 新应用程序的日志完全相同,只是日志的最后几行是成功消息:

› Copying   ios/googleadmobtest/Supporting/Expo.plist ➜ ./Expo.plist
› Compiling googleadmobtest » SplashScreen.storyboard
› Preparing googleadmobtest » Info.plist
› Executing googleadmobtest » Bundle React Native code and images
› Generating debug googleadmobtest » googleadmobtest.app.dSYM
› Executing googleadmobtest » [CP] Copy Pods Resources
› Executing googleadmobtest » [CP-User] [RNGoogleMobileAds] Configuration
› Signing   googleadmobtest » googleadmobtest.app
› Creating  googleadmobtest » googleadmobtest.app
› Archive Succeeded
Generated plist file with the following values:
▸ -----------------------------------------
▸ {
▸   "method": "ad-hoc",
▸   "provisioningProfiles": {
▸     "com.arham23.googleadmobtest": "c88fe3cb-0ed2-427d-ae68-ec6a484dccca"
▸   },
▸   "signingStyle": "manual"
▸ }
▸ -----------------------------------------
$ /usr/bin/xcrun /usr/local/lib/ruby/gems/2.7.0/gems/fastlane-2.205.2/gym/lib/assets/wrap_xcodebuild/xcbuild-safe.sh -exportArchive -exportOptionsPlist '/var/folders/h2/gp9wlkv11lg0qj6y2mnqgc_40000gn/T/gym_config20220815-4163-q9vcsf.plist' -archivePath /Users/expo/Library/Developer/Xcode/Archives/2022-08-15/googleadmobtest\ 2022-08-15\ 23.44.51.xcarchive -exportPath '/var/folders/h2/gp9wlkv11lg0qj6y2mnqgc_40000gn/T/gym_output20220815-4163-1ishkbk' OTHER_CODE_SIGN_FLAGS="--keychain /var/folders/h2/gp9wlkv11lg0qj6y2mnqgc_40000gn/T/turtle-v2-9ac5a45d-33ef-4193-bf51-33b05b2e1e98.keychain"
Compressing 1 dSYM(s)
$ cd '/Users/expo/Library/Developer/Xcode/Archives/2022-08-15/googleadmobtest 2022-08-15 23.44.51.xcarchive/dSYMs' && zip -r '/Users/expo/workingdir/build/ios/build/googleadmobtest.app.dSYM.zip' *.dSYM
▸   adding: googleadmobtest.app.dSYM/ (stored 0%)
▸   adding: googleadmobtest.app.dSYM/Contents/ (stored 0%)
▸   adding: googleadmobtest.app.dSYM/Contents/Resources/ (stored 0%)
▸   adding: googleadmobtest.app.dSYM/Contents/Resources/DWARF/ (stored 0%)
▸   adding: googleadmobtest.app.dSYM/Contents/Resources/DWARF/googleadmobtest (deflated 75%)
▸   adding: googleadmobtest.app.dSYM/Contents/Info.plist (deflated 44%)
Successfully exported and compressed dSYM file
Successfully exported and signed the ipa file:
/Users/expo/workingdir/build/ios/build/googleadmobtest.ipa

我可以提供任何其他必要的信息,我对博览会和反应本机有点陌生,所以我不确定什么是相关的。我原来的应用程序的配置似乎有问题,但我不知道问题是什么。我想尝试删除所有 ios pod 并重新安装,但该应用程序由 expo 管理,我不确定如何在 expo CLI 中完成此操作。任何帮助将不胜感激。

ios react-native expo admob eas
3个回答
2
投票

为了解决此错误,我将配置拆分为两个文件。 Expo 默认情况下将

app.config.json
加载到
app.json
上,并且
react-native-google-mobile-ads
读取
app.json

app.json

{ 
    "react-native-google-mobile-ads": {
        ...app ids
    }
}

app.config.json

{
    "expo": {
        "name": ...
        ...
    }
}

1
投票

我遇到了同样的问题,然后我尝试将 app.json 分成两部分,如下所示: 在 app.json 中,复制并粘贴以下代码之前

{
 "react-native-google-mobile-ads": {
    "android_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
    "ios_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx"
 }
}

来自 https://docs.page/invertase/react-native-google-mobile-ads#configure-outbound-requests 我搬家了

 "name": "...", "displayName": "...",
名为 app.config.json 的新文件与 app.json 位于同一目录。 结论: app.json

{
"react-native-google-mobile-ads": {
    "android_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx",
    "ios_app_id": "ca-app-pub-xxxxxxxx~xxxxxxxx"
  }
}

app.config.json

{
 "name": "...",
  "displayName": "...",
}

请注意:因为您更改了 app.json -> app.config.json,所以无论您从 app.json 实现数据,您都需要更改为 app.config,json 例如,在我的index.js中有一行 import {name as appName} from './app.json' 将其更改为 import {name as appName} from './app.config.json' 希望各位能解决这个问题,谢谢。


0
投票

这已经没有必要了。您可以将两者放在同一个 app.json 文件中。

app.json

"expo": {
    "name": "example",
    "slug": "example-slug",
    ...
  },
  "react-native-google-mobile-ads": {
    "android_app_id": "ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx",
    "ios_app_id": "ca-app-pub-xxxxxxxxxxxxxxxx~xxxxxxxxxx"
  }

在 android 中,需要使用以下内容更新

npx expo prebuild
之后生成的 AndroidManifest.xml:

<application android:name=".MainApplication" android:label="@string/app_name" android:icon="@mipmap/ic_launcher" android:roundIcon="@mipmap/ic_launcher_round" android:allowBackup="true" android:theme="@style/AppTheme">
    ...
    <meta-data android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-2251305723458145~xxxxxxxxxx"/>
    ...
</application>

ios 中,您需要配置 info.plist 文件:https://developers.google.com/admob/ios/quick-start#update_your_infoplist

要测试只需运行

npx expo run:android/ios

希望我有所帮助!谢谢!

© www.soinside.com 2019 - 2024. All rights reserved.