{"_id":"@backsoul/capacitor-google-admob","_rev":"5-b9c0b4f65113fb288f05c218cc771534","name":"@backsoul/capacitor-google-admob","dist-tags":{"latest":"0.2.1"},"versions":{"0.0.1":{"name":"@backsoul/capacitor-google-admob","version":"0.0.1","keywords":["capacitor","admob","google-admob","google-mobile-ads","ionic","android","ios","banner","interstitial","rewarded","rewarded-interstitial","app-open","native-ad","native-advanced","backsoul"],"author":{"url":"https://github.com/backsoul","name":"backsoul"},"license":"MIT","_id":"@backsoul/capacitor-google-admob@0.0.1","maintainers":[{"name":"danielsarmiento","email":"danielsarmientoenterprise@gmail.com"}],"homepage":"https://github.com/backsoul/capacitor-google-admob#readme","bugs":{"url":"https://github.com/backsoul/capacitor-google-admob/issues"},"dist":{"shasum":"0eb53950d15a62e6a5d4372e7bc8330f038e633a","tarball":"https://registry.npmjs.org/@backsoul/capacitor-google-admob/-/capacitor-google-admob-0.0.1.tgz","fileCount":26,"integrity":"sha512-nwVyNWCv+kMxYpvIULApQoF0540Ny+P9dwYXnW3NjiWpPQRyHYCYTajod6P9M1W6MqG4CJIEy34RsLdKKk6jiA==","signatures":[{"sig":"MEQCIFFoBRZ9vGt2sHAK/zhwcOXlsxP07XDVZnyIVqEXGOryAiAK9p71shVeekwCHzVoU/knUWUFoZstbmh+6uAvR1XhyQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":78307},"main":"dist/esm/index.js","types":"dist/esm/index.d.ts","module":"dist/esm/index.js","engines":{"node":">=18.0.0"},"exports":{".":{"types":"./dist/esm/index.d.ts","import":"./dist/esm/index.js"},"./package.json":"./package.json"},"gitHead":"7633ea3396637da5ff6907fae9e6349d19871abc","scripts":{"build":"rimraf dist && tsc -p tsconfig.json","prepublishOnly":"npm run build"},"_npmUser":{"name":"danielsarmiento","email":"danielsarmientoenterprise@gmail.com"},"capacitor":{"ios":{"src":"ios"},"android":{"src":"android"}},"repository":{"url":"git+https://github.com/backsoul/capacitor-google-admob.git","type":"git"},"_npmVersion":"10.9.7","description":"Capacitor plugin for Google AdMob on iOS and Android: banner, interstitial, rewarded, rewarded interstitial, app open, and native advanced. Ionic Angular compatible.","directories":{},"_nodeVersion":"22.22.2","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rimraf":"^6.0.1","typescript":"~5.4.0","@capacitor/core":"^8.3.0"},"peerDependencies":{"@capacitor/core":">=6.0.0"},"_npmOperationalInternal":{"tmp":"tmp/capacitor-google-admob_0.0.1_1776290831967_0.23305566081451423","host":"s3://npm-registry-packages-npm-production"}},"0.2.1":{"name":"@backsoul/capacitor-google-admob","version":"0.2.1","description":"Capacitor plugin for Google AdMob on iOS and Android: banner, interstitial, rewarded, rewarded interstitial, app open, and native advanced. Ionic Angular compatible.","main":"dist/esm/index.js","module":"dist/esm/index.js","types":"dist/esm/index.d.ts","exports":{".":{"import":"./dist/esm/index.js","types":"./dist/esm/index.d.ts"},"./package.json":"./package.json"},"publishConfig":{"access":"public"},"scripts":{"build":"rimraf dist && tsc -p tsconfig.json","prepublishOnly":"npm run build"},"keywords":["capacitor","admob","google-admob","google-mobile-ads","ionic","android","ios","banner","interstitial","rewarded","rewarded-interstitial","app-open","native-ad","native-advanced","backsoul"],"author":{"name":"backsoul","url":"https://github.com/backsoul"},"license":"MIT","repository":{"type":"git","url":"git+https://github.com/backsoul/capacitor-google-admob.git"},"bugs":{"url":"https://github.com/backsoul/capacitor-google-admob/issues"},"homepage":"https://github.com/backsoul/capacitor-google-admob#readme","engines":{"node":">=18.0.0"},"peerDependencies":{"@capacitor/core":">=6.0.0"},"devDependencies":{"@capacitor/core":"^8.3.0","rimraf":"^6.0.1","typescript":"~5.4.0"},"capacitor":{"android":{"src":"android"},"ios":{"src":"ios"}},"_id":"@backsoul/capacitor-google-admob@0.2.1","gitHead":"3e62545bcee500f6178e462c29577e91af735dba","_nodeVersion":"22.22.2","_npmVersion":"10.9.7","dist":{"integrity":"sha512-x6sm4GYJ7hf8gquR4trkK1mOWCDsAHoqcWK6yXPfLE9bYxkpF2sZqQPVyr0XS8N1zLlsyfO1kRUzohJGp7/fRg==","shasum":"84390da960af3ad7ae35d78868bf9d26add5d788","tarball":"https://registry.npmjs.org/@backsoul/capacitor-google-admob/-/capacitor-google-admob-0.2.1.tgz","fileCount":26,"unpackedSize":79255,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQCZbiUlJpM5qa7A7hwDoV4v3jLGG5ysTPxQoRrMeq6+VwIgaY2sJvfyvuKitJIAxoQ8o22DStUtngeRAKL0expArdo="}]},"_npmUser":{"name":"danielsarmiento","email":"danielsarmientoenterprise@gmail.com"},"directories":{},"maintainers":[{"name":"danielsarmiento","email":"danielsarmientoenterprise@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/capacitor-google-admob_0.2.1_1776300190397_0.5872471629251128"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-15T22:07:11.829Z","modified":"2026-04-16T00:43:10.692Z","0.1.0":"2026-04-15T04:40:33.782Z","0.2.0":"2026-04-15T04:54:06.204Z","0.0.1":"2026-04-15T22:07:12.138Z","0.2.1":"2026-04-16T00:43:10.552Z"},"bugs":{"url":"https://github.com/backsoul/capacitor-google-admob/issues"},"author":{"name":"backsoul","url":"https://github.com/backsoul"},"license":"MIT","homepage":"https://github.com/backsoul/capacitor-google-admob#readme","keywords":["capacitor","admob","google-admob","google-mobile-ads","ionic","android","ios","banner","interstitial","rewarded","rewarded-interstitial","app-open","native-ad","native-advanced","backsoul"],"repository":{"type":"git","url":"git+https://github.com/backsoul/capacitor-google-admob.git"},"description":"Capacitor plugin for Google AdMob on iOS and Android: banner, interstitial, rewarded, rewarded interstitial, app open, and native advanced. Ionic Angular compatible.","maintainers":[{"name":"danielsarmiento","email":"danielsarmientoenterprise@gmail.com"}],"readme":"# @backsoul/capacitor-google-admob\n\nCapacitor plugin for **Google AdMob** (Google Mobile Ads SDK) on **iOS** and **Android**, with TypeScript types and stable event names for tooling and search (e.g. “Capacitor AdMob banner interstitial rewarded app open native advanced”).\n\n## Supported formats (parity with AdMob “create ad unit”)\n\n| Format | Methods | Notes |\n|--------|---------|--------|\n| **Banner** | `showBanner`, `hideBanner`, `removeBanner` | Adaptive banner + fixed sizes; anchored to safe area. |\n| **Interstitial** | `loadInterstitial`, `showInterstitial` | Full-screen; load then show. |\n| **Rewarded** | `loadRewarded`, `showRewarded` | User earns reward via listener. |\n| **Rewarded interstitial** | `loadRewardedInterstitial`, `showRewardedInterstitial` | Beta in some consoles; same load/show pattern. |\n| **App open** | `loadAppOpen`, `showAppOpen` | For production, follow Google’s cold/hot start guidance. |\n| **Native Advanced** | `showNativeAdvanced`, `hideNativeAdvanced` | `NativeAdView` / `GADNativeAdView` overlay; `nativeAdvancedHeightChanged` for WebView padding. |\n\n## Install\n\n```bash\nnpm install @backsoul/capacitor-google-admob\nnpx cap sync\n```\n\n### iOS\n\n- `Info.plist`: `GADApplicationIdentifier` = your AdMob app ID (`ca-app-pub-xxxxxxxx~yyyyyyyy`).\n- CocoaPods: add to `Podfile` inside `capacitor_pods` (adjust path to `node_modules`):\n\n```ruby\npod 'BacksoulCapacitorGoogleAdmob', :path => '../../node_modules/@backsoul/capacitor-google-admob'\n```\n\nThen `pod install`.\n\n### Android\n\n- `AndroidManifest` / `strings.xml`: `com.google.android.gms.ads.APPLICATION_ID` with the same app ID.\n- `npx cap sync android` links the Gradle module automatically.\n\n---\n\n## Uso por tipo de anuncio\n\nImportación común:\n\n```typescript\nimport {\n  BacksoulGoogleAdmob,\n  BACKSOUL_ADMOB_EVENTS,\n} from '@backsoul/capacitor-google-admob';\nimport { Capacitor } from '@capacitor/core';\n```\n\nLas **unidades de prueba oficiales** de Google (solo desarrollo) están documentadas en [Ads / pruebas](https://developers.google.com/admob/android/test-ads). Sustituye por tus IDs reales de AdMob en producción.\n\n### 1. Inicialización (una vez al arrancar la app)\n\n```typescript\nasync function setupAds() {\n  if (!Capacitor.isNativePlatform()) return;\n\n  await BacksoulGoogleAdmob.initialize({\n    // Opcional: IDs de dispositivo de prueba (logcat / Xcode muestran el hash)\n    testDeviceIds: ['YOUR_HASHED_DEVICE_ID'],\n  });\n}\n```\n\n---\n\n### 2. Banner (rectangular, parte del layout nativo)\n\nOcupa una franja en la ventana (no dentro del HTML del WebView). Suele ir arriba o abajo; `margin` ayuda a no tapar tabs o el notch.\n\n```typescript\n// Mostrar banner adaptativo abajo, con margen sobre la barra inferior\nawait BacksoulGoogleAdmob.showBanner({\n  adUnitId: 'ca-app-pub-3940256099942544/6300978111', // ejemplo test banner\n  adSize: 'ADAPTIVE_BANNER',\n  position: 'BOTTOM_CENTER',\n  margin: 92,\n  isTesting: true,\n});\n\n// Escuchar tamaño para reservar padding en ion-content / scroll\nconst hBanner = await BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.BANNER_SIZE_CHANGED,\n  (p) => {\n    const height = Number(p.height ?? 0);\n    document.documentElement.style.setProperty('--ad-banner-padding', `${height}px`);\n  }\n);\n\n// Ocultar sin destruir (sigue cargado)\nawait BacksoulGoogleAdmob.hideBanner();\n\n// Quitar del todo y liberar\nawait BacksoulGoogleAdmob.removeBanner();\nawait hBanner.remove();\n```\n\n**Posiciones:** `TOP_CENTER` | `CENTER` | `BOTTOM_CENTER`.  \n**Tamaños:** `ADAPTIVE_BANNER` (recomendado), `BANNER`, `LARGE_BANNER`, `MEDIUM_RECTANGLE`, `FULL_BANNER`, `LEADERBOARD`, `SMART_BANNER`.\n\n---\n\n### 3. Intersticial (pantalla completa entre pantallas)\n\nFlujo típico: **precargar** en un punto tranquilo y **mostrar** al cambiar de nivel / cerrar pantalla (no en medio de interacción crítica).\n\n```typescript\nasync function preloadInterstitial() {\n  await BacksoulGoogleAdmob.loadInterstitial({\n    adUnitId: 'ca-app-pub-3940256099942544/1033173712', // test interstitial\n    isTesting: true,\n  });\n}\n\nawait BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.INTERSTITIAL_LOADED,\n  () => console.log('Interstitial listo')\n);\nawait BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.INTERSTITIAL_FAILED_TO_LOAD,\n  (e) => console.warn('Fallo carga', e)\n);\nawait BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.INTERSTITIAL_DISMISSED,\n  () => {\n    // Usuario cerró el anuncio: navegar o precargar otro\n    void preloadInterstitial();\n  }\n);\n\n// Cuando quieras mostrar (p. ej. tras `router.navigate`)\nawait BacksoulGoogleAdmob.showInterstitial();\n```\n\n---\n\n### 4. Bonificado / Rewarded (el usuario mira el vídeo a cambio de recompensa)\n\nPrecarga, muestra y escucha la recompensa en `rewardedEarned`.\n\n```typescript\nawait BacksoulGoogleAdmob.loadRewarded({\n  adUnitId: 'ca-app-pub-3940256099942544/5224354917', // test rewarded\n  isTesting: true,\n});\n\nawait BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.REWARDED_EARNED,\n  (payload) => {\n    const type = String(payload.type ?? '');\n    const amount = Number(payload.amount ?? 0);\n    // Entregar monedas / vidas / premium temporal\n    console.log('Recompensa:', type, amount);\n  }\n);\nawait BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.REWARDED_DISMISSED,\n  () => console.log('Cerrado')\n);\n\nawait BacksoulGoogleAdmob.showRewarded();\n```\n\n---\n\n### 5. Intersticial bonificado / Rewarded interstitial (beta en consola)\n\nMisma idea que rewarded, con otra unidad en AdMob.\n\n```typescript\nawait BacksoulGoogleAdmob.loadRewardedInterstitial({\n  adUnitId: 'ca-app-pub-3940256099942544/5354046379', // test rewarded interstitial\n  isTesting: true,\n});\n\nawait BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.REWARDED_INTERSTITIAL_EARNED,\n  (payload) => {\n    console.log('RI reward', payload.type, payload.amount);\n  }\n);\n\nawait BacksoulGoogleAdmob.showRewardedInterstitial();\n```\n\n---\n\n### 6. App open (al abrir la app o volver del background)\n\nPatrón recomendado por Google: cargar con `loadAppOpen` y mostrar con `showAppOpen` cuando la app pase a primer plano y no haya otra pantalla de anuncio. Aquí solo el flujo mínimo del plugin:\n\n```typescript\nawait BacksoulGoogleAdmob.loadAppOpen({\n  adUnitId: 'ca-app-pub-3940256099942544/5662855259', // test app open\n  isTesting: true,\n});\n\nawait BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.APP_OPEN_DISMISSED,\n  () => console.log('App open cerrado')\n);\n\n// Llamar cuando tu lógica de “cold start / resume” lo permita\nawait BacksoulGoogleAdmob.showAppOpen();\n```\n\nConsulta la guía oficial de **App open ads** para límites de frecuencia y estados de la actividad (Android/iOS).\n\n---\n\n### 7. Nativo avanzado / Native Advanced (plantilla nativa)\n\nRenderiza un bloque nativo (`NativeAdView`) encima del WebView, útil para feeds o home. `marginBottom` separa el anuncio de la barra de tabs / home indicator.\n\n```typescript\nlet hNative: { remove: () => Promise<void> } | undefined;\n\nhNative = await BacksoulGoogleAdmob.addListener(\n  BACKSOUL_ADMOB_EVENTS.NATIVE_ADVANCED_HEIGHT_CHANGED,\n  (p) => {\n    const px = Number(p.heightPx ?? 0);\n    document.documentElement.style.setProperty('--native-ad-padding', `${px}px`);\n  }\n);\n\nawait BacksoulGoogleAdmob.showNativeAdvanced({\n  // Test: Android 2247696110 · iOS 3986624511 (ver documentación Google “test ads”)\n  adUnitId: 'ca-app-pub-3940256099942544/2247696110',\n  marginBottom: 92,\n});\n\n// Al salir de la pantalla\nawait BacksoulGoogleAdmob.hideNativeAdvanced();\nawait hNative?.remove();\n```\n\nEn plantilla Ionic, enlaza el padding al scroll, por ejemplo:  \n`[style.--padding-bottom.px]=\"nativeAdPadding\"` y usa la variable CSS que actualizas arriba.\n\n---\n\n## Referencia rápida de eventos (`BACKSOUL_ADMOB_EVENTS`)\n\n| Constante | Evento emitido |\n|-----------|----------------|\n| `BANNER_SIZE_CHANGED` | Tamaño del banner (`width`, `height`). |\n| `INTERSTITIAL_LOADED` / `INTERSTITIAL_FAILED_TO_LOAD` / `INTERSTITIAL_DISMISSED` | Ciclo de vida del intersticial. |\n| `REWARDED_*` | Carga, fallo, recompensa (`type`, `amount`), cierre. |\n| `REWARDED_INTERSTITIAL_*` | Igual para intersticial bonificado. |\n| `APP_OPEN_LOADED` / `APP_OPEN_FAILED_TO_LOAD` / `APP_OPEN_DISMISSED` | App open. |\n| `NATIVE_ADVANCED_HEIGHT_CHANGED` | `heightPx` para reservar espacio en el WebView. |\n\n---\n\n## Ejemplo mínimo anterior (solo banner)\n\n```typescript\nawait BacksoulGoogleAdmob.initialize({ testDeviceIds: ['DEVICE_HASH_ID'] });\n\nawait BacksoulGoogleAdmob.showBanner({\n  adUnitId: 'ca-app-pub-xxx/yyy',\n  position: 'BOTTOM_CENTER',\n  margin: 92,\n  adSize: 'ADAPTIVE_BANNER',\n});\n\nBacksoulGoogleAdmob.addListener(BACKSOUL_ADMOB_EVENTS.BANNER_SIZE_CHANGED, (p) => {\n  console.log(p.width, p.height);\n});\n```\n\n## Repository\n\nhttps://github.com/backsoul/capacitor-google-admob\n\n## Publicar en npm (mantenedores)\n\n1. Inicia sesión: `npm login` (cuenta con permiso en la org `@backsoul`).\n2. Desde la raíz del paquete: `npm run build` (o deja que `prepublishOnly` compile al publicar).\n3. Comprueba el tarball: `npm pack --dry-run`.\n4. Sube la versión: `npm version patch|minor|major` (opcional, actualiza `package.json` y crea tag git).\n5. Publica: `npm publish`  \n   El campo `publishConfig.access` ya está en `public` para el scope `@backsoul`.\n\nTras publicar, en tu app: `npm install @backsoul/capacitor-google-admob@latest` y `npx cap sync`.\n\n## License\n\nMIT\n","readmeFilename":"README.md"}