AdMob在KIVY-Java上奖励了视频广告.安卓 [英] Admob rewarded video ads on KIVY - Java. Android

查看:86
本文介绍了AdMob在KIVY-Java上奖励了视频广告.安卓的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试在第一款游戏中显示Google admob奖励的视频,但似乎无法正常运行.到目前为止,这是我所拥有的,我不了解Java,所以这对我来说非常困难.任何帮助将不胜感激,我愿意学习.

I'm trying to display google admob rewarded videos on my first game but I can't seem to make it work. This is what I have so far, I don't know Java so this is a very difficult for me. Any help will be appreciated, I'm willing to learn.

RewardedVideoAd = autoclass('com.google.android.gms.ads.reward.RewardedVideoAd')
RewardedAds = autoclass('com.google.android.gms.ads.MobileAds')  

class AdmobAndroid(EventDispatcher):
    mRewardedVideoAd = ObjectProperty(None)
    mRewardedAds = ObjectProperty(None)

    def __init__(self,**kwargs):
        super(AdmobAndroid,self).__init__(**kwargs)

        self.mRewardedVideoAd = RewardedVideoAd(mactivity)
        self.mRewardedAds = RewardedAds(mactivity)
        self.mRewardedVideoAd = self.mRewardedAds.getRewardedVideoAdInstance()
        self.mRewardedVideoAd.setRewardedVideoAdListener()
        self.mRewardedVideoAd.setAdUnitId(settings.REWARDED_UNIT_ID)


    @run_on_ui_thread
    def request_Rewarded(self):
        if not self.mRewardedVideoAd.isLoaded():
            log('REQUESTING rewarded AD')
            adRequestBuilder = AdRequestBuilder()
            adRequest = adRequestBuilder.build()
            self.mRewardedVideoAd.loadAd(adRequest)
        else:
            log('NO NEED TO REQUEST rewarded AD,already loaded...')

    @run_on_ui_thread
    def show_Rewarded(self):
        if self.mRewardedVideoAd.isLoaded():
            self.mRewardedVideoAd.show()
            return True
        return False

这使用作为指南.

编辑*:

11-15 04:41:39.858 19683 19701 I python  :    File "/home/kivy/Desktop/pong/.buildozer/android/app/main.py", line 58, in <module>
11-15 04:41:39.860 19683 19701 I python  :    File "/home/kivy/Desktop/pong/.buildozer/android/app/admob/__init__.py", line 6, in <module>
11-15 04:41:39.862 19683 19701 I python  :    File "/home/kivy/Desktop/pong/.buildozer/android/app/admob/admob4android.py", line 30, in <module>
11-15 04:41:39.863 19683 19701 I python  :    File "/home/kivy/Desktop/pong/.buildozer/android/platform/python-for-android/build/python-install/lib/python2.7/site-packages/jnius/reflect.py", line 150, in autoclass
11-15 04:41:39.865 19683 19701 I python  :    File "jnius/jnius_export_func.pxi", line 23, in jnius.jnius.find_javaclass (jnius/jnius.c:13171)
11-15 04:41:39.867 19683 19701 I python  :  jnius.jnius.JavaException: Class not found 'com/google/android/gms/ads/reward/RewardedVideoAd'
11-15 04:41:39.951 19683 19701 I python  : Python for android ended.
11-15 04:41:39.969 19683 19701 E AndroidRuntime: FATAL EXCEPTION: Thread-1501
11-15 04:41:39.969 19683 19701 E AndroidRuntime: Process: intellign.ultimatepong:python, PID: 19683
11-15 04:41:39.969 19683 19701 E AndroidRuntime: java.lang.ClassNotFoundException: Didn't find class "com.google.android.gms.ads.reward.RewardedVideoAd" on path: DexPathList[[zip file "/data/app/intellign.ultimatepong-1/base.apk"],nativeLibraryDirectories=[/data/app/intellign.ultimatepong-1/lib/arm, /data/app/intellign.ultimatepong-1/base.apk!/lib/armeabi, /vendor/lib, /system/lib]]
11-15 04:41:39.969 19683 19701 E AndroidRuntime:        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
11-15 04:41:39.969 19683 19701 E AndroidRuntime:        at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
11-15 04:41:39.969 19683 19701 E AndroidRuntime:        at java.lang.ClassLoader.loadClass(ClassLoader.java:469)

编辑**:标语测试有效,但我需要的是仍无法正常工作的奖励广告.我main.py中的第59行也是:ad_inst = Admob()

