@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”。是不是已弃用?或为啥不起的主要内容,如果未能解决你的问题,请参考以下文章