From 674d0aeda5b69f8e478ec56118e173399271d62b Mon Sep 17 00:00:00 2001 From: EddyVerbruggen Date: Wed, 16 May 2018 10:53:58 +0200 Subject: [PATCH] #706 AdMob on Android may fail in NativeScript 4 because frame.topmost() is undefined --- CHANGELOG.md | 9 +++++++++ src/firebase.android.ts | 11 +++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 347a263a..63de276b 100755 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ [Firebase Android SDK Changelog](https://firebase.google.com/support/release-notes/android) +## 6.0.0 (2018, May 16) + +### New +- [#699](https://github.com/EddyVerbruggen/nativescript-plugin-firebase/issues/699) Add ML Kit support + +### Fixes +- [#706](https://github.com/EddyVerbruggen/nativescript-plugin-firebase/issues/706) AdMob on Android may fail in NativeScript 4 because frame.topmost() is undefined + + ## 5.3.1 (2018, April 26) ### Fixes diff --git a/src/firebase.android.ts b/src/firebase.android.ts index 2430a603..ede372f8 100755 --- a/src/firebase.android.ts +++ b/src/firebase.android.ts @@ -641,10 +641,14 @@ firebase.admob.showBanner = arg => { android.widget.RelativeLayout.LayoutParams.MATCH_PARENT, android.widget.RelativeLayout.LayoutParams.MATCH_PARENT); - // wrapping it in a timeout makes sure that when this function is loaded from - // a Page.loaded event 'frame.topmost()' doesn't resolve to 'undefined' + // Wrapping it in a timeout makes sure that when this function is loaded from a Page.loaded event 'frame.topmost()' doesn't resolve to 'undefined'. + // Also, in NativeScript 4+ it may be undefined anyway.. so using the appModule in that case. setTimeout(() => { - frame.topmost().currentPage.android.getParent().addView(adViewLayout, relativeLayoutParamsOuter); + if (frame.topmost() !== undefined) { + frame.topmost().currentPage.android.getParent().addView(adViewLayout, relativeLayoutParamsOuter); + } else { + appModule.android.foregroundActivity.getWindow().getDecorView().addView(adViewLayout, relativeLayoutParamsOuter); + } }, 0); } catch (ex) { console.log("Error in firebase.admob.showBanner: " + ex); @@ -1670,7 +1674,6 @@ firebase.removeEventListeners = (listeners, path) => { const ref = firebase.instance.child(path); for (let i = 0; i < listeners.length; i++) { const listener = listeners[i]; - console.log("Removing listener at path " + path + ": " + listener); ref.removeEventListener(listener); } resolve();