Kivmob - Interstitial ad not loading

谁都会走 提交于 2020-05-14 12:51:13

问题


I have been trying to add the library named kivmob to display ads in my application. Kivmob loads the banner ad but does not load the interstitial ad. I am confused as to why the banner works but not the interstitial. I have also tried with test IDs. Here is my main.py.

from kivmob import KivMob

from kivy.uix.widget import Widget
from kivy.uix.screenmanager import ScreenManager, Screen, SlideTransition

from kivy.properties import NumericProperty, ReferenceListProperty, ObjectProperty
from kivy.vector import Vector
from kivy.clock import Clock
from kivy.core.window import Window
from kivy.utils import platform

from kivymd.uix.button import MDRectangleFlatButton
from kivymd.uix.dialog import MDDialog
from kivymd.app import MDApp


class PingPongPaddle(Widget):

    score = NumericProperty(0)

    def bounce_ball(self, ball):
        if self.collide_widget(ball):
            vx, vy = ball.velocity
            offset = (ball.center_y - self.center_y) / (self.height / 2)
            bounced = Vector(-1 * vx, vy)
            vel = bounced * 1.05
            ball.velocity = vel.x, vel.y + offset
class PingPongBall(Widget):
    #Velocity on x and y axis
    velocity_x = NumericProperty(0)
    velocity_y = NumericProperty(0)

    #So ball.velocity can be used
    velocity = ReferenceListProperty(velocity_x, velocity_y)

    #Moves the ball one step
    def move(self):
        self.pos = Vector(*self.velocity) + self.pos

class PingPongGame(Widget):
    ball = ObjectProperty(None)
    player1 = ObjectProperty(None)
    player2 = ObjectProperty(None)

    def play(self):
        game = PingPongGame()
        game.serve_ball()
        #Runs every 60th of a second
        Clock.schedule_interval(game.update, 1.0/60.0)
        self.add_widget(game)

    def serve_ball(self, vel=(7, 0)):
        self.ball.center = self.center
        self.ball.velocity = vel
    def update(self, dt):
        self.ball.move()
        #Bounce off the paddles
        self.player1.bounce_ball(self.ball)
        self.player2.bounce_ball(self.ball)
        #Bounce off top and bottom
        if (self.ball.y < 0) or (self.ball.top > self.height):
            self.ball.velocity_y *= -1

        #Went off the side
        if self.ball.x < self.x:
            self.player2.score += 1
            self.serve_ball(vel=(7, 0))
        if self.ball.x > self.width:
            self.player1.score += 1
            self.serve_ball(vel=(-7, 0))

    def on_touch_move(self, touch):
        #To sense if screen is touched
        if touch.x < self.width / 3:
            self.player1.center_y = touch.y
        if touch.x > self.width - self.width / 3:
            self.player2.center_y = touch.y

class GameScreen(Screen):
    def play(self):
        game = PingPongGame()
        game.serve_ball()
        #Runs every 60th of a second
        Clock.schedule_interval(game.update, 1.0/60.0)
        self.add_widget(game)
        ads.new_banner("ca-app-pub-xxxxxxxxxxxxxxxxxxxxxxxxx", top_pos=False)
        ads.request_banner()
        ads.show_banner()

class MainScreen(Screen):
    def show_ad(self):
        ads.new_interstitial("xxxxxxxxxxxxxxxxxxxxxxxxxxx")
        ads.request_interstitial()
        ads.is_interstitial_loaded()
        ads.show_interstitial()
    def on_resume(self):
        self.ads.request_interstitial()




class PingPongApp(MDApp):
    def __init__(self, **kwargs):
        global ads
        self.title = "Ping Pong"
        if platform not in ("android", "ios"):
            Window.size = (1000, 750)
        ads = KivMob("ca-app-pub-xxxxxxxxxxxxxxxxxxxxxxxx")

        super().__init__(**kwargs)
    def build(self):
        self.theme_cls.theme_style = "Dark"

        screen_manager = ScreenManager(transition=SlideTransition())
        screen_manager.add_widget(MainScreen(name="main"))
        screen_manager.add_widget(GameScreen(name="game"))

        return screen_manager




if __name__ == "__main__":
    PingPongApp().run()

And here is my pingpong.kv.

#:kivy 1.11.1

ScreenManager:
    MainScreen:
    GameScreen:

<MainScreen>:
    FloatLayout:
        MDRectangleFlatButton:
            text: "Start!"
            on_touch_down: root.manager.current = "game"
            pos_hint: {"center_x" : 0.5, "center_y" : 0.5}
            size_hint: None, None
            size: 300, 100

<GameScreen>
    on_enter: self.play()

<PingPongBall>:
    size: 75, 75
    canvas:
        Ellipse:
            pos: self.pos
            size: self.size          

<PingPongPaddle>:
    size: 50, 300
    canvas:
        Rectangle:
            pos:self.pos
            size:self.size

<PingPongGame>:

    ball: PingPong_ball
    player1: player_left
    player2: player_right

    canvas:
        Rectangle:
            pos: self.center_x - 5, 0
            size: 20, self.height

    Label:
        font_size: 140  
        center_x: root.width / 4
        top: root.top - 50
        text: str(root.player1.score)

    Label:
        font_size: 140 
        center_x: root.width * 3 / 4
        top: root.top - 50
        text: str(root.player2.score)

    Label:
        font_size: 35
        center_x: root.width * 6/7
        top: root.top - 650
        text: "by me"

    PingPongBall:
        id: PingPong_ball
        center: self.parent.center

    PingPongPaddle:
        id: player_left
        x: root.x
        center_y: root.center_y

    PingPongPaddle:
        id: player_right
        x: root.width - self.width
        center_y: root.center_y

Thanks in advance!


回答1:


Firstly you didn't call the show_ad() of Main screen.

You were thinking that the methods in the screen classes are invoked automatically on screen invoking,But thats not true.

You have to call the functions when entering the screen.

For doing so you need to change the following:

 # This is your mainscreen class
class MainScreen(Screen):
    def show_ad(self):
        self.ads.new_interstitial("YOUR_ID_HERE")
        self.ads.request_interstitial()
        self.ads.is_interstitial_loaded()
        self.ads.show_interstitial()
    def on_resume(self):
        self.ads.request_interstitial()

    def on_pre_enter(self): 
        self.show_ad() #Functions called on screen 
                                     # invoked


来源:https://stackoverflow.com/questions/60476405/kivmob-interstitial-ad-not-loading

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!