Java tutorial
//Copyright (c) 2014 Sang Ki Kwon (Cranberrygame) //Email: cranberrygame@yahoo.com //Homepage: http://cranberrygame.github.io //License: MIT (http://opensource.org/licenses/MIT) package com.cranberrygame.cordova.plugin.ad.admob; import org.apache.cordova.CordovaPlugin; import org.apache.cordova.PluginResult; import org.apache.cordova.CallbackContext; import org.json.JSONArray; import org.json.JSONObject; import org.json.JSONException; import org.apache.cordova.CordovaInterface; import org.apache.cordova.CordovaWebView; import android.app.Activity; import android.util.Log; // import com.google.android.gms.ads.AdRequest; import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import com.google.android.gms.ads.InterstitialAd; import com.google.android.gms.ads.AdListener; import android.view.View; import android.view.ViewGroup; import android.widget.RelativeLayout; import android.os.Build; import android.provider.Settings; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import android.os.Handler; // import java.util.*;//Random interface Plugin { public CordovaWebView getWebView(); public CordovaInterface getCordova(); public CallbackContext getCallbackContextKeepCallback(); } interface PluginDelegate { public void _setLicenseKey(String email, String licenseKey); public void _setUp(String bannerAdUnit, String interstitialAdUnit, String rewardedVideoAdUnit, boolean isOverlap, boolean isTest); public void _preloadBannerAd(); public void _showBannerAd(String position, String size); public void _reloadBannerAd(); public void _hideBannerAd(); public void _preloadInterstitialAd(); public void _showInterstitialAd(); public void _preloadRewardedVideoAd(); public void _showRewardedVideoAd(); public void onPause(boolean multitasking); public void onResume(boolean multitasking); public void onDestroy(); } public class AdMobPlugin extends CordovaPlugin implements PluginDelegate, Plugin { protected static final String LOG_TAG = "AdMobPlugin"; protected CallbackContext callbackContextKeepCallback; // protected PluginDelegate pluginDelegate; // public String email; public String licenseKey; public boolean validLicenseKey; protected String TEST_BANNER_AD_UNIT = "ca-app-pub-8518241683236937/9800967408"; protected String TEST_INTERSTITIAL_AD_UNIT = "ca-app-pub-8518241683236937/6847501002"; protected String TEST_REWARDED_VIDEO_AD_UNIT = "ca-app-pub-4906074177432504/2933446075"; @Override public void pluginInitialize() { super.pluginInitialize(); // } //@Override //public void onCreate(Bundle savedInstanceState) {//build error // super.onCreate(savedInstanceState); // // //} //@Override //public void onStart() {//build error // super.onStart(); // // //} @Override public void onPause(boolean multitasking) { super.onPause(multitasking); pluginDelegate.onPause(multitasking); } @Override public void onResume(boolean multitasking) { super.onResume(multitasking); pluginDelegate.onResume(multitasking); } //@Override //public void onStop() {//build error // super.onStop(); // // //} @Override public void onDestroy() { super.onDestroy(); pluginDelegate.onDestroy(); } @Override public boolean execute(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { if (action.equals("setLicenseKey")) { setLicenseKey(action, args, callbackContext); return true; } else if (action.equals("setUp")) { setUp(action, args, callbackContext); return true; } else if (action.equals("preloadBannerAd")) { preloadBannerAd(action, args, callbackContext); return true; } else if (action.equals("showBannerAd")) { showBannerAd(action, args, callbackContext); return true; } else if (action.equals("reloadBannerAd")) { reloadBannerAd(action, args, callbackContext); return true; } else if (action.equals("hideBannerAd")) { hideBannerAd(action, args, callbackContext); return true; } else if (action.equals("preloadInterstitialAd")) { preloadInterstitialAd(action, args, callbackContext); return true; } else if (action.equals("showInterstitialAd")) { showInterstitialAd(action, args, callbackContext); return true; } else if (action.equals("preloadRewardedVideoAd")) { preloadRewardedVideoAd(action, args, callbackContext); return true; } else if (action.equals("showRewardedVideoAd")) { showRewardedVideoAd(action, args, callbackContext); return true; } return false; // Returning false results in a "MethodNotFound" error. } private void setLicenseKey(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { final String email = args.getString(0); final String licenseKey = args.getString(1); Log.d(LOG_TAG, String.format("%s", email)); Log.d(LOG_TAG, String.format("%s", licenseKey)); cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _setLicenseKey(email, licenseKey); } }); } private void setUp(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { //Activity activity=cordova.getActivity(); //webView //args.length() //args.getString(0) //args.getString(1) //args.getInt(0) //args.getInt(1) //args.getBoolean(0) //args.getBoolean(1) //JSONObject json = args.optJSONObject(0); //json.optString("bannerAdUnit") //json.optString("interstitialAdUnit") //JSONObject inJson = json.optJSONObject("inJson"); //final String bannerAdUnit = args.getString(0); //final String interstitialAdUnit = args.getString(1); //final boolean isOverlap = args.getBoolean(2); //final boolean isTest = args.getBoolean(3); //final String[] zoneIds = new String[args.getJSONArray(4).length()]; //for (int i = 0; i < args.getJSONArray(4).length(); i++) { // zoneIds[i] = args.getJSONArray(4).getString(i); //} //Log.d(LOG_TAG, String.format("%s", bannerAdUnit)); //Log.d(LOG_TAG, String.format("%s", interstitialAdUnit)); //Log.d(LOG_TAG, String.format("%b", isOverlap)); //Log.d(LOG_TAG, String.format("%b", isTest)); final String bannerAdUnit = args.getString(0); final String interstitialAdUnit = args.getString(1); final String rewardedVideoAdUnit = args.getString(2); final boolean isOverlap = args.getBoolean(3); final boolean isTest = args.getBoolean(4); Log.d(LOG_TAG, String.format("%s", bannerAdUnit)); Log.d(LOG_TAG, String.format("%s", interstitialAdUnit)); Log.d(LOG_TAG, String.format("%s", rewardedVideoAdUnit)); Log.d(LOG_TAG, String.format("%b", isOverlap)); Log.d(LOG_TAG, String.format("%b", isTest)); callbackContextKeepCallback = callbackContext; if (isOverlap) pluginDelegate = new AdMobOverlap(this); else pluginDelegate = new AdMobSplit(this); cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _setUp(bannerAdUnit, interstitialAdUnit, rewardedVideoAdUnit, isOverlap, isTest); } }); } private void preloadBannerAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _preloadBannerAd(); } }); } private void showBannerAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { final String position = args.getString(0); final String size = args.getString(1); Log.d(LOG_TAG, String.format("%s", position)); Log.d(LOG_TAG, String.format("%s", size)); cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _showBannerAd(position, size); } }); } private void reloadBannerAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _reloadBannerAd(); } }); } private void hideBannerAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _hideBannerAd(); } }); } private void preloadInterstitialAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _preloadInterstitialAd(); } }); } private void showInterstitialAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _showInterstitialAd(); } }); } private void preloadRewardedVideoAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _preloadRewardedVideoAd(); } }); } private void showRewardedVideoAd(String action, JSONArray args, CallbackContext callbackContext) throws JSONException { cordova.getActivity().runOnUiThread(new Runnable() { @Override public void run() { _showRewardedVideoAd(); } }); } //cranberrygame start: Plugin public CordovaWebView getWebView() { return webView; } public CordovaInterface getCordova() { return cordova; } public CallbackContext getCallbackContextKeepCallback() { return callbackContextKeepCallback; } //cranberrygame end: Plugin //cranberrygame start: AdMobPluginDelegate public void _setLicenseKey(String email, String licenseKey) { //pluginDelegate._setLicenseKey(email, licenseKey); this.email = email; this.licenseKey = licenseKey; // String str1 = Util.md5("cordova-plugin-: " + email); String str2 = Util.md5("cordova-plugin-ad-admob: " + email); String str3 = Util.md5("com.cranberrygame.cordova.plugin.: " + email); String str4 = Util.md5("com.cranberrygame.cordova.plugin.ad.admob: " + email); if (licenseKey != null && (licenseKey.equalsIgnoreCase(str1) || licenseKey.equalsIgnoreCase(str2) || licenseKey.equalsIgnoreCase(str3) || licenseKey.equalsIgnoreCase(str4))) { this.validLicenseKey = true; // String[] excludedLicenseKeys = { "xxx" }; for (int i = 0; i < excludedLicenseKeys.length; i++) { if (excludedLicenseKeys[i].equals(licenseKey)) { this.validLicenseKey = false; break; } } if (this.validLicenseKey) Log.d(LOG_TAG, String.format("%s", "valid licenseKey")); else Log.d(LOG_TAG, String.format("%s", "invalid licenseKey")); } else { Log.d(LOG_TAG, String.format("%s", "invalid licenseKey")); this.validLicenseKey = false; } //if (!this.validLicenseKey) // Util.alert(plugin.getCordova().getActivity(),"Cordova Admob: invalid email / license key. You can get free license key from https://play.google.com/store/apps/details?id=com.cranberrygame.pluginsforcordova"); } public void _setUp(String bannerAdUnit, String interstitialAdUnit, String rewardedVideoAdUnit, boolean isOverlap, boolean isTest) { if (!validLicenseKey) { if (new Random().nextInt(100) <= 1) {//0~99 bannerAdUnit = TEST_BANNER_AD_UNIT; interstitialAdUnit = TEST_INTERSTITIAL_AD_UNIT; rewardedVideoAdUnit = TEST_REWARDED_VIDEO_AD_UNIT; } } pluginDelegate._setUp(bannerAdUnit, interstitialAdUnit, rewardedVideoAdUnit, isOverlap, isTest); } public void _preloadBannerAd() { pluginDelegate._preloadBannerAd(); } public void _showBannerAd(String position, String size) { pluginDelegate._showBannerAd(position, size); } public void _reloadBannerAd() { pluginDelegate._reloadBannerAd(); } public void _hideBannerAd() { pluginDelegate._hideBannerAd(); } public void _preloadInterstitialAd() { pluginDelegate._preloadInterstitialAd(); } public void _showInterstitialAd() { pluginDelegate._showInterstitialAd(); } public void _preloadRewardedVideoAd() { pluginDelegate._preloadRewardedVideoAd(); } public void _showRewardedVideoAd() { pluginDelegate._showRewardedVideoAd(); } //cranberrygame end: AdMobPluginDelegate }