Upload
vitaliy-zasadnyy
View
469
Download
1
Embed Size (px)
DESCRIPTION
Common tasks during porting web mmo games to native platforms.
Citation preview
PORTING WEB MMO GAMES TO NATIVE PLATFORMS.WORKING WITH WEBVIEW
Vitaliy ZasadnyyAndroid TechTalk, Feb 9
PREHISTORY
7 games
OUR GAMES
TASK
● provide custom layout
● show loading screen
● replace some features with native analogs
● 2 platforms
WebView APILoading Content
void loadUrl(String url)
void loadData(String data, String mimeType, String mimeType)
void postUrl(String url, byte[] postData)
void reload()
WebView APISetting the Delegate
void setWebViewClient(WebViewClient client)
void setWebChromeClient(WebChromeClient client)
WebViewClient APILoading Content Callbacks
void onPageStarted(WebView view, String url, Bitmap favicon)
void onPageFinished(WebView view, String url)
void onReceivedError(WebView view, int errorCode, String description, String failingUrl)
boolean shouldOverrideUrlLoading(WebView view, String url)
WebChromeClient APIEvent Callbacks
boolean onJs...()
void onProgressChanged(WebView view, int newProgress)
T1: CUSTOM LAYOUT
web android
T1: CUSTOM LAYOUT
first idea: custom user-agent
T1: CUSTOM LAYOUT
better idea: custom headers
@Override public boolean shouldOverrideUrlLoading(WebView view, String url) {
Map<String, String> extraHeaders = new HashMap<String, String>();
extraHeaders.put( EXTRA_HEADER_CLIENT_TYPE, EXTRA_HEADER_VALUE));
view.loadUrl(url, extraHeaders);
return true; } cancel request
load with extra header
T1: CUSTOM LAYOUT
problem 1: yourWebWiew.loadUrl("some url");
solution 1: public class YourWebView extends WebView { ... @Override public void loadUrl(String url) { // load url with extra headers } ...}
T1: CUSTOM LAYOUT
problem 2: yourWebWiew.reload();
solution 2: public class YourWebView extends WebView { ... @Override public void reload() {
String url = getUrl(); // load url with extra headers } ...}
get current url
not the best
T1: CUSTOM LAYOUT
problem 3:
solution 3:
post methods (e.g. forms)
there is no solution
AOSP: Issue 9122
T2: LOADING SCREEN
● starts at game launch
● disappears only when first page is loaded
T2: LOADING SCREEN
public class YourWebViewClient extends WebViewClient { ... @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { // show loading dialog }
@Override public void onPageFinished(WebView view, String url) { // hide loading dialog } ...}
problem
T2: LOADING SCREEN
public class YourWebViewClient extends WebViewClient { private String mStartUrl; ... @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { mStartUrl = url; // show fullscreen loading dialog }
@Override public void onPageFinished(WebView view, String url) { if (mStartUrl.equals(url)) // hide loading dialog else // redirect! } ...} fixed
T3: REPLACE SOME FEATURESpublic class NravoWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { // override behavior here }
@Override public void onPageStarted(WebView view, String url, Bitmap favicon) {}
@Override public void onPageFinished(WebView view, String url) { if (!mIsRedirect) { view.loadUrl("javascript: { alert("Horray!"); }"); } }}
IF YOU'VE GOT INTERESTED
NRavo games on:
THANKS FOR YOUR ATTENTION!QUESTIONS?
presentation will be available on:blog.zasadnyy.org.ua