93
Programowanie urządzeń mobilnych Bartłomiej Zass Microsoft

Programowanie urządzeń mobilnych

Embed Size (px)

DESCRIPTION

Programowanie urządzeń mobilnych. Bartłomiej Zass Microsoft. Plan prezentacji. Aplikacje mobilne w HTML i JavaScript Aplikacje natywne Windows 8, Windows Phone 7 – krótkie przypomnienie Windows Phone 8 dla programistów Techniki współdzielenia kodu dla aplikacji natywnych - PowerPoint PPT Presentation

Citation preview

Page 1: Programowanie urządzeń mobilnych

Programowanie urządzeń mobilnych

Bartłomiej ZassMicrosoft

Page 2: Programowanie urządzeń mobilnych

Aplikacje mobilne w HTML i JavaScript Aplikacje natywne

Windows 8, Windows Phone 7 – krótkie przypomnienie Windows Phone 8 dla programistów

Techniki współdzielenia kodu dla aplikacji natywnych Windows Phone 8, Windows 8 – podobieństwa i różnice Architektura aplikacji - MVVM i Portable Class Libraries

Plan prezentacji

Page 3: Programowanie urządzeń mobilnych

Źródło: Gartner

Page 5: Programowanie urządzeń mobilnych

Dlaczego HTML i Javascript? Jedyny wspólny mianownik między platformami

Przeglądarki internetowe w urządzeniach mobilnych Osadzone kontrolki przeglądarki w natywnych aplikacjach

A może C++? Windows Phone 8 obsługuje C++ Objective-C to NIE C++

“79% of mobile developers report that they will integrate some HTML5 in their apps in 2012”

Appcelerator/IDC – Q1-2012 – Mobile Developer Report

Page 6: Programowanie urządzeń mobilnych

Javascript dzisiaj Natywne aplikacje dla Windows 8 Gry – np. Cut The Rope, Angry Birds Office 2013, Sharepoint Node.js Cała masa bibliotek – nie tylko jQuery!

„Model-View-Whatever” w Javascript np. Knockout, Angular, Backbone, Mustache

Ciekawostki http://jscriptlinq.codeplex.com/ - LINQ w JS

http://bellard.org/jslinux/ - implementacja Linux w JS

Page 7: Programowanie urządzeń mobilnych

