This document outlines how you can use Android WebViews to run our products inside your app.
Only use WebViews if you are adding our games individually, and not monetising with ads. If you are adding our game centre, or any other Zop product, use Chrome Custom Tabs (CCT). Here is a guide to implementing CCT.
Follow the steps given below closely to get a perfectly working WebView implementation in your app:
Step 1: Create the WebView via code (instead of XML)
We recommend creating the WebView via your Java / Kotlin code, instead of creating it via XML so as to avoid memory leaks. You may have a particular Android Activity where you place the Gamezop icon / banner. When a user taps on that icon / banner, you want to open your game URL within a WebView. Within the onCreate method of this Activity, you will have to create the WebView as mentioned below:
val myWebView =WebView(this)setContentView(myWebView)
Create a CustomWebViewClient file within the same directory as where you have your MainActivity file. Java and Kotlin versions of this file are given below:
CustomWebViewClient.kt
import android.content.Intentimport android.content.pm.PackageManagerimport android.net.Uriimport android.webkit.WebViewimport android.webkit.WebViewClientimport android.widget.Toastimport java.net.MalformedURLExceptionimport java.net.URLclassCustomWebViewClientKotlin : WebViewClient() {val GAMEZOP_URL ="gamezop.com"val NO_APPLICATION_ERROR ="You do not have an application to run this."/** * This method helps in making the subscribers aware that * the data has change so run the required methods. * @return This fields is true it means the UI * needs to reload again and and present the * splash-screen UI. * And if its false, it means stop showing the * splash-screen UI and present the Webview. */overridefunshouldOverrideUrlLoading( view: WebView, url: String ): Boolean {super.shouldOverrideUrlLoading(view, url)var domain =""try {val fullUrl =URL(url) domain = fullUrl.host } catch (e: MalformedURLException) { e.printStackTrace() }if (domain.contains(GAMEZOP_URL)) { view.loadUrl(url) } else {loadOutsideWebView(view, url) }returntrue }privatefunloadOutsideWebView(view: WebView, url: String) {// Otherwise, the link is not for a page on the site,// so launch another intent that handles URLs.val intent =Intent(Intent.ACTION_VIEW, Uri.parse(url))val packageManager = view.context.packageManagerval activities = packageManager.queryIntentActivities( intent, PackageManager.MATCH_DEFAULT_ONLY )val isIntentSafe = activities.size >0if (isIntentSafe) { view.context.startActivity(intent) } else { Toast.makeText( view.context, NO_APPLICATION_ERROR, Toast.LENGTH_LONG ).show() } }
CustomWebViewClient.java
importandroid.content.Intent;importandroid.content.pm.PackageManager;importandroid.content.pm.ResolveInfo;importandroid.net.Uri;importandroid.webkit.WebView;importandroid.webkit.WebViewClient;importandroid.widget.Toast;importjava.net.URL;importjava.net.MalformedURLException;importjava.util.List;publicclassCustomWebViewClientextendsWebViewClient {finalString GAMEZOP_URL ="gamezop.com";finalString NO_APPLICATION_ERROR ="You do not have an application to run this.";; @OverridepublicbooleanshouldOverrideUrlLoading(WebView view,String url) { super.shouldOverrideUrlLoading(view, url);String domain ="";try {finalURL fullUrl =newURL(url); domain =fullUrl.getHost(); } catch (MalformedURLException e) {e.printStackTrace(); }if (domain.contains(GAMEZOP_URL)) {view.loadUrl(url); } else {loadOutsideWebView(view, url); }returntrue; }privatevoidloadOutsideWebView(WebView view,String url) {// Otherwise, the link is not for a page on the site,// so launch another intent that handles URLs.finalIntent intent =newIntent(Intent.ACTION_VIEW,Uri.parse(url));finalPackageManager packageManager =view.getContext().getPackageManager();finalList<ResolveInfo> activities =packageManager.queryIntentActivities(intent,PackageManager.MATCH_DEFAULT_ONLY);finalboolean isIntentSafe =activities.size() >0;if (isIntentSafe) {view.getContext().startActivity(intent); } else {Toast.makeText(view.getContext(), NO_APPLICATION_ERROR,Toast.LENGTH_LONG).show(); } }}
Step 4: Set this CustomWebViewClient as your WebView client
To do so, just add the following line in the Activity where your created your WebView:
Step 5: Configure WebView settings in the holder Activity
Add the following lines in the Activity where your created your WebView:
myWebView.isSoundEffectsEnabled =truemyWebView.settings.javaScriptEnabled =truemyWebView.settings.javaScriptCanOpenWindowsAutomatically =truemyWebView.settings.setGeolocationEnabled(true)myWebView.settings.databaseEnabled =truemyWebView.settings.loadsImagesAutomatically =trueCookieManager.getInstance().setAcceptCookie(true)myWebView.setBackgroundColor(Color.argb(1, 0, 0, 0))// Enable database and local storage in webviewmyWebView.settings.domStorageEnabled =truemyWebView.settings.databaseEnabled =truemyWebView.settings.setRenderPriority(WebSettings.RenderPriority.HIGH)myWebView.settings.cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORKmyWebView.scrollBarStyle = View.SCROLLBARS_INSIDE_OVERLAYmyWebView.settings.layoutAlgorithm = WebSettings.LayoutAlgorithm.NARROW_COLUMNSmyWebView.settings.useWideViewPort =truemyWebView.settings.saveFormData =truemyWebView.settings.setAppCacheEnabled(true) //Open Application Cachesval cacheDirPath = filesDir.absolutePath +"/cache"myWebView.settings.setAppCachePath(cacheDirPath) //Setting up the Application Caches cache directory
myWebView.setSoundEffectsEnabled(true);myWebView.getSettings().setJavaScriptEnabled(true);myWebView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true);myWebView.getSettings().setGeolocationEnabled(true);myWebView.getSettings().setDatabaseEnabled(true);myWebView.getSettings().setLoadsImagesAutomatically(true);CookieManager.getInstance().setAcceptCookie(true);myWebView.setBackgroundColor(Color.argb(1,0,0,0));// Enable database and local storage in webviewmyWebView.getSettings().setDomStorageEnabled(true);myWebView.getSettings().setDatabaseEnabled(true);myWebView.getSettings().setRenderPriority(WebSettings.RenderPriority.HIGH);myWebView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);myWebView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);myWebView.getSettings().setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NARROW_COLUMNS);myWebView.getSettings().setUseWideViewPort(true);myWebView.getSettings().setSaveFormData(true);myWebView.getSettings().setAppCacheEnabled(true);//Open Application CachesString cacheDirPath =getFilesDir().getAbsolutePath() +"/cache";myWebView.getSettings().setAppCachePath(cacheDirPath); //Setting up the Application Caches cache directory
Step 6: Open your Gamezop game URL
Once you are done with the 5 steps mentioned above, you are ready to open your Gamezop game URL within your WebView. You can get your game URLs from the All Games API. Add this line at the end of the Activity where you created your WebView:
myWebView.loadUrl("https://3025.play.gamezop.com"); //ensure you replace this with the correct Game URL