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)