Nowy język autorstwa Andersa Hejlsberga (twórca C#) Nadzbiór Javascript

Nie trzeba uczyć się nowej składni

Silnie typowany Javascript Klasy, interfejsy, dziedziczenie, modyfikatory dostępu, ... Częściowa zgodność z propozycją ECMAScript 6 Refactoring, wsparcie Visual Studio

Kompilowany do Javascript!

TypeScript

Page 8: Programowanie urządzeń mobilnych

Demo

TypeScript

Page 9: Programowanie urządzeń mobilnych

Strategie - HTML 5 i aplikacje mobilne

OS platform

Przeglądarka obsługująca HTML 5

Mobilna strona

Natywna platforma aplikacyjna

Rozwiązania hybrydoweCross-kompilacja

Titanium (Appcelerator)…

Frameworki Javascript

Apache Cordova (PhoneGap)AppMobi…

JQueryMobileSenchaTouchJoPropulsion…

Page 10: Programowanie urządzeń mobilnych

Demo

jQuery Mobile

Page 11: Programowanie urządzeń mobilnych

Dostęp do natywnych funkcji z poziomu JavaScript Inaczej niż w Windows 8 – opakowana kontrolka przeglądarki

PhoneGap – popularna dystrybucja Apache Cordova Obecnie własnością Adobe PhoneGap Build Service

Aplikacje mogą być zgłaszane do sklepów Windows Phone, Android, iOS, Symbian, BlackBerry, ...

Windows 8 póki co nie – może nie mieć sensu Windows Phone 8 – nadal ma zastosowanie, pełne wsparcie

Apache Cordova

Page 12: Programowanie urządzeń mobilnych

PhoneGap i Windows Phone

Page 13: Programowanie urządzeń mobilnych

Demo

PhoneGap i Windows Phone

Page 14: Programowanie urządzeń mobilnych

Aplikacje natywne

Windows 8 – krótkie przypomnienieWindows Phone

Page 15: Programowanie urządzeń mobilnych

Platforma Windows 8Windows Store Apps

HTMLJavaScript

CC++

C#VB

Desktop Apps

Win32 .NET / SL

Internet Explorer

Communication & Data

Application Model

Devices & Printing

WinRT APIs

Graphics & Media

Syst

em S

ervi

ces

JavaScript(Chakra)

CC++

C#VB

XAML HTML / CSSView

Mod

el

Cont

rolle

r

Windows Core OS ServicesCore

Page 16: Programowanie urządzeń mobilnych

DemoWindows 8 i Windows Phone 7

Page 17: Programowanie urządzeń mobilnych

Windows Phone 8

Page 18: Programowanie urządzeń mobilnych

• wiele rdzeni procesora,• nowy procesor graficzny,• nowoczesna architektura,• karty MicroSD,• NFC,• …

Nowe telefony, nowe rozdzielczości, …

WVGA800 x 48015:9

WXGA1280 x 76815:9

720p1280 x 72016:9

Page 19: Programowanie urządzeń mobilnych

WVGA480x8001.0 Scale

720p720x12801.5 Scale

WXGA768x12801.6 Scale

400 Logical400 Physical

400 Logical600 Physical

400 Logical640 Physical

30 Logical30 Physical

30 Logical45 Physical

30 Logical48 Physical

2 Logical2 Physical

2 Logical3 Physical

2 Logical3 Physical (Rounded)

Myśl o layoutach w pikselach WVGAMyśl o grafice / filmach w WXGA

Page 20: Programowanie urządzeń mobilnych

Wspólne jądro systemu – Windows NT Te same komponenty systemowe

Sieć, kernel, grafika, system plików, multimedia Wspólny model sterowników Obsługa wielu rdzeni w Windows Phone Solidna, nowoczesna platforma do przyszłej rozbudowy

Ten sam CLR Nie oznacza to dokładnie tego samego API

Obecnie - wiele podobieństw W przyszłości - na pewno bardzo dużo wspólnego kodu

Windows Phone 8 i Windows 8

Page 21: Programowanie urządzeń mobilnych

Windows Phone 8 API

• Aplikacje managed wykorzystujące WP 7.1, WP 8.0 .NET oraz WinPRT API

• Natywne aplikacje wykorzystujące WinPRT i Win32

• Gry wykorzystujące WP 7.1 XNA Framework

• Gry wykorzystujące Direct3D lub DirectX

.NET API for Windows

Phone

Windows Phone

RuntimeWin32 & COM

Managed Managed & Native

Native

WP7.1 XAML & C#/VB

WP8.0 XAML & C#/VB

WP8.0 XAML & C++

WP8.0 Games DirectX/Direct 3D & C++

WP7.1 XNA & C#/VB

WP8.0 XAML & C#/VB with Direct3D Graphics

Page 22: Programowanie urządzeń mobilnych

• Zarządzany kod• Wszystkie API z Windows Phone 7.1

• Przestrzenie nazw System oraz Microsoft.Phone

• Wiele nowych klas dodanych w WP 8, np.:

• Microsoft.Phone.Wallet• Microsoft.Phone.Tasks.ShareMediaTask• Microsoft.Phone.Tasks.MapsTask• Microsoft.Phone.Storage.ExternalStorage• Microsoft.Phone.Networking.Voip• …

.NET API for Windows Phone

Page 23: Programowanie urządzeń mobilnych

• Podzbiór pełnego WinRT + dodatki specyficzne dla telefonu•Windows (Phone) Runtime zaimplementowane w C++•Projekcje do C#, VB.NET, C++•Obecnie brak projekcji do HTML5/JavaScript

Windows Phone Runtime API

Pełny WinRT (ok. 11,000 obiektów)

Podzbiór przeniesiony do Windows Phone

Runtime (ok. 2,800 obiektów)

Nowe dla Windows Phone Runtime

(ok. 600 obiektów)

Specyficzne dla Windows Phone (wybrane):

• Synteza i rozpoznawanie mowy• VOIP• Windows.Phone.PersonalInformati

on• LockScreen,LockScreenManager• Wszystkie i dodatki

Page 24: Programowanie urządzeń mobilnych

• Oprócz .NET i WinPRT API, dostęp do niektórych Win32 API, np.:•Winsock do niskopoziomowego oprogramowania połączeń•Camera APIs dla aplikacji natywnych•COM APIs takie jak CoInitializeEx, CoTaskMemAlloc, CoTaskMemFree,

CreateFile2, ReadFile, WriteFile, HeapAlloc, CreateMutexExW, WaitForSingleObjectW, …

• Głównie dla programistów piszących w kodzie natywnym• Możliwość dodania referencji w projekcie managed (rzadko potrzebne)

Win32 i COM API

Page 25: Programowanie urządzeń mobilnych

Co z aplikacjami na Windows Phone 7.x?

Page 26: Programowanie urządzeń mobilnych

• Aplikacje stworzone na WP 7.x

będą działały na telefonach z

systemem WP 8.0

Aplikacje WP 7.x na systemie WP 8.0

WP OS 7.1 app

WP 8.0 Runtime/Libraries

bez rekompilacji

WP OS 7.1 app

+Quirks

WP OS 8.0 app

WP OS 8.0 app

Page 27: Programowanie urządzeń mobilnych

Skąd wziąć narzędzia do programowania?

Page 28: Programowanie urządzeń mobilnych

http://dev.windowsphone.com

Twoje centrum dowodzenia aplikacjami

Page 29: Programowanie urządzeń mobilnych

• Nie jest wymagane do tworzenia aplikacji• Jest wymagane do testowania aplikacji na urządzeniu i publikacji jej w

Windows Phone Store• Jak je otrzymać?:

• znajduje się w MSDN,• studenci bezpłatnie poprzez Dreamspark, • płacąc 99$ rocznie per programista.

Konto deweloperskie

Page 30: Programowanie urządzeń mobilnych

• System operacyjny:• Windows 8 x64

• Hardware:• zalecane 4GB RAM, • 8GB wolnej przestrzeni dyskowej

• WP Emulator wymaga Second Level Address Translation (SLAT)

Wymagania sprzętowe dla WP SDK 8.0

Page 31: Programowanie urządzeń mobilnych

• Z klawiatury:•Dwa razy F12

• Simulation Dashboard

Lock the Screen na emulatorze

Page 32: Programowanie urządzeń mobilnych

• Dostępne w simulation dashboard• Testowanie dla różnych warunków sieci

Symulacja sieci

Page 33: Programowanie urządzeń mobilnych

• Na emulatorze• Na urządzeniu

•Przyciski Win + power

Zrzuty ekranu

36

Page 34: Programowanie urządzeń mobilnych

Co nowego w Windows Phone 8?

Page 35: Programowanie urządzeń mobilnych

Wydajność aplikacji

• Czas startu bardzo ważny z punktu widzenia użytkownika• Facebook • WP 7 – 12 sekund• WP 8 – 4 sekundy

• Dlaczego?• Zmiany w środowisku uruchomieniowym• Usprawnienia CoreCLR• Kompilowanie w chmurze• Dual core > 1 ghz

Page 36: Programowanie urządzeń mobilnych

Kompilowanie w chmurze

• CoreCLR dodaje wsparcie dla NGEN• Czasochłonne na urządzeniu

• Po zgłoszeniu aplikacji do Windows Store automatyczny NGEN• Nowe aplikacje• Zgłaszamy XAP• XAP aktualizowany – kod natywny

• Co z istniejącymi aplikacjami?• Aplikacje WP 7.5 kompilowane przez NGEN dla WP 8• Oryginalny XAP pozostaje dla WP 7.x

Page 37: Programowanie urządzeń mobilnych

Model aplikacji

• Użytkownicy oceniają aplikację na podstawie własnych doświadczeń• 4 sekundy to wciąż długo, jeśli często uruchamiamy aplikację• Za każdym razem wchodzenie do określonej sekcji aplikacji

• Fast Application Swithing – WP 7.x• Przycisk wstecz• Task switcher – wielu użytkowników nie wie o nim

Page 38: Programowanie urządzeń mobilnych

Fast Application Resume

• Aplikacja może być wskrzeszana niezależnie od tego jak została uruchomiona• Lista aplikacji• Live Tile• Toast• Deep link

• Jeśli jest na stosie – przywracanie• Jeśli nie ma jej na stosie – nowa instancja• Podobnie jak w Windows 8

Page 39: Programowanie urządzeń mobilnych

Włączanie Fast Application Resume

• Domyślnie wyłączone• Ochrona interfejsu użytkownika• Pewność, ze aplikacje będą działały prawidłowo

• Bardzo proste do włączenia• Nowy atrybut ActivationPolicy w DefaultTask

<DefaultTask Name="_default" NavigationPage="MainPage.xaml" ActivationPolicy="Resume"/>

Page 40: Programowanie urządzeń mobilnych

Kontrolki

• ProgressBar animuje się poza wątkiem UI• Panorama, Pivot i LongListSelector przeniesione do ROM• Mniejsze zużycie pamięci przez kontrolkę Panorama• Poprawiony „first touch experience”• Toolkit – http://phone.codeplex.com

Page 41: Programowanie urządzeń mobilnych

LongListSelector

JumpList Sticky HeadersGrid View

Page 42: Programowanie urządzeń mobilnych

• Nowa kontrolka korzysta z technologii i zasobów Nokia

• Zawiera m.in.:

•Bazuje na wektorach

• cztery modele kartograficzne

• tryb jasny i ciemny

• informacje o ruchu, trasach itp.

Nowa kontrolka do wyświetlania map

Page 43: Programowanie urządzeń mobilnych

• Bliźniacze do API w Windows 8

• Windows Phone OS 7.1 .NET Location API nadal jest

wspierane

• Background task pobierający lokalizację urządzenia

• Tylko 1 agent

• Tylko kiedy aktywnie śledzi położenie

Nowe API służące do lokalizacji

Page 44: Programowanie urządzeń mobilnych

Jak włączyć?

<DefaultTask Name="_default" NavigationPage="Views/Home.xaml"><BackgroundExecution>

<ExecutionType Name="LocationTracking" /></BackgroundExecution>

</DefaultTask>

Page 45: Programowanie urządzeń mobilnych

Nowe wielkości i szablony kafelków

• W Windows Phone 8 możemy korzystać z trzech typów Tile:

• Flip – dwa „rotujące” obrazki (tożsame z WP 7.1 Tile)

• Iconic – sama pojedyncza ikona

• Cycle – „rotacja” do dziewięciu różnych obrazków

Page 46: Programowanie urządzeń mobilnych

• Użytkownik może dodać powiadomienia z naszej aplikacji (LockScreen Notification)

• Nasza aplikacja może zmienić tło zablokowanego ekranu (LockScreen Background)

• New Shell APIs• ShellSetWallpaper to use a new image• ShellWallpaperSchedule to download a single image

from the internet on a specific interval (e.g., 30 mins, 1 hour, etc.)

• ShellWallpaperFolderSchedule to cycle through a set of image in app’s isolated storage (e.g., a photo slideshow) based on number of views of the lock screen

Dostęp do Lockscreen

Page 47: Programowanie urządzeń mobilnych

• SaveAppointmentTask• ShareMediaTask•MapDownloaderTask •MapsTask •MapsDirectionsTask

Zestaw nowych launcherów

Page 48: Programowanie urządzeń mobilnych

• Voice Commands umożliwia uruchomienie aplikacji, lub jej konkretnej funkcji, za pomocą głosu, po przytrzymaniu przycisku Start

• Speech Recognition + Text-to-Speech API wspiera przekształcenie mowy w tekst i czytanie już zapisanego teksu

Komendy głosowe i rozpoznawanie mowy

Page 49: Programowanie urządzeń mobilnych

Portfel

Możliwość zarządzania kartami i „kuponami” z poziomu własnej aplikacji

Obsługa kart: kredytowych i debetowych, lojalnościowych, specjalnych ofert,

Wsparcie dla „tap to pay”

Page 50: Programowanie urządzeń mobilnych

• Lenses = rozszerzenia do kamery oferujące nowe opcje, możemy tworzyć je sami i udostępniać użytkownikom • Picture.GetPreviewImage() = miniaturka

obrazka• Integracja aplikacji z Photo Edit Picker

lub rejestracja jako własny edytor• Upload zdjęć w tle do zewnętrznych

serwisów• Zaawansowana kontrola (klasy

PhotoCaptureDevice i AudioVideoCaptureDevice)

Nowe możliwości aparatu fotograficznego i przetwarzania zdjęć

Page 51: Programowanie urządzeń mobilnych

VoIP i wideo rozmowy

API dostępne dla wszystkich

deweloperów

Rozmowy integrują się z

systemem telefonu

Aplikacje VoIP działają również w

tle

Page 52: Programowanie urządzeń mobilnych

Protokoły i asocjacje

• Własne schematy• Rejestracja własnego URI dla aplikacji• Np. skype:jankowalski – rozpoczyna konwersację• Fb://profile/7031234 – otwiera profil użytkownika

• Integracja z przeglądarką• Integracja między aplikacjami

• Typy plików• Zarejestruj aplikację dla danego formatu pliku

Page 53: Programowanie urządzeń mobilnych

Loved the Purple Onion

Peter Bergman

Skype:PeterBergman

Deep linking - przykład

Page 54: Programowanie urządzeń mobilnych

• Bluetooth API• komunikacja aplikacja – aplikacja,• komunikacja aplikacja – urządzenie

• Proximity API• połączenie aplikacji z wykorzystaniem Bluetooth,• ustanowenie połączenia Wi-Fi, Bluetooth lub Wi-Fi

Direct pomiędzy aplikacją, a jej instancją działająca na innym urządzeniu,

• wysyłanie danych poprzez NFC,• interakcję z tagami NFC

Bluetooth i NFC

Page 55: Programowanie urządzeń mobilnych

• Windows.Networking Windows Phone Runtime API• nowe API kompatybilne z Windows 8

• Nasłuchiwanie przychodzących połączeń (Incoming Sockets)• wspierane przez System.Net.Sockets i Windows.Networking.Sockets

• Wsparcie dla IPV6• Wsparcie dla Winsock API

• możliwość przenoszenia już istniejących bibliotek natywnych korzystających z tego API

Możliwości sieciowe

Page 56: Programowanie urządzeń mobilnych

• Microsoft.Phone.Storage API umożliwia

czytanie danych z karty MicroSD

• Użytkownik może zapisywać personalne

dane i multimedia na karcie w telefonie

Przechowywanie danych na kartach MicroSD

Zdjęcia ▪ Muzyka Filmy ▪ Instalacja aplikacji

Page 57: Programowanie urządzeń mobilnych

Baza danych

• SQL Server i Linq To SQL nadal obsługiwane• Wiele zgłoszeń, że potrzebne są alternatywne rozwiązania• Kompatybilność z innymi platformami

• SQLite

Page 58: Programowanie urządzeń mobilnych

• Dostęp do API umożliwiającego tworzenie, edycję,

kasowanie, przeszukiwanie własnych typów kontaktów

• Możliwość automatycznej synchronizacji listy z listą

wystawiona na własnym serwerze

• Dostęp read/write do własnych

• Dostęp readonly do pozostałych jeśli użytkownik

wyraził zgodę (jak w Mango)

Własna lista kontaktów

Page 59: Programowanie urządzeń mobilnych

• API do tworzenia aplikacji z katalogiem własnych produktów • Microsoft zapewnia całe środowisko

sprzedażowe• Po stronie programisty pozostaje obsługa

zakupionego przez użytkownika przedmiotu

In-app Purchase = zakupy wewnątrz aplikacji

Page 60: Programowanie urządzeń mobilnych

Enterprise

• Zarządzanie urządzeniami• inTune, itp.• Ustawianie i aktualizowanie polis• Automatyczne aktualizowanie aplikacji

• Deployment• Nie trzeba zgłaszać aplikacji do Windows Store• Różne sposoby wdrażania (managed / unmanaged), web, email, aplikacja

Page 61: Programowanie urządzeń mobilnych

Firmowe kontoNazwa firmy wyświetlana na telefonie

Wymagane zatwierdzenie żądania

Tworzenie konta

Page 62: Programowanie urządzeń mobilnych

Deployment – managed vs unmanaged

Feature Managed Unmanaged

Enrollment method Settings applet + MDM Email/browser

Policy management Yes No

Number of enrollments Limited to 1 Unlimited

App install method MDM/company hub Email/browser/company hub

App inventory MDM No

Silent app updates MDM No

Unenroll Remote and local No

Page 63: Programowanie urządzeń mobilnych

Managed enrollment

Page 64: Programowanie urządzeń mobilnych

Company Hub

Page 65: Programowanie urządzeń mobilnych

Windows Phone i Windows 8

Page 66: Programowanie urządzeń mobilnych

Wspólne API dla WinRT i WinPRT

Wybrane wspólne przestrzenie nazw i klasy

• Windows.ApplicationModel.Package

• Windows.ApplicationModel.Activation

• Windows.ApplicationModel.DataTransfer

• Windows.ApplicationModel.DataTransfer.DataTransferManager

• Windows.ApplicationModel.Store

• Windows.Devices.Geolocation

• Windows.Devices.Sensors.Accelerometer

• Windows.Devices.Sensors.Compass

• Windows.Devices.Sensors.Gyrometer

• Windows.Devices.Sensors.Inclinometer

• Windows.Foundation.IAsyncAction

• Windows.Foundation.IAsyncOperation(TResult)

• Windows.Graphics.Display

• Windows.Networking.Connectivity

• Windows.Networking.Proximity

• Windows.Networking.Sockets

• Windows.Storage

• Windows.Storage.Pickers

• Windows.System.Launcher

• Windows.System.Threading.Threadpool

• …

• Wszystkie

Page 67: Programowanie urządzeń mobilnych

• W kilku przypadkach, WinPRT API oferują podobne funkcjonalności do .NET API z WP 7.5, np.:

• Możemy skorzystać z dowolnego API• Deweloperzy adresujący WP 7.1 oraz WP 8 będą preferowali .NET API• Deweloperzy myślący o współdzieleniu kodu pomiędzy Windows Phone 8 i Windows 8 będą

skłaniali się do WinPRT API

Przypadki duplikacji w API

.NET API Windows Phone Runtime API

System.IO.IsolatedStorage Windows.Storage

System.NET.Sockets Windows.Networking.Sockets

System.Threading.ThreadPool Windows.System.Threading.ThreadPool

Microsoft.Devices.Sensors Windows.Devices.Sensors

Page 68: Programowanie urządzeń mobilnych

Demo

WinPRT i WinRT - podobieństwa

Page 69: Programowanie urządzeń mobilnych

Namespace’y XAML WP – xmlns:imgsch="clr-namespace:ImageSearch;assembly=…" W8 – xmlns:imgsch="using:ImageSearch"

Event handlery WP – System.Windows.RoutedEventArgs W8 – Windows.UI.Xaml.RoutedEventArgs

Nawigacja WP – NavigationService.Navigate(new Uri("/page.xaml?Id=5", UriKind.Relative)); W8 – Frame.Navigate(typeof(DetailsPage), e.ClickedItem);

SQL CE Windows 8 - brak

Wybrane różnice

Page 70: Programowanie urządzeń mobilnych

Kontrolki XAML

Mapowanie kontrolek

Np. Panorama, PivotNp. GridView, ListView

Np. Grid, StackPanel, TextBox, ListBox, Button, itp.

Page 71: Programowanie urządzeń mobilnych

Współdzielenie elementów XAML Separacja logiki i UI – wzorzec Model-View-ViewModel Wspólna logika w Portable Class Libraries Dodawanie plików jako link Własne komponenty Windows Runtime (tylko WP 8) Kompilacja warunkowa + dyrektywy preprocesora

Techniki współdzielenia kodu

Page 72: Programowanie urządzeń mobilnych

Współdzielenie logiki – jak? Brak binarnej kompatybilności między projektami

Silverlight, Windows Phone, Windows 8, WPF

Osobne typy class library

Page 73: Programowanie urządzeń mobilnych

Trudności w utrzymaniu...

Page 74: Programowanie urządzeń mobilnych

Jedno źródło Jeden projekt Jedne binaria

Wiele platform!

Portable Class Libraries

Page 75: Programowanie urządzeń mobilnych

Platform / feature matrix

Page 76: Programowanie urządzeń mobilnych

Demo

Portable Class Library

Page 77: Programowanie urządzeń mobilnych

Model-View-ViewModel

View

ViewModel

DataBinding CommandsMessages

Model

View Service

Events

PropertyChanged

Widoki Jak wyświetlić

informację? Napisane w XAML

View Modele Jaką informację

wyświetlić? Logika interakcji

Modele Model danych Logika biznesowa ...

Platform-specific

Przenośne

Page 78: Programowanie urządzeń mobilnych

Architektura cross-platform

Startup

Widoki

Windows Store App

Kod platform - specific

View Modele

Modele

Portable Class Library

Abstrakcje platform - specific

Startup

Widoki

Windows Phone App

Kod platform - specific

Referencja Referencja

Page 79: Programowanie urządzeń mobilnych

// W Portable Class Library public interface IFileStorage { Task SaveFileAsync(string filename, string contents);

Task<string> LoadFileAsync(string filename); }

