Porting web mmo games to native platforms

Post on 18-Nov-2014

453 views 1 download

description

Common tasks during porting web mmo games to native platforms.

Transcript of Porting web mmo games to native platforms

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