@react-native-firebase/admob 的基本用法给出:“TypeError: (0, _admob.default) is not a function”。是不是已弃用?或为啥不起

Posted

技术标签:

【中文标题】@react-native-firebase/admob 的基本用法给出:“TypeError: (0, _admob.default) is not a function”。是不是已弃用?或为啥不起作用?【英文标题】:Basic usage of @react-native-firebase/admob gives: "TypeError: (0, _admob.default) is not a function". Is it deprecated? or Why doesnt work?@react-native-firebase/admob 的基本用法给出:“TypeError: (0, _admob.default) is not a function”。是否已弃用?或为什么不起作用? 【发布时间】:2021-08-18 23:49:31 【问题描述】:

@react-native-firebase/admob 是否已弃用?或者只是......为什么它不起作用?

我正在使用@react-native-firebase/admob (https://rnfb-docs.netlify.app/admob/usage)。 在使用“admob()”之前一切正常。当我将 admob() 添加到代码时出现此错误:

“TypeError: (0, _admob.default) 不是函数”

有人知道为什么吗?

我的代码如下(基本用法):

import React from 'react';
import  Text, View from 'react-native';
import admob,  MaxAdContentRating  from '@react-native-firebase/admob';
import  InterstitialAd, RewardedAd, BannerAd, TestIds  from '@react-native- 
firebase/admob';
import  BannerAdSize from '@react-native-firebase/admob';



class App extends React.Component

componentDidMount()

// this was taked of official page: https://rnfb-docs.netlify.app/admob/usage#installation
admob()
  .setRequestConfiguration(
    // Update all future requests suitable for parental guidance
    maxAdContentRating: MaxAdContentRating.PG,

    // Indicates that you want your content treated as child-directed for purposes of COPPA.
    tagForChildDirectedTreatment: true,

    // Indicates that you want the ad request to be handled in a
    // manner suitable for users under the age of consent.
    tagForUnderAgeOfConsent: true,
  )
  .then(() => 
    // Request config successfully set!
  );
 
render()
return(
  <View style=
    alignItems:"center", 
    justifyContent:"center",
    height:"100%">
    <Text style=color:"black">
      Hola
    </Text>
    <BannerAd 
      unitId=TestIds.BANNER 
      size=BannerAdSize.FULL_BANNER />
  </View>
  )
 

 export default App;


   

【问题讨论】:

恭喜您自己解决了您的错误!我的建议是将您的答案移至“答案”部分并将您自己的答案标记为解决方案。目前它仍然被标记为未解决!如果您需要任何帮助,请告诉我。 【参考方案1】:

尽管有@CodeJoe 回答,但我仍然对 React Native Firebase 的不同文档感到困惑,因此我花了很多时间和精力来解决它。

我打开一个问题 here,确认 Google 自 v11.5.0 以来删除了 AdMob 包。

AdMob 不再包含在 Firebase API 中,因此该模块不再封装它,没有文档可以更正。 但是,它确实存在于最近的 v11.5.0 版本中,如果您当时浏览存储库,您可能会考虑当时对 AdMob 的 e2e 测试作为“如何使用 AdMob”的入门读物https://github.com/invertase/react-native-firebase/tree/0217bff5cbbf233d7915efb4dbbdfe00e82dff23/packages/admob/e2e


请不要像我一样检查正确的文档和网站:

正确

https://rnfirebase.io

Wrong Wrong Wrong,这里指的是旧版本

https://rnfb-docs.netlify.app


互联网有很长的记忆,所以有文档的陈旧副本,而且大约是的,但 rnfirebase.io 始终是官方和当前的文档站点

Admob 已被 Google 从 firebase 生态系统中完全移除,因此它在此处不存在。它有一些社区包,我们的 v11.5 版本有它,我们希望剥离我们的实现并为社区更新它,但这需要时间,不幸的是,我们仍然积压在官方 firebase apis 上,所以它还没有还没发生


因此,对于 AdMob 解决方案,我将使用另一个库,并将 react-native-firebase 用于他们当前提供的解决方案

替代库(2021 年 8 月)

免责声明

React Native Firebase 对于他们提供的其他包(Firebase、Anaalitycs...)来说仍然是一个很棒的库,并且 Admob 版本 11.5 仍然是一个解决方案。这些只是 Admob 替代方案的建议。 react-native-admob-alpha 简洁清新的库,最近更新了。 react-native-admob-native-ads 另一个全新的库,他们实现了 Admob 原生高级广告。 Expo AdMob (Available also for bare React-Native Projects)

【讨论】:

如果仍然可以正常工作,使用旧版本的 firebase 有什么问题?如果你能推荐一些在 react-native 中使用 admob 的包,我会很感激,直到那里......我将使用 11.5 的所有 firebase @MauroElias 我个人仍然在项目中使用我自己的相同包(即使版本不匹配 12.0 和 11 并且仍然有效)。我关心的是一个长期的解决方案。如果它们(暂时)不再发展(暂时),它将变得过时,因此我宁愿坚持使用维护库(我在更新的答案中添加的看起来多汁且有趣的库。老实说,没有许多包可用。此外,如果您在维护的项目中遇到问题,最好获得支持。 确定@react-native-firebase/admob 不是长期解决方案,但在一段时间内还可以。对于这个 outdated 包,文档在 rnfb-docs.netlify.app 下(它是 outdated 文档的副本),而 @react-native-firebase/admob 不再是 rnfirebase.io。不幸的是,官方 (rnfirebase.io) 缺少版本控制文档...在这种情况下,我的意见是 - 感谢上帝,rnfb-docs.netlify.app 有副本 :) 谢谢好心人这样做:D 迄今为止最好的解决方案 +1【参考方案2】:

为了完成您的搜索,我将补充说 Admob 已从 React Native Firebase 中删除,并且没有计划再次实施它。仅在外部存储库上重新托管代码。 最后支持的版本是 11.5.0

这意味着如果您想在重新托管之前使用 RN Firebase Admob,您需要在此版本中使用所有其他服务(如 RNF 分析)。

更多信息请查看https://github.com/invertase/react-native-firebase/issues/5329#issuecomment-843272057

记得使用

dependencies
   "@react-native-firebase/admob": "11.5.0",
   "@react-native-firebase/app": "11.5.0",
 

而不是

dependencies
   "@react-native-firebase/admob": "^11.5.0",
   "@react-native-firebase/app": "^11.5.0",

 ```

【讨论】:

那么.. 你建议如何在没有 firebase 的情况下使用 react-native 添加广告?我检查了许多插件,这些插件已被弃用或存在许多错误...... 现在我选择保留/卡在没有更新的 11.5.0 版本 - 这是因为我现在没有看到任何更好的解决方案。也许有些东西会发生变化,所以我可以推荐的只是不时检查表格是否有变化:/ @CodeJoe - 您的解决方案对我有用。感谢您的解释。【参考方案3】:

我可以使用 11.5.0 降级技巧对我的 RewardedAds 做出反应原生 0.65.1。我如前所述编辑了 package.json 文件。它不起作用,但我设法以不同的方式运行它:

    关闭所有正在运行的 react-native 相关终端。卸载@react-native-firebase/app。

    npm 卸载 @react-native-firebase/app

    使用此命令直接安装@react-native-firebase/app 11.5.0 版。

    npm install @react-native-firebase/app@11.5.0

    安装后,转到 package.json>dependencies 并做两个包版本相同(11.5.0)并删除^

    "@react-native-firebase/admob": "11.5.0",

    "@react-native-firebase/app": "11.5.0",

    使用新缓存启动 react-native,然后运行 ​​android

    npx react-native start --reset-cache

    npx react-native run-android

【讨论】:

【参考方案4】:

我可以解决它。

已解决

只需在文件“package.json”中检查firebase的包是否具有相同的版本,例如:

dependencies
   "@react-native-firebase/admob": "^11.5.0",
   "@react-native-firebase/app": "^11.5.0"

提示

适用于类似错误。

【讨论】:

你使用 react native > 0.64 吗?我已经用0.64.2 尝试过你的解决方案,但它不起作用。 @Mauroelias 我在同样的问题上运行,似乎只是打破了真实 只需检查所有版本的 firebase 是否相同。它必须是 11.5(我知道这是一个旧版本......但这是我发现在 react-native 中使用 admob 的唯一方法)

以上是关于@react-native-firebase/admob 的基本用法给出:“TypeError: (0, _admob.default) is not a function”。是不是已弃用?或为啥不起的主要内容,如果未能解决你的问题,请参考以下文章