development techniques for native hybrid tizen apps
play

Development Techniques for Native/Hybrid Tizen Apps Presented by - PowerPoint PPT Presentation

Development Techniques for Native/Hybrid Tizen Apps Presented by Kirill Kruchinkin Agenda Introduction and Definitions Practices Case Studies 2 Introduction & Definitions 2 App Types Browser Apps Installable Apps


  1. Development Techniques for Native/Hybrid Tizen Apps Presented by Kirill Kruchinkin

  2. Agenda • Introduction and Definitions • Practices • Case Studies 2

  3. Introduction & Definitions

  4. 2 App Types Browser Apps Installable Apps • Native • WebApps • Hybrid 4

  5. Browser Apps One platform for many devices • HTML5 is everywhere • HTML5 is mobile • HTML5 is skillful • HTML5 is open 5

  6. Tizen Application Level Web Applications Native Applications Web Framework Native Framework Social / Web / Locations Uix Media W3C / HTML5 Device APIs Content Xml Video Touch BT Call Net / Telephony / Messaging Graphics / UI CSS3 WebGL NFC MSG Worker °°° Web Runtime °°° Base / Io / Text / Locales App / Security / System Services Core App Framework Graphics / UI Multimedia Location Messaging Web Security System Base Connectivity Telephony PIM Linux Kernel and Device Drivers 6

  7. Web Apps Advantages of Browser Websites Tizen Web Application Apps with HTML5 Browser Web Runtime • Full offline support W3C Standard W3C Standard Tizen Device JS API JS API API • Device APIs • Native UI Webkit Webkit Plugins Native Platform 7

  8. Native Apps • Broader access to device hardware • Better integration with system features • Faster, smoother and better UI 8

  9. Hybrid Apps • Web UI and Native Services • Rapid development of UI • Data processing in background • Share native services between applications • Native open-source libraries 9

  10. Always a Challenging Decision Native Web Hybrid Rapid UI development - + + Open standards based - + + Performance in heavy calculation + - + Works offline + + + Background support + - + Deep HW/platform integration + - + Low complexity - + - 10

  11. Practices

  12. Steps to a Hybrid App • Create a web application project • Create a native service project • Define the reference in the project’s properties • Define a “bridge” between the web and service applications • Build the application • Install the application 12

  13. Bridging Native and JS • Messaging layer between web and native • Message Port • Websocket • JavaScriptBridge plugin 13

  14. App Communication through Message Ports • Implements a communication between two applications • Platform built-in 14

  15. Message Porting: Web Step 1 • Define message handler and create a local message port function onReceive (data, remoteMsgPort) { console.log('Received data to \'' + remoteMsgPort.name + '\''); // Search value with the "response“ key for(var i in data) { if(data[i].key == "response") { response = data[i].value; break; } } } try { localMessagePort = tizen.messageport.requestLocalMessagePort(localMessagePortName); localMessagePortWatchId = localMessagePort.addMessagePortListener(function(data, remote) { onReceive(data, remote); } ); } catch (e) { console.log("Request local message port Error"); } 15

  16. Message Porting: Web Step 2 • Launch service application function onSuccess() { console.log("Service App launched successfully!"); } function onError(err) { console.log("Service Applaunch failed ="+ err); } try { tizen.application.launch(appId, onSuccess, onError); } catch (e) { // handle error } 16

  17. Message Porting: Web Step 3 • Open remote port try { remoteMessagePort = tizen.messageport.requestRemoteMessagePort(appId, servicePortName); } catch (e) { console.log("Request remote message port Error "); } 17

  18. Message Porting: Native Step 1 void ServiceChannel::OnMessageReceivedN(RemoteMessagePort* pRemoteMessagePort, IMap* pMessage) { String *pData = static_cast<String *>(pMessage->GetValue(String(L"command"))); • Define local port listener if (pData != null) { IJsonValue* pJson = getJsonObj(pData); if(null != pJson) { // Extract command from pJson in to the pCommand pointer ... if(null != pCommand) { if (pCommand->Equals(DO_COMMAND_1, true)) { // extract additional parameters from pJson and perform requested operation – it is would be better to schedule this operation and // execute it asynchronously (for example, send event to application, set timer, run thread etc,..) } } // Relase pJsonObject ... } // Prepare answer in str variable ... //Send response in case of bi-direction communication HashMap *pMap = new HashMap(SingleObjectDeleter); pMap->Construct(); pMap->Add(new String(L"response"), new String(str)); pRemoteMessagePort->SendMessage(mLocalMessagePort, pMap); // deallocate resources ... } 18

  19. Message Porting: Native Step 2 • Create local port mLocalMessagePort = MessagePortManager::RequestLocalMessagePort(mLocalPortName); mLocalMessagePort->AddMessagePortListener( messagePortListenerImplementation ); 19

  20. Message Porting: Native Step 3 • Create remote port mRemoteMessagePort = MessagePortManager::RequestRemoteMessagePort(mRemoteAppID, mRemotePortName); 20

  21. Websocket Approach • Works in other platforms • Works asynchronously • Doesn’t have a payload limit • Handshake implementation RFC 6455 21

  22. Javascriptbridge Plugin • Include the JavaScriptBridge plugin in a Web page • Implement a JS method to be called from native • Implement Tizen::Web::Controls::IJavaScriptBridge on native sode 22

  23. Debugging 23

  24. Debugging Video 24

  25. 3 rd Party lib Static Linking 25

  26. 3 rd Party lib Dynamic Linking //get a lib Path wchar_t const * const LIB_NAME = L"lib/libHybridServiceLib.so"; Tizen::App::App *pxApp = Tizen::App::App::GetInstance(); String libPath = pxApp-> GetAppRootPath(); libPath.Append(LIB_NAME); //get initialized instance of Library Tizen::Base::Runtime::Library library; result r = library.Construct(libPath); //get a function pointer void *pMethod = library.GetProcAddress(L"CalculateMd5"); pCalculateHash = reinterpret_cast<char* (*)(byte const *, int)>(pMethod); //use the function pCalculateHash(pByteArray, byteArrayLength); 26

  27. JSON • JavaScript Object Notation (JSON) is a text-based open standard designed for human-readable data interchange • Parsers are available for JavaScript (native JS, jQuery and other frameworks) and a native API • Human-readable format that is easy for debug • Web services provide data in JSON format • Key-value data format is enough to present any data that is required in JavaScript 27

  28. JSON Usage • Web // parse var jsonData = JSON.parse(strJSON); // compose var strJSON = JSON.stringify(jsonData) • Native • Tizen::Web::Json::JsonParser for parsing • Tizen::Web::Json::JsonWriter for composing 28

  29. 3 rd Party frameworks • Cordova • Appcelerator Titanium • Cocos2d-html5 29

  30. Tips & Tricks • Use Message Ports as a bridge • Implement re-try logic to open Message Ports • Use JSON to transfer data • Widely use Resource Acquisition Is Initialization (RAII) idiom • Share assets and layouts between multiple apps in your package • Specify all privileges needed for the app in the manifest of the main project 30

  31. Case Studies

  32. TuneIn • TuneIn offers the user the ability to listen to streaming audio from thousands of radio stations • It is a Hybrid App to support more audio formats and resolve stream handling • Web App • UI part • TuneIn server communication • Native Service • audio playing • playlist downloading 32

  33. TuneIn Video 33

  34. Peeking Protector: native experience • A face recognition application that restricts access to a whole device or selected applications unless the owner’s face is recognized. • The application is fully native because the app should: • intercept launching other protecting apps • have the top-most visibility • hook hard keys like Home and Power • utilize native built-in face recognition API • use multi-threading to be responsive while the face recognition piece is in progress 34

  35. Peeking Protector Video 35

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend