AdBuddiz Android advertisements integration for Kivy apps - darkopevec/kivy GitHub Wiki
How to integrate AdBuddiz advertisements SDK with Kivy application deployed to Android device
This article will show you how to implement AdBuddiz advertisement system in your Kivy application.
1. SDK download and opening documentation
First, you need to create an account at AdBuddiz. After that step, you can download AdBuddiz SDK. Now just extract the JAR file from the downloaded SDK ZIP file and put it in the /libs directory of your Kivy project. Once you add your first application (in the AdBuddiz control panel), you can get the API key. You don't need to publish it on the Google Play store right away, just type the package name and click "Ok", then "Continue" in the error message. You will have to click "Refresh app information" once the app is published and accessible through the main website.
Next step is to open AdBuddiz documentation. It will help you understand the code.
2. Add the correct permissions and settings to your buildozer.spec file
android.permissions = INTERNET,ACCESS_WIFI_STATE,ACCESS_NETWORK_STATE
ACCESS_NETWORK_STATE and ACCESS_WIFI_STATE are optional. Without them, you might get less ads and tracking could be less accurate.
(uncomment this line)
android.add_jars = %(source.dir)s/libs/*.jar
3. Add the AdBuddiz Activity to your project's AndroidManifest.tmpl.xml file: (it should be somewhere inside python-for-android/dist/your_project_name/templates/)
<activity android:name="com.purplebrain.adbuddiz.sdk.AdBuddizActivity"
android:theme="@android:style/Theme.Translucent" />
A good place to put the code is just before the org.renpy.android.PythonActivity declaration.
4. Import pyjnius autoclass module in your main.py
from jnius import autoclass
5. Use autoclass() to access classes of your app's activity and AdBuddiz class
PythonActivity=autoclass("org.renpy.android.PythonActivity")
AdBuddiz=autoclass("com.purplebrain.adbuddiz.sdk.AdBuddiz")
6. Finally: use the accessed classes to initialise the SDK, load the Ads cache and show Interstitial Ads
You should request to cache ads as soon as your app starts with the following code:
AdBuddiz.setPublisherKey("TEST_PUBLISHER_KEY") # Replace with your real app key
AdBuddiz.setTestModeActive() # Comment this line before releasing!
AdBuddiz.cacheAds(PythonActivity.mActivity)
Before releasing the application you need to replace the test API key with your actual key and disable test mode. Keep test mode enabled while testing, as repeated installations on the same device are against their terms of use.
Whenever you want to display an ad, call showAd()
.
We recommend this call be made where there is a natural break in play like between levels for example.
AdBuddiz.showAd(PythonActivity.mActivity)
If you want to make buildozer rebuild your app, install it on your test device, run it and display only the most relevant logcat messages (debug messages with AdBuddiz and python tags, silence the rest), you can do all the steps in a single command:
$ buildozer android debug deploy run; adb logcat -s AdBuddiz:D python:D
7. Additional tips
You may notice some messages like these:
I/python (17950): [INFO ] [Android ] Must go into sleep mode, check the app
I/python (17950): [INFO ] [Android ] App doesn't support pause mode, stop.
I/python (17950): [INFO ] [Base ] Leaving application in progress...
This happens because the interstitial ad is a full activity, Android will pause your PythonActivity, and since you haven't declared the on_pause method, it will stop the app. A good idea would be to implement the following methods inside your App class (customize them as needed):
def on_pause(self):
return True
def on_resume(self):
pass
then you can expect to see this instead:
I/AdBuddiz(20844): showAd
I/python (20844): [INFO ] [Android ] Must go into sleep mode, check the app
I/python (20844): [INFO ] [Android ] App paused, now wait for resume.
I/AdBuddiz(20844): LaunchRequest : UpdateConf
I/AdBuddiz(20844): LaunchRequest : AdImpression
I/AdBuddiz(20844): Request Ok : AdImpression
I/AdBuddiz(20844): Request Ok : UpdateConf
I/python (20844): [INFO ] [Android ] Android has resumed, resume the app.
I/python (20844): [INFO ] [Android ] App resume completed.
More details available here and here.
8. Simple App with the AdBuddiz usage example
from kivy.app import App
from kivy.uix.button import Button
from jnius import autoclass
from kivy.utils import platform
if platform=="android":
PythonActivity=autoclass("org.renpy.android.PythonActivity")
AdBuddiz=autoclass("com.purplebrain.adbuddiz.sdk.AdBuddiz")
class TestAdBuddizApp(App):
def build(self):
return Button(text="Show ads", on_press=self.show_ads)
def on_start(self):
AdBuddiz.setPublisherKey("TEST_PUBLISHER_KEY") #replace the key with your app Key
AdBuddiz.setTestModeActive() #test mode will be active
AdBuddiz.cacheAds(PythonActivity.mActivity) #now we are caching the ads
def show_ads(*args):
AdBuddiz.showAd(PythonActivity.mActivity) #let's show the ad ;)
def on_pause(self): #save your app state here
return True
def on_resume(self):
pass
if __name__=="__main__":
TestAdBuddizApp().run()