// W ViewModelu public void Save() { _fileStorage.SaveFileAsync(Filename, Contents); }

public async void Load() { Contents = await _fileStorage.LoadFileAsync(Filename); }

Abstrakcja – interfejs

Page 80: Programowanie urządzeń mobilnych

Dodawanie plików jako link

Również z Partial Classes...

Page 81: Programowanie urządzeń mobilnych

Kompilacja warunkowa

Nie w Portable Class LibraryW plikach XAML – nieobsługiwaneOstrożnie i z umiarem...

Page 82: Programowanie urządzeń mobilnych

Demo

Portable Class Libraries i MVVM

Page 83: Programowanie urządzeń mobilnych

public abstract class ServiceBusAdapter{  public static ServiceBusAdapter Current  {    get;    set;  }

  public abstract byte[] ComputeHmacSha256(byte[] secretKey, byte[] data);}

Abstrakcja - klasa abstrakcyjna

Page 84: Programowanie urządzeń mobilnych

// Windows Phone - implementacjapublic class PhoneServiceBusAdapter : ServiceBusAdapter{  public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data)  {    using (var cryptoProvider = new HMACSHA256(secretKey))    {      return cryptoProvider.ComputeHash(data);    }  }}// Windows 8 - implementacjapublic class MetroServiceBusAdapter : ServiceBusAdapter{  private const string HmacSha256AlgorithmName = "HMAC_SHA256";  public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data)  {    var provider = MacAlgorithmProvider.OpenAlgorithm(HmacSha256AlgorithmName); //...    return hashed.ToArray();  }}

