- Home /
 
Success! I have successfully integrated a Unity interstitial ad in Python Kivy, but it crashes after 10 displays, any hints on how to improve stability?
As I'm planning to use Unity ads for a long time, I thought I might create a module called KivUnity (in the long run). Here is my Python code( I think its rather clumsy atm):
 import re
 import sys
 import os 
 
 from jnius import autoclass, PythonJavaClass, java_method, cast
 from kivy.app import App
 import logging
 
 testmode = True
 
 PythonActivity = autoclass("org.kivy.android.PythonActivity")
 Unity_ads_listener = autoclass("com.unity3d.ads.IUnityAdsListener")
 Unity_ads = autoclass("com.unity3d.ads.UnityAds")
 
  
 
 class Unity_handler:
 
    def __init__(self, a_id):
      self.app_id = a_id
    
    def init_unity(self):
      
      new_ad_listener = UnityAdsListener()
      Unity_ads.addListener(new_ad_listener)
      self.c_activity = cast('android.app.Activity',PythonActivity.mActivity)
      Unity_ads.initialize(self.c_activity,self.app_id,testmode)
 
    def show_ad(self, id_num):
    
      #show interstial ads
      self.inter_id = id_num
      if Unity_ads.isReady(self.inter_id):
           try:
             Unity_ads.show(self.c_activity, self.inter_id)
           except:
             fail=1 
 
 
 class UnityAdsListener(PythonJavaClass):
     __javacontext__= 'app'
     __javainterfaces__= ['com/unity3d/ads/IUnityAdsListener']  
 
     #def __init__(self):
     #            super(IUnityAdsListener, self).__init__()
     #            #self.callback = callback
 
 
     @java_method('(Ljava/lang/String;)V')
     def onUnityAdsReady(inter_id):
        pass        
 
     @java_method('(Ljava/lang/String;)V')   
     def onUnityAdsStart(inter_id):
        pass
 
     @java_method('(Ljava/lang/String;Ljava/lang/String;)V')
     def onUnityAdsFinish(inter_id,un_f):
        pass
 
     @java_method('(Lcom/unity3d/ads/UnityAds$UnityAdsError;Ljava/lang/String;)V')
     def onUnityAdsError(self,error, message):
        pass
 
               ADB error: 09-05 16:51:40.760 12274 12290 E : 0 09-05 16:51:40.761 12274 12290 E : appName=com.oracle.oracle, acAppName=vStudio.Android.Camera360 09-05 16:51:40.761 12274 12290 E : 0 09-05 16:51:40.764 12274 12290 E : appName=com.oracle.oracle, acAppName=vStudio.Android.Camera360 09-05 16:51:40.764 12274 12290 E : 0 09-05 16:51:40.775 260 454 D AudioFlinger_Threads: 0xa8603180:threadLoop_write write muted data to hw, mixerStatus 1 start 09-05 16:51:40.778 12274 12274 I python : Traceback (most recent call last): 09-05 16:51:40.780 789 840 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.780 12274 12274 I python : File "jnius/jnius_proxy.pxi", line 156, in jnius.jnius.invoke0 09-05 16:51:40.781 789 840 D WindowManager: notifyActivityDrawnForKeyguard: waiting=false Callers=com.android.server.wm.WindowSurfacePlacer.handleAppTransitionReadyLocked:1227 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementInner:337 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacementLoop:235 com.android.server.wm.WindowSurfacePlacer.performSurfacePlacement:183 com.android.server.wm.WindowManagerService$H.handleMessage:8417 09-05 16:51:40.781 12274 12274 I python : File "jnius/jnius_proxy.pxi", line 124, in jnius.jnius.py_invoke0 09-05 16:51:40.781 789 840 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.782 12274 12274 I python : AttributeError: 'kivy.core.text.text_layout.LayoutWord' object has no attribute 'invoke' 09-05 16:51:40.783 12274 12274 D AndroidRuntime: Shutting down VM 09-05 16:51:40.786 789 840 I ActivityManager: Displayed com.oracle.oracle/com.unity3d.services.ads.adunit.AdUnitActivity: +166ms 09-05 16:51:40.787 789 882 I libPerfService: 1: set: 3 09-05 16:51:40.787 789 882 I libPerfService: 1: set freq: 819000 09-05 16:51:40.792 12274 12274 E AndroidRuntime: FATAL EXCEPTION: main 09-05 16:51:40.792 12274 12274 E AndroidRuntime: Process: com.oracle.oracle, PID: 12274 09-05 16:51:40.792 12274 12274 E AndroidRuntime: java.lang.NullPointerException: Expected to unbox a 'int' primitive type but was returned null 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at $Proxy0.hashCode(Unknown Source) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at sun.misc.Hashing.singleWordWangJenkinsHash(Hashing.java:48) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.HashMap.put(HashMap.java:423) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.HashSet.add(HashSet.java:217) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.AbstractCollection.addAll(AbstractCollection.java:342) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.util.LinkedHashSet.(LinkedHashSet.java:169) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.unity3d.ads.properties.AdsProperties.getListeners(AdsProperties.java:47) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.unity3d.services.ads.api.Listener$5.run(Listener.java:76) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:836) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:103) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.os.Looper.loop(Looper.java:203) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6251) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) 09-05 16:51:40.792 12274 12274 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) 09-05 16:51:40.796 789 976 W ActivityManager: Force finishing activity com.oracle.oracle/com.unity3d.services.ads.adunit.AdUnitActivity 09-05 16:51:40.797 789 976 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.800 789 976 V WindowManager: Set focused app to: AppWindowToken{2a7bc85 token=Token{135ceef ActivityRecord{85eafce u0 com.oracle.oracle/org.kivy.android.PythonActivity t8835}}} old focus=AppWindowToken{948716 token=Token{1f82431 ActivityRecord{1ffe8d8 u0 com.oracle.oracle/com.unity3d.services.ads.adunit.AdUnitActivity t8835}}} moveFocusNow=true 09-05 16:51:40.800 789 976 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.801 789 976 W ActivityManager: Force finishing activity com.oracle.oracle/org.kivy.android.PythonActivity 09-05 16:51:40.801 789 882 I libPerfService: 1: set freq: 1300000 09-05 16:51:40.801 789 882 I libPerfService: 1: set: 4 09-05 16:51:40.803 789 976 V WindowManager: Looking for focus: 8 = Window{deb1e08 u0 StatusBar}, flags=-2122055608, canReceive=false 09-05 16:51:40.803 789 976 V WindowManager: findFocusedWindow: No focusable windows. 09-05 16:51:40.803 789 12572 D AES : onEndOfErrorDumpThread: data_app_crash Process: com.oracle.oracle 09-05 16:51:40.803 789 12572 D AES : Flags: 0x3888be46 09-05 16:51:40.803 789 12572 D AES : Package: com.oracle.oracle v7214 (0.4) 09-05 16:51:40.803 789 12572 D AES : Foreground: Yes 09-05 16:51:40.803 789 12572 D AES : Build: OUKITEL/U22/U22:7.0/NRD90M/1508468660:user/release-keys 09-05 16:51:40.803 789 12572 D AES : 09-05 16:51:40.803 789 12572 D AES : java.lang.NullPointerException: Expected to unbox a 'int' primitive type but was returned null 09-05 16:51:40.803 789 12572 D AES : at $Proxy0.hashCode(Unknown Source) 09-05 16:51:40.803 789 12572 D AES : at sun.misc.Hashing.singleWordWangJenkinsHash(Hashing.java:48) 09-05 16:51:40.803 789 12572 D AES : at java.util.HashMap.put(HashMap.java:423) 09-05 16:51:40.803 789 12572 D AES : at java.util.HashSet.add(HashSet.java:217) 09-05 16:51:40.803 789 12572 D AES : at java.util.AbstractCollection.addAll(AbstractCollection.java:342) 09-05 16:51:40.803 789 12572 D AES : at java.util.LinkedHashSet.(LinkedHashSet.java:169) 09-05 16:51:40.803 789 12572 D AES : at com.unity3d.ads.properties.AdsProperties.getListeners(AdsProperties.java:47) 09-05 16:51:40.803 789 12572 D AES : at com.unity3d.services.ads.api.Listener$5.run(Listener.java:76) 09-05 16:51:40.803 789 12572 D AES : at android.os.Handler.handleCallback(Handler.java:836) 09-05 16:51:40.803 789 12572 D AES : at android.os.Handler.dispatchMessage(Handler.java:103) 09-05 16:51:40.803 789 12572 D AES : at android.os.Looper.loop(Looper.java:203) 09-05 16:51:40.803 789 12572 D AES : at android.app.ActivityThread.main(ActivityThread.java:6251) 09-05 16:51:40.803 789 12572 D AES : at java.lang.reflect.Method.invoke(Native Method) 09-05 16:51:40.803 789 12572 D AES : at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1063) 09-05 16:51:40.803 789 12572 D AES : at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:924) 09-05 16:51:40.803 789 12572 D AES : 12274
Your answer
 
             Follow this Question
Related Questions
Java - Android - Accessing the /data/data folder 0 Answers
Unity ads successfully integrated in Python Kivy app, but crashes after 10 displays, help needed. 0 Answers
[Unity 5 / Android] How to set Non-fullscreen by Default? 1 Answer
Accessing Data from a Android java class 1 Answer
Issue installing apk using old Cert 1 Answer