flet-dev / flet

Flet enables developers to easily build realtime web, mobile and desktop apps in Python. No frontend experience required.
https://flet.dev
Apache License 2.0
11.51k stars 449 forks source link

Google Mobile and Web Ads integration #286

Open cagbal opened 2 years ago

cagbal commented 2 years ago

Hi Flet team,

This is an extraordinarily beautiful repo for python devs :)

I am just curious do you have any support now or future for Admob?

FeodorFitsner commented 2 years ago

Sure, we could look into that when mobile version of Flet is ready!

ObiajuluM commented 2 years ago

admob and adsense

ndonkoHenri commented 1 year ago

https://pub.dev/packages/google_mobile_ads

ndonkoHenri commented 8 months ago

give me code for add ads in flet app

This feature is not yet available, but is on the roadmap.

zcfrank1st commented 4 months ago

+1

zox47 commented 4 months ago

+1

swax10 commented 3 months ago

+1

zox47 commented 2 months ago

any update?

Muddassir-Farooq-official commented 2 months ago

@FeodorFitsner any update

zox47 commented 2 months ago

@ndonkoHenri any update

ndonkoHenri commented 2 months ago

Mobile Ads is like 90% done (PR).

Waiting on #3345 (WIP) to finalize as mentioned in https://github.com/flet-dev/flet/pull/3288#issuecomment-2257732918.

Please be patient.

alex-sirod commented 1 month ago

Very Good! I am very happy with this news. Is this remaining 10% too critical? in weeks? months? or more time?

codepython1 commented 2 weeks ago

Any update ?

AxlBmre commented 2 weeks ago

I'll say what the others won't and I mean it with all the love in the world: Hurry up, honey sticks!! We needs this, precious!

Here's some good energy to speed up the process: (∩ᄑ_ᄑ)⊃━☆゚・。

Muddassir-Farooq-official commented 1 week ago
ndonkoHenri commented 14 hours ago

Install the latest pre and try mobile ads: pip install flet --pre -U

Example

For now, only two types are present: Banner and Interstitial. More types will be coming in the future.

import flet as ft
import flet.ads as ads

def main(page: ft.Page):
    page.horizontal_alignment = ft.CrossAxisAlignment.CENTER

    id_interstitial = (
        "ca-app-pub-3940256099942544/1033173712"
        if page.platform == ft.PagePlatform.ANDROID
        else "ca-app-pub-3940256099942544/4411468910"
    )

    id_banner = (
        "ca-app-pub-3940256099942544/6300978111"
        if page.platform == ft.PagePlatform.ANDROID
        else "ca-app-pub-3940256099942544/2934735716"
    )

    def handle_interstitial_close(e):
        nonlocal iad
        print("InterstitialAd closed")
        page.overlay.remove(e.control)
        page.overlay.append(iad := get_new_interstitial_ad())
        page.update()

    def get_new_interstitial_ad():
        return ads.InterstitialAd(
            unit_id=id_interstitial,
            on_load=lambda e: print("InterstitialAd loaded"),
            on_error=lambda e: print("InterstitialAd error", e.data),
            on_open=lambda e: print("InterstitialAd opened"),
            on_close=handle_interstitial_close,
            on_impression=lambda e: print("InterstitialAd impression"),
            on_click=lambda e: print("InterstitialAd clicked"),
        )

    def display_new_banner_ad():
        page.add(
            ft.Container(
                content=ads.BannerAd(
                    unit_id=id_banner,
                    on_click=lambda e: print("BannerAd clicked"),
                    on_load=lambda e: print("BannerAd loaded"),
                    on_error=lambda e: print("BannerAd error", e.data),
                    on_open=lambda e: print("BannerAd opened"),
                    on_close=lambda e: print("BannerAd closed"),
                    on_impression=lambda e: print("BannerAd impression"),
                    on_will_dismiss=lambda e: print("BannerAd will dismiss"),
                ),
                width=320,
                height=50,
                bgcolor=ft.colors.TRANSPARENT,
            )
        )

    page.overlay.append(iad := get_new_interstitial_ad())
    page.appbar = ft.AppBar(
        adaptive=True,
        title=ft.Text("Mobile Ads Playground"),
        bgcolor=ft.colors.LIGHT_BLUE_300,
    )
    page.add(
        ft.OutlinedButton("Show InterstitialAd", on_click=lambda e: iad.show()),
        ft.OutlinedButton("Show BannerAd", on_click=lambda e: display_new_banner_ad()),
    )

ft.app(main)

I am documenting this at the moment, but for those testing it right now, Interstitial ads can only be shown once. That's why in the example above we created new ones each time.

Feel free to ask any questions.

Reopening this issue as there's still some work to do.