Page 85: Programowanie urządzeń mobilnych

ServiceBusAdapter.Current = new PhoneServiceBusAdapter(); // Windows Phone startupServiceBusAdapter.Current = new MetroServiceBusAdapter(); // Windows 8 startup

// W Portable Class Library

var adapter = ServiceBusAdapter.Current;byte[] signatureBytes = adapter.ComputeHmacSha256(issuerSecretBytes,

Encoding.UTF8.GetBytes(token));

Wywoływanie kodu platform-specific

Page 86: Programowanie urządzeń mobilnych

// Rejestrowanie usługi – start aplikacji WP 7_container.RegisterType<IStateService, PhoneIsolatedStorageStateService>();

// Rejestrowanie usługi – start aplikacji Win 8_container.RegisterType<IStateService, Win8LocalStorageStateService>();

// Rejestrowanie usługi – singleton_container.RegisterType<INavigationService, Win8NaviService>(

new ContainerControlledLifetimeManager());

Dependency Injection - Unity

Page 87: Programowanie urządzeń mobilnych

public class MyViewModel(IStateService stateService){

// ...}

// Wewnątrz Portable Class Library// Widok bindujemy (np. w XAML) do ServiceLocator.MainViewModelpublic class ServiceLocator{ public static MyViewModel MainViewModel {

get{ // Automatyczne wstrzykiwanie zal. do konstruktora return container.Resolve<MyViewModel>(); }

}}

