首页 > 解决方案 > 为什么 AdMob Free 在 iOS 模拟器中使我的应用崩溃?

问题描述

我正在尝试将 adMobFree 添加到全新的 Ionic 4 项目中。

我一遍又一遍地尝试这样做,使用不同的方法并遵循不同的教程,结果总是一样的:应用程序拒绝在 iOS 模拟器中运行。它只是停在初始屏幕上。

安装步骤

ionic cordova platform add ios
ionic cordova platform add android

ionic cordova plugin add cordova-plugin-admob-free --save --variable ADMOB_APP_ID="ca-app-pub-12345678901234567890"
npm install @ionic-native/admob-free

app.module.ts

import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';

import { AdMobFree } from '@ionic-native/admob-free/ngx';

@NgModule({
    declarations: [AppComponent],
    entryComponents: [],
    imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
    providers: [
        StatusBar,
        SplashScreen,
        AdMobFree,
        { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
    ],
    bootstrap: [AppComponent]
})
export class AppModule { }

ads.service.ts

import { Injectable } from '@angular/core';
import { Platform } from '@ionic/angular';
import { AdMobFree, AdMobFreeBannerConfig } from '@ionic-native/admob-free/ngx';

@Injectable({
    providedIn: 'root'
})
export class AdsService {

    bannerId: 'ca-app-pub-12345678901234567890';

    constructor(
        public platform: Platform,
        private admobFree: AdMobFree
    ) { }

    showBanner() {
        this.platform
            .ready()
            .then(() => {
                const bannerConfig: AdMobFreeBannerConfig = {
                    id: this.bannerId,
                    isTesting: false,
                    autoShow: false
                };
                this.admobFree.banner.config(bannerConfig);
                this.admobFree.banner
                    .prepare()
                    .then(() => {
                        this.admobFree.banner.show();
                    })
                    .catch(e => console.log(e));
            })
            .catch(e => console.log(e));
    }
}

主页.ts

import { Component } from '@angular/core';
import { AdsService } from '../services/ads.service';

@Component({
    selector: 'app-home',
    templateUrl: 'home.page.html',
    styleUrls: ['home.page.scss'],
})
export class HomePage {

    constructor(
        public ads: AdsService
    ) {
        this.ads.showBanner();
    }

}

我究竟做错了什么?

标签: ionic-frameworkionic4

解决方案


这个SO答案是解决方案

https://stackoverflow.com/a/59276508/2101328

对于带有 Admob 插件的 Ionic App(我只在 Ioniv V3 中尝试过),您可以将其添加到平台 ios 下的 ./config.xml 中,以便在每次构建时自动填充 app-name-info.plist 文件。

<platform name="ios">
   <config-file parent="GADApplicationIdentifier" target="*-Info.plist">
      <string>ca-app-pub-12345/12345</string>
   </config-file>

   <config-file parent="GADIsAdManagerApp" target="*-Info.plist">
      <true />
   </config-file>

   ... (other lines) ...

</platform>

推荐阅读