EDIT**: The banner test works but what I need is the rewarded ads which still does not work. Also line 59 in my main.py is: ad_inst = Admob()

11-15 19:48:56.971   345  3908 D WifiService: acquireWifiLockLocked: WifiLock{NlpWifiLock type=2 binder=android.os.BinderProxy@4c670d8}
11-15 19:48:57.369 27702 27722 I Finsky  : [1841] com.google.android.finsky.l.c.a(23): Completed 0 account content syncs with 0 successful.
11-15 19:48:57.401 27702 27702 I Finsky  : [1] com.google.android.finsky.services.e.a(5): Installation state replication succeeded.
11-15 19:48:58.023  8254  8272 I python  :  Traceback (most recent call last):
11-15 19:48:58.025  8254  8272 I python  :    File "/home/kivy/Desktop/pong/.buildozer/android/app/main.py", line 59, in <module>
11-15 19:48:58.028  8254  8272 I python  :    File "/home/kivy/Desktop/pong/.buildozer/android/app/admob/admob4android.py", line 61, in __init__
11-15 19:48:58.031  8254  8272 I python  :    File "jnius/jnius_export_class.pxi", line 155, in jnius.jnius.JavaClass.__init__ (jnius/jnius.c:15030)
11-15 19:48:58.034  8254  8272 I python  :    File "jnius/jnius_export_class.pxi", line 180, in jnius.jnius.JavaClass.call_constructor (jnius/jnius.c:15322)
11-15 19:48:58.036  8254  8272 I python  :  jnius.jnius.JavaException: No constructor available
11-15 19:48:58.152  8254  8272 I python  : Python for android ended.

推荐答案

您正在考虑正确的方向,但要使其正常工作,您需要RewardedVideoAdListener.您可以使用 PythonJavaClass java方法:

You're thinking in right direction but to make it work you need RewardedVideoAdListener. You can create it using PythonJavaClass and java methods from PyJnius like that:

from jnius import PythonJavaClass, java_method

from kivy.logger import Logger

from functools import partial

class RewardedVideoAdListener(PythonJavaClass):

    __javacontext__ = 'app'
    __javainterfaces__ = ["com.google.android.gms.ads.reward.RewardedVideoAdListener"]

    __INFO = True

    @java_method('()V')
    def onRewardedVideoAdLeftApplication(self):
        if self.__INFO:
            Logger.info("AdMob: onRewardedVideoAdLeftApplication")

    @java_method('()V')
    def onRewardedVideoAdClosed(self):
        if self.__INFO:
            Logger.info("AdMob: onRewardedVideoAdClosed")

    @java_method('(I)V')
    def onRewardedVideoAdFailedToLoad(self, errorCode):
        if self.__INFO:
            Logger.info("AdMob: onRewardedVideoAdFailedToLoad, errorCode is "+str(errorCode))

    @java_method('()V')
    def onRewardedVideoAdLoaded(self):
        if self.__INFO:
            Logger.info("AdMob: onRewardedVideoAdLoaded")

    @java_method('()V')
    def onRewardedVideoAdOpened(self):
        if self.__INFO:
            Logger.info("AdMob: onRewardedVideoAdOpened")

    @java_method('(Lcom/google/android/gms/ads/reward/RewardItem;)V')
    def onRewarded(self, reward):
        if self.__INFO:
            Logger.info("AdMob: onRewarded, type is "+str(reward.getType())+", amount is "+str(reward.getAmount()))

    @java_method('()V')
    def onRewardedVideoStarted(self):
        if self.__INFO:
            Logger.info("AdMob: onRewardedVideoStarted")

当然,您可以向此方法添加一些处理程序,例如:

Of course, you can add some handlers to this methods, for example:

from kivy.clock import Clock
from functools import partial

@java_method('(Lcom/google/android/gms/ads/reward/RewardItem;)V')
def onRewarded(self, reward):
    if self.__INFO:
        Logger.info("AdMob: onRewarded, type is "+str(reward.getType())+", amount is "+str(reward.getAmount()))
    self.__rewarded = True
    Clock.schedule_once(partial(on_reward, reward.getType(), reward.getAmount()))

并且您必须在setRewardedVideoAdListener方法中使用此侦听器:

And you have to use this listener in your setRewardedVideoAdListener method:

mRewardedVideoAdListener = RewardedVideoAdListener()
mRewardedVideoAd.setRewardedVideoAdListener(mRewardedVideoAdListener)

这篇关于AdMob在KIVY-Java上奖励了视频广告.安卓的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