Dependency Injection – c.d.

Page 88: Programowanie urządzeń mobilnych

Demo

Windows Phone i Windows 8 + PCL – przykład zaawansowany

Page 89: Programowanie urządzeń mobilnych

Xamarin Port Mono dla iOS (MonoTouch) i Android

MvvmCross Framework MVVM dostarczany w postaci Portable Class Library Współdzielenie kodu ViewModeli, Modeli oraz usług między Windows

Phone, WinRT, MonoTouch i Mono for Android

Inne platformy?

Page 90: Programowanie urządzeń mobilnych

HTML 5 (+ PhoneGap) Niski koszt wejścia Wiele platform Niższa wydajność i mniejsze możliwości

Windows Phone 8 i Windows 8 Wiele współdzielonych elementów, ale też różnic

MVVM i Portable Class Libraries Współdzielenie logiki Abstrakcje funkcjonalności platform-specific

Podsumowanie

Page 92: Programowanie urządzeń mobilnych

MVVM Light toolkit (basics) http://channel9.msdn.com/Events/MIX/MIX10/EX14

MVVM Light toolkit (deep dive) http://channel9.msdn.com/Events/MIX/MIX11/OPN03

Windows 8 and MVVM Light toolkit http://blog.galasoft.ch/archive/2012/02/19/impressions-slides-and-code-from-techdays-belgium-and-netherlands.aspx

Caliburn.micro concepts http://channel9.msdn.com/Events/MIX/MIX10/EX15

Zasoby – c.d.

Page 93: Programowanie urządzeń mobilnych

Daniel Plaisted’s blog http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-yo

u.aspx

Portable Class Library MSDN documentation http://msdn.microsoft.com/en-us/library/gg597391(v=vs.110)

Portable Class Library overview blog post blogs.msdn.com/b/dotnet

/archive/2012/07/06/targeting-multiple-platforms-with-portable-code-overview.aspx

Create a continuous client using portable libraries msdn.microsoft.com/en-us/magazine/hh852593.aspx

MvvmCross slodge.blogspot.com/2012/05/portable-class-libraries-in-mvvmcross.html

Portable Class Libraries on Channel 9 (lots of links in show notes) channel9.msdn.com/Shows/Visual-Studio-Toolbox/Visual-Studio-ToolboxPortable-Class-

Libraries

Zasoby – c.d.