在 React-Native 中调用 interstitialAd.load() 方法时应用程序崩溃

Posted

技术标签:

【中文标题】在 React-Native 中调用 interstitialAd.load() 方法时应用程序崩溃【英文标题】:App is crashing while calling interstitialAd.load() method in React-Native 【发布时间】:2021-07-10 19:37:08 【问题描述】:

我试图在我的项目中放置 interstitialAd,但 interstitialAd.load(); 使应用程序崩溃。我的 AdMob 配置很好,广告横幅广告运行良好

使用的插件:@react-native-firebase/admob

代码如下:

import  Button, View  from 'react-native';
import  InterstitialAd, AdEventType, TestIds  from '@react-native-firebase/admob';

export default class InterstitialAdUnit extends React.Component 
    constructor(props) 
        super(props);
    
    
    showInterstitialAd = () => 
        
        const interstitialAd = InterstitialAd.createForAdRequest(TestIds.INTERSTITIAL);
       
        interstitialAd.onAdEvent((type, error) =>            
            if (type === AdEventType.LOADED) 
                interstitialAd.show();
            
        );
        
        interstitialAd.load();
     
    render() 
        return (
            <Button
                title="Show Interstitial"
                onPress=() => 
                    this.showInterstitialAd();
                
            />    
    )

【问题讨论】:

嗨@Dibyendu!我维护 react-native-firebase 并且我在下面发布了一个带有详细信息的答案和一个带有修复的官方版本:-) 干杯 【参考方案1】:

你好,我的朋友,我为你找到了解决方案 应用程序/build.gradle 依赖 …… 实施(“com.google.android.gms:play-services-ads:19.8.0”) force = true;

【讨论】:

您好,欢迎来到 Stack Overflow!请拨打tour。感谢您的回答,但您是否还可以添加有关您的代码如何解决问题的解释?查看help center 获取有关如何格式化代码的信息。【参考方案2】:

我维护 react-native-firebase,也许我可以解释为什么会发生这种情况,以及修复方法。

@react-native-firebase/admob 单独使用时不会崩溃,与 InterstitialAds 一起使用

但是,firebase-android-sdk 和 admob 刚刚发布了一个重大更改版本(firebase-android-sdk 为 v27,admob 为 v20)移动了 InterstitialAd 包名称和 如果你有 另一个 admob 依赖项,其中 gradle 依赖项使用 + 的版本指定,这允许重大更改版本泄漏并破坏您的应用程序。

因此,正如其他人评论的那样,将依赖项固定在您的 build.gradle 中会解决您的问题:

implementation("com.google.android.gms:play-services-ads:19.8.0")  force = true; 

这里有完整的细节:https://github.com/invertase/react-native-firebase/issues/5127

react-native-firebase(包括 admob 模块)v11.3.1 现已发布,其中包含此 PR 的内容以修复问题:https://github.com/invertase/react-native-firebase/pull/5189

祝你的项目好运

【讨论】:

【参考方案3】:

诶, 我尝试了这个解决方案,似乎适用于第一次测试。 https://github.com/invertase/react-native-firebase/discussions/5166

只是: 解决方法 应用程序/build.gradle

实施(“com.google.android.gms:play-services-ads:19.8.0”) force = true;

【讨论】:

以上是关于在 React-Native 中调用 interstitialAd.load() 方法时应用程序崩溃的主要内容,如果未能解决你的问题,请参考以下文章

AXIOS 调用在 React-Native 0.63 中给出网络错误

.then 异步函数中的 React-Native 调用函数

在 React-Native 中调用 interstitialAd.load() 方法时应用程序崩溃

多层装饰器的调用及执行顺序

如何在带有 Jest 的 react-native 中使用模拟的 fetch() 对 API 调用进行单元测试

在 react-native 中从 TypeScript 调用本机函数