cordova-plugin-appodeal-framework
Version:
Appodeal's supply-side platform is designed and built by veteran publishers, for publishers. Appodeal is not an ad network, it is a new approach to monetizing for publishers.
432 lines (315 loc) • 13.9 kB
Markdown
This is an unofficial Appodeal Cordova plugin, created to integrate Appodeal SDK with Apache Cordova.
+ Update [appodeal.gradle](/src/android/appodeal.gradle) with desired changes/version.
+ Check [AppodealPlugin.java](/src/android/AppodealPlugin.java) for any API changes.
+ Done, you can use updated plugin for Android Platform.
//TODO
+ Download new Appodeal iOS SDK [here](https://www.appodeal.com/sdk/documentation?framework=20&full=1&platform=4) and unzip it somewhere.
+ Remove [Adapters](/libs/iOS/Adapters/) folder and [Appodeal.bundle](/libs/iOS/Appodeal/). Replace old `Appodeal.framework` with new one and put `Resources` folder if exists into [libs/iOS/Appodeal](/libs/iOS/Appodeal).
+ Open [plugin.xml](/plugin.xml), scroll down to `<platform name="ios">` and check system frameworks for any changes due to changes in 3 Step of 5.3 Manual Integration in [Appodeal iOS Doc page](https://www.appodeal.com/sdk/documentation?framework=20&full=1&platform=4).
+ Remove all the content after `<framework custom="true" src="libs/iOS/Appodeal/Appodeal.framework"/>` in [plugin.xml](/plugin.xml) up to `</platform>` close tag.
+ Skip this step if unzipped iOS SDK does not contain `Resources` folder. Add all resources from `Resources` folder of unzipped iOS SDK manually after `<framework custom="true" src="libs/iOS/Appodeal/Appodeal.framework"/>`, for example:
```xml
<resource-file src="libs/iOS/Appodeal/Resources/MPCloseBtn.png"/>
```
+ Check [AppodealPlugin.m](/scr/ios/AppodealPlugin.m) for any API changes.
+ Done, you can use updated plugin for iOS Platform.
Simply go to the project folder over console/terminal and run there following command:
cordova plugin add https://github.com/GartorwareCorp/appodeal-cordova-plugin-framework.git --variable ADMOB_APP_ID="<YOUR_ANDROID_ADMOB_APP_ID_AS_FOUND_IN_ADMOB>"
Also, *if targeting Android >= 28*, create a `resources/android/xml/network_security_config.xml` file with this content:
```
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" />
<certificates src="user" />
</trust-anchors>
</base-config>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">127.0.0.1</domain>
</domain-config>
</network-security-config>
```
And edit your config.xml to include this file in your build:
```
<edit-config file="app/src/main/AndroidManifest.xml" mode="merge" target="/manifest/application" xmlns:android="http://schemas.android.com/apk/res/android">
<application android:networkSecurityConfig="@xml/network_security_config" />
</edit-config>
<resource-file src="resources/android/xml/network_security_config.xml" target="app/src/main/res/xml/network_security_config.xml" />
```
If you have issues while installing plugin, follow the Command-line Interface Guide.
Minimum OS requirements:
+ iOS 8.1
+ Android API level 14 (Android OS 4.0)
If receiving errors while compiling about method number limites (>65K), please, enable Multidex:
**For Android X**
```
cordova plugin add https://github.com/GartorwareCorp/cordova-plugin-androidx-multidex.git
```
### Proguard
Proguard rules should be auto included, so no changes needed.
## Cordova Integration
### Ad Types
+ Appodeal.INTERSTITIAL
+ Appodeal.BANNER_TOP
+ Appodeal.BANNER_BOTTOM
+ Appodeal.REWARDED_VIDEO
Ad types can be combined using "|" operator. For example Appodeal.INTERSTITIAL | Appodeal.REWARDED_VIDEO.
### SDK Initialization
To initialize SDK for INTERSTITIAL ad type, call the following code:
```javascript
var appKey = "e7e04e54ae0a8d28cff2f7e7e7d094e78b2a09743be2cc4a";
Appodeal.disableLocationPermissionCheck();
Appodeal.initialize(appKey, Appodeal.INTERSTITIAL, consent);
```
+ To initialize only interstitials use `Appodeal.initialize(appKey, Appodeal.INTERSTITIAL)`
+ To initialize only rewarded video use `Appodeal.initialize(appKey, Appodeal.REWARDED_VIDEO)`
+ To initialize only non-skippable video use `Appodeal.initialize(appKey, Appodeal.NON_SKIPPABLE_VIDEO)`
+ To initialize interstitials and non-skippable videos use `Appodeal.initialize(appKey, Appodeal.INTERSTITIAL | Appodeal.NON_SKIPPABLE_VIDEO)`
+ To initialize only banners use `Appodeal.initialize(appKey, Appodeal.BANNER)`
To display ad you need to call the following code:
```javascript
Appodeal.show(adTypes);
```
+ To display interstitial use `Appodeal.show(Appodeal.INTERSTITIAL)`
+ To display rewarded video use `Appodeal.show(Appodeal.REWARDED_VIDEO)`
+ To display non-skippable video use `Appodeal.show(Appodeal.NON_SKIPPABLE_VIDEO)`
+ To display interstitial or non-skippable video use `Appodeal.show(Appodeal.INTERSTITIAL | Appodeal.NON_SKIPPABLE_VIDEO)`
+ To display banner at the bottom of the screen use `Appodeal.show(Appodeal.BANNER_BOTTOM)`
+ To display banner at the top of the screen use `Appodeal.show(Appodeal.BANNER_TOP)`
Also it can be used in this way, to get boolean value if ad was successfully shown:
```javascript
Appodeal.show(adTypes, function(result) {
// result is a boolean value, that is indicates whether show call was passed to appropriate SDK
});
```
To check if ad type was loaded, use following code:
```javascript
Appodeal.isLoaded(adTypes, function(result){
// result returns bool value
});
```
To hide banner you need to call the following code:
```javascript
Appodeal.hide(Appodeal.BANNER);
```
Callbacks can be setted with following code:
```javascript
Appodeal.setInterstitialCallbacks( function(result) {
console.log(result);
});
Appodeal.setBannerCallbacks( function(result) {
console.log(result);
});
Appodeal.setRewardedVideoCallbacks( function(result) {
console.log(result);
});
Appodeal.setNonSkippableVideoCallbacks( function(result) {
console.log(result);
});
```
result.event can be one of the following:
```
onInit
onLoaded
onFailedToLoad
onClick
onShown
onClosed
onFinished
onExpired
onShowFailed
```
To set Interstitial callbacks, use following code:
```javascript
Appodeal.setInterstitialCallbacks( function(container) {
if (container.event == 'onLoaded') {
console.log("Appodeal. Interstitial. " + container.event + ", isPrecache: " + container.isPrecache );
// your code
} else if (container.event == 'onFailedToLoad') {
// your code
} else if (container.event == 'onShown') {
// your code
} else if (container.event == 'onClick') {
// your code
} else if (container.event == 'onClosed') {
// your code
}
});
```
To set Banner callbacks, use following code:
```javascript
Appodeal.setBannerCallbacks( function(container) {
if (container.event == 'onLoaded') {
console.log("Appodeal. Banner. " + container.event + ", height: " + container.height + ", isPrecache: " + container.isPrecache);
// your code
} else if (container.event == 'onFailedToLoad') {
// your code
} else if (container.event == 'onShown') {
// your code
} else if (container.event == 'onClick') {
// your code
}
});
```
To set Rewarded Video callbacks, use following code:
```javascript
Appodeal.setRewardedVideoCallbacks( function(container) {
if (container.event == 'onLoaded') {
// your code
} else if (container.event == 'onFailedToLoad') {
// your code
} else if (container.event == 'onShown') {
// your code
} else if (container.event == 'onFinished') {
// container also returns "name" and "amount" variables with reward amount and currency name you have set for your application
console.log( "Appodeal. Rewarded. " + container.event + ", amount: " + container.amount + ", name: " + container.name);
// your code
} else if (container.event == 'onClosed') {
// container also returns "finished" variable with boolean value for indicating if video was finished
console.log("Appodeal. Rewarded. " + container.event + ", finished: " + container.finished);
// your code
}
});
```
To set Non Skippable Video callbacks, use following code:
```javascript
Appodeal.setNonSkippableVideoCallbacks( function(container) {
if (container.event == 'onLoaded') {
// your code
} else if (container.event == 'onFailedToLoad') {
// your code
} else if (container.event == 'onShown') {
// your code
} else if (container.event == 'onFinished') {
// your code
} else if (container.event == 'onClosed') {
// container also returns "finished" variable with boolean value for indicating if video was finished
console.log("Appodeal. Non Skippable Video. " + container.event + ", finished: " + container.finished);
// your code
}
});
```
To get placement reward data before video is shown use:
```javascript
Appodeal.getRewardParameters( function(result) {
console.log("Appodeal Reward Amount:" + result.amount);
console.log("Appodeal Reward Currency:" + result.currency);
});
```
To enable 728*90 banner use the following method:
```javascript
Appodeal.set728x90Banners(true);
```
To disable banner refresh animation use:
```javascript
Appodeal.setBannerAnimation(false);
```
```javascript
Appodeal.setSmartBanners(false);
```
```javascript
Appodeal.setTesting(true);
```
In test mode test ads will be shown and debug data will be written to log.
```javascript
Appodeal.setLogLevel(Appodeal.LogLevel.debug);
```
Available parameters: Appodeal.LogLevel.none, Appodeal.LogLevel.debug, Appodeal.LogLevel.verbose.
```javascript
Appodeal.isPrecache(adTypes, function(result){
// result is a boolean value, that equals true if ad is precache
})
```
Currently supported only for interstitials and banners
To check if loaded interstitial is precache: use `Appodeal.isPrecache(Appodeal.INTERSTITIAL);`
To check if loaded banner is precache: use `Appodeal.isPrecache(Appodeal.BANNER);`
```javascript
Appodeal.cache(adTypes);
```
+ You should disable automatic caching before SDK initialization using `setAutoCache(adTypes, false)`.
+ To cache interstitial use `Appodeal.cache(Appodeal.INTERSTITIAL)`
+ To cache rewarded video use `Appodeal.cache(Appodeal.REWARDED_VIDEO)`
+ To cache interstitial and non-skippable video use `Appodeal.cache(Appodeal.INTERSTITIAL | Appodeal.NON_SKIPPABLE_VIDEO)`
+ To cache banner use `Appodeal.cache(Appodeal.BANNER)`
```javascript
Appodeal.setAutoCache(adTypes, false);
```
+ Should be used before SDK initialization
+ To disable automatic caching for interstitials use `Appodeal.setAutoCache(Appodeal.INTERSTITIAL, false)`
+ To disable automatic caching for rewarded videos use `Appodeal.setAutoCache(Appodeal.REWARDED_VIDEO, false)`
+ To disable automatic caching for banners use `Appodeal.setAutoCache(Appodeal.BANNER, false)`
```javascript
Appodeal.setTriggerOnLoadedOnPrecache(adTypes, true);
```
+ Currently supported only for interstitials
+ `setOnLoadedTriggerBoth(Appodeal.INTERSTITIAL, false)` - onInterstitialLoaded will trigger only when normal ad was loaded (default)..
+ `setOnLoadedTriggerBoth(Appodeal.INTERSTITIAL, true)` - onInterstitialLoaded will trigger twice, both when precache and normal ad were loaded..
+ Should be used before SDK initialization
#### Disabling data collection for kids apps
```javascript
Appodeal.setChildDirectedTreatment(true);
```
```javascript
Appodeal.disableNetwork(network);
```
Available parameters: "adcolony", "admob", "amazon_ads", "applovin", "appnext", "avocarrot", "chartboost", "facebook", "flurry", "inmobi", "inner-active", "ironsource", "mailru", "mmedia", "mopub", "ogury", "openx", "pubnative", "smaato", "startapp", "tapjoy", "unity_ads", "vungle", "yandex"
Should be used before SDK initialization
To disable toast messages ACCESS_COARSE_LOCATION permission is missing, use the following method:
```javascript
Appodeal.disableLocationPermissionCheck();
```
Should be used before SDK initialization.
To disable toast messages WRITE_EXTERNAL_STORAGE permission is missing use the following method:
```javascript
Appodeal.disableWriteExternalStoragePermissionCheck();
```
Disables all ad networks that need this permission may lead to low video fillrates.
Should be used before SDK initialization.
```javascript
Appodeal.trackInAppPurchase(this, 5, "USD");
```
To show test screen for testing adapters integration call:
```javascript
Appodeal.showTestScreen();
```
```javascript
Appodeal.muteVideosIfCallsMuted(true);
```
```javascript
Appodeal.setAge(25);
```
```javascript
Appodeal.setGender(UserSettings.Gender.FEMALE);
```
Possible values: Appodeal.Gender.FEMALE, Appodeal.Gender.MALE, Appodeal.Gender.OTHER.