Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Programowanie urządzeń mobilnych
Bartłomiej Zass Microsoft
2
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 Windows Phone 8, Windows 8 – podobieństwa i różnice Architektura aplikacji - MVVM i Portable Class Libraries
3
3/28/2017 Źródło: Gartner © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
4
3/28/2017 © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
5
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 – Q – Mobile Developer Report
6
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 - LINQ w JS - implementacja Linux w JS
7
TypeScript 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!
8
Demo TypeScript
9
Strategie - HTML 5 i aplikacje mobilne
Frameworki Javascript JQueryMobile SenchaTouch Jo Propulsion … Cross-kompilacja Rozwiązania hybrydowe Mobilna strona Titanium (Appcelerator) … Apache Cordova (PhoneGap) AppMobi … Natywna platforma aplikacyjna Przeglądarka obsługująca HTML 5 OS platform
10
Demo jQuery Mobile
11
Apache Cordova 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
12
PhoneGap i Windows Phone
13
Demo PhoneGap i Windows Phone
14
Aplikacje natywne Windows 8 – krótkie przypomnienie Windows Phone
15
Windows Core OS Services
Platforma Windows 8 Windows Store Apps HTML JavaScript C C++ C# VB Desktop Apps Win32 .NET / SL Internet Explorer JavaScript (Chakra) C C++ C# VB XAML HTML / CSS View Model Controller Communication & Data Application Model Devices & Printing WinRT APIs Graphics & Media System Services Windows Core OS Services Core
16
Demo Windows 8 i Windows Phone 7
17
Windows Phone 8
18
Nowe telefony, nowe rozdzielczości, …
wiele rdzeni procesora, nowy procesor graficzny, nowoczesna architektura, karty MicroSD, NFC, … 720p 1280 x 720 16:9 WVGA 800 x 480 15:9 WXGA 1280 x 768 15:9
19
Myśl o layoutach w pikselach WVGA Myśl o grafice / filmach w WXGA
1.0 Scale WXGA 768x1280 1.6 Scale 720p 720x1280 1.5 Scale 400 Logical 400 Physical 400 Logical 640 Physical 400 Logical 600 Physical 2 Logical 2 Physical 2 Logical 3 Physical (Rounded) 2 Logical 3 Physical 30 Logical 30 Physical 30 Logical 48 Physical 30 Logical 45 Physical Myśl o layoutach w pikselach WVGA Myśl o grafice / filmach w WXGA
20
Windows Phone 8 i Windows 8
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
21
Windows Phone 8 API .NET API for Windows Phone Windows Phone Runtime
WP8.0 Games DirectX/Direct 3D & C++ Aplikacje managed wykorzystujące WP 7.1, WP 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 WP8.0 XAML & C++ WP8.0 XAML & C#/VB with Direct3D Graphics WP8.0 XAML & C#/VB WP7.1 XNA & C#/VB WP7.1 XAML & C#/VB .NET API for Windows Phone Windows Phone Runtime Win32 & COM Managed Managed & Native Native
22
Windows Phone 8 i Windows 8 – c.d.
Kod natywny (C++) Współdzielenie większości kodu Wspólny kod gier wykorzystujących DirectX / Direct3D HTML 5 np. PhoneGap, własne rozwiązanie hybrydowe lub strony mobilne Ten sam silnik Internet Explorer 10! C# / VB.NET Dla programistów WP 8 – wiele klas współdzielonych z WinRT Drobne różnice w podstawowym API (zwłaszcza widoki)
23
.NET API for Windows Phone
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 …
24
Windows Phone Runtime API
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 Pełny WinRT (ok. 11,000 obiektów) Specyficzne dla Windows Phone (wybrane): Synteza i rozpoznawanie mowy VOIP Windows.Phone.PersonalInformation LockScreen,LockScreenManager Wszystkie i dodatki Podzbiór przeniesiony do Windows Phone Runtime (ok. 2,800 obiektów) Nowe dla Windows Phone Runtime (ok. 600 obiektów)
25
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
26
Przypadki duplikacji w API
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 .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
27
Win32 i COM API 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)
28
Co z aplikacjami na Windows Phone 7.x?
29
Aplikacje WP 7.x na systemie WP 8.0
Aplikacje stworzone na WP 7.x będą działały na telefonach z systemem WP 8.0 bez rekompilacji WP OS 8.0 app WP OS 7.1 app WP OS 7.1 app WP OS 8.0 app +Quirks WP 8.0 Runtime/Libraries
30
Skąd wziąć narzędzia do programowania?
31
Twoje centrum dowodzenia aplikacjami
32
Konto deweloperskie 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.
33
Wymagania sprzętowe dla WP SDK 8.0
System operacyjny: Windows 8 x64 Hardware: zalecane 4GB RAM, 8GB wolnej przestrzeni dyskowej WP Emulator wymaga Second Level Address Translation (SLAT)
34
Lock the Screen na emulatorze
Z klawiatury: Dwa razy F12 Simulation Dashboard
35
Symulacja sieci Dostępne w simulation dashboard
Testowanie dla różnych warunków sieci
36
Zrzuty ekranu Na emulatorze Na urządzeniu Przyciski Win + power
37
Co nowego w Windows Phone 8?
38
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
39
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
40
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
41
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
42
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"/>
43
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 –
44
LongListSelector JumpList Grid View Sticky Headers
45
Nowa kontrolka do wyświetlania map
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.
46
Nowe API służące do lokalizacji
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
47
Jak włączyć? <DefaultTask Name="_default" NavigationPage="Views/Home.xaml"> <BackgroundExecution> <ExecutionType Name="LocationTracking" /> </BackgroundExecution> </DefaultTask>
48
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
49
Dostęp do Lockscreen 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
50
Zestaw nowych launcherów
SaveAppointmentTask ShareMediaTask MapDownloaderTask MapsTask MapsDirectionsTask
51
Komendy głosowe i rozpoznawanie mowy
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
52
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”
53
Nowe możliwości aparatu fotograficznego i przetwarzania zdjęć
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)
54
VoIP i wideo rozmowy API dostępne dla wszystkich deweloperów
Windows Phone Summit_2012 3/28/2017 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 © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
55
Protokoły i asocjacje Własne schematy Integracja z przeglądarką
Rejestracja własnego URI dla aplikacji Np. skype:jankowalski – rozpoczyna konwersację Fb://profile/ – otwiera profil użytkownika Integracja z przeglądarką Integracja między aplikacjami Typy plików Zarejestruj aplikację dla danego formatu pliku
56
Deep linking - przykład
Loved the Purple Onion Peter Bergman Skype:PeterBergman
57
Bluetooth i NFC Bluetooth API Proximity 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
58
Możliwości sieciowe 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
59
Przechowywanie danych na kartach MicroSD
Microsoft.Phone.Storage API umożliwia czytanie danych z karty MicroSD Użytkownik może zapisywać personalne dane i multimedia na karcie w telefonie Zdjęcia ▪ Muzyka Filmy ▪ Instalacja aplikacji
60
Baza danych SQL Server i Linq To SQL nadal obsługiwane SQLite
Wiele zgłoszeń, że potrzebne są alternatywne rozwiązania Kompatybilność z innymi platformami SQLite
61
Własna lista kontaktów
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)
62
In-app Purchase = zakupy wewnątrz aplikacji
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
63
Enterprise Zarządzanie urządzeniami Deployment 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, , aplikacja
64
Tworzenie konta Firmowe konto Nazwa firmy wyświetlana na telefonie
Wymagane zatwierdzenie żądania
65
Deployment – managed vs unmanaged
Build 2012 3/28/2017 Deployment – managed vs unmanaged Feature Managed Unmanaged Enrollment method Settings applet + MDM /browser Policy management Yes No Number of enrollments Limited to 1 Unlimited App install method MDM/company hub /browser/company hub App inventory MDM Silent app updates Unenroll Remote and local © 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
66
Managed enrollment Build 2012 3/28/2017
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
67
Company Hub Windows Phone Summit_2012 3/28/2017
© 2012 Microsoft Corporation. All rights reserved. Microsoft, Windows, and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
68
Windows Phone i Windows 8
69
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
70
Przypadki duplikacji w API
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 .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
71
Demo WinPRT i WinRT - podobieństwa
72
Wybrane różnice Namespace’y XAML Event handlery Nawigacja SQL CE
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
73
Zapis ustawień Windows Phone 7 Windows 8 Roaming – tylko Windows 8
settings = IsolatedStorageSettings.ApplicationSettings; settings["exampleSetting"] = "Hello Phone"; Windows 8 settings = Windows.ApplicationData.Current.LocalSettings; container = settings.CreateContainer(“main", ApplicationDataCreateDisposition.Always); settings.Containers["main"].Values["exampleSetting"] = "Hello Windows"; Roaming – tylko Windows 8 settings = ApplicationData.Current.RoamingSettings;
74
Kontrolki XAML Mapowanie kontrolek Np. GridView, ListView
Np. Panorama, Pivot Mapowanie kontrolek Np. Grid, StackPanel, TextBox, ListBox, Button, itp.
75
Demo Z Windows Phone do Windows 8 - różnice
76
Techniki współdzielenia kodu
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
77
Współdzielenie logiki – jak?
Brak binarnej kompatybilności między projektami Silverlight, Windows Phone, Windows 8, WPF Osobne typy class library
78
Trudności w utrzymaniu...
79
Portable Class Libraries
Jedno źródło Jeden projekt Jedne binaria Wiele platform!
80
Platform / feature matrix
81
Demo Portable Class Library
82
Model-View-ViewModel
Widoki Jak wyświetlić informację? Napisane w XAML View Modele Jaką informację wyświetlić? Logika interakcji Modele Model danych Logika biznesowa ... View Platform-specific Messages DataBinding Commands View Service PropertyChanged ViewModel Przenośne Events Model
83
Demo Przyspieszony kurs podstaw MVVM
84
Architektura cross-platform
Windows Store App Windows Phone App Startup Startup Widoki Widoki Kod platform - specific Kod platform - specific Portable Class Library View Modele Referencja Referencja Modele Abstrakcje platform - specific
85
Abstrakcja – interfejs
// 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);
86
Dodawanie plików jako link
Również z Partial Classes...
87
Kompilacja warunkowa Nie w Portable Class Library
W plikach XAML – nieobsługiwane Ostrożnie i z umiarem...
88
Demo Portable Class Libraries i MVVM
89
Abstrakcja - klasa abstrakcyjna
public abstract class ServiceBusAdapter { public static ServiceBusAdapter Current { get; set; } public abstract byte[] ComputeHmacSha256(byte[] secretKey, byte[] data); }
90
// Windows Phone - implementacja
public class PhoneServiceBusAdapter : ServiceBusAdapter { public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data) { using (var cryptoProvider = new HMACSHA256(secretKey)) { return cryptoProvider.ComputeHash(data); } } } // Windows 8 - implementacja public class MetroServiceBusAdapter : ServiceBusAdapter private const string HmacSha256AlgorithmName = "HMAC_SHA256"; var provider = MacAlgorithmProvider.OpenAlgorithm(HmacSha256AlgorithmName); //... return hashed.ToArray();
91
Wywoływanie kodu platform-specific
ServiceBusAdapter.Current = new PhoneServiceBusAdapter(); // Windows Phone startup ServiceBusAdapter.Current = new MetroServiceBusAdapter(); // Windows 8 startup // W Portable Class Library var adapter = ServiceBusAdapter.Current; byte[] signatureBytes = adapter.ComputeHmacSha256(issuerSecretBytes, Encoding.UTF8.GetBytes(token));
92
Kod specyficzny dla platformy
Abstrakcje Klasy abstrakcyjne Interfejsy Przekazywanie zależności z kodu aplikacji Kontener IoC Service locator / platform abstraction layer public class ServiceLocator { public static IFileStorage FileStorage { get; set; } public static IPhotoChooser PhotoChooser { get; set; } }
93
Dependency Injection - Unity
// 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());
94
Dependency Injection – c.d.
public class MyViewModel(IStateService stateService) { // ... } // Wewnątrz Portable Class Library // Widok bindujemy (np. w XAML) do ServiceLocator.MainViewModel public class ServiceLocator public static MyViewModel MainViewModel get // Automatyczne wstrzykiwanie zal. do konstruktora return container.Resolve<MyViewModel>();
95
Demo Windows Phone i Windows 8 + PCL – przykład zaawansowany
96
Inne platformy? Xamarin MvvmCross
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
97
Demo MVVMCross
98
Podsumowanie HTML 5 (+ PhoneGap) Windows Phone 8 i Windows 8
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
99
Zasoby MVVM IoC Other MVVM Light Toolkit portable fork MvvmCross
Autofac Ninject portable fork Microsoft.Composition (Lightweight MEF) Other Json.NET
100
Zasoby – c.d. MVVM Light toolkit (basics) MVVM Light toolkit (deep dive) Windows 8 and MVVM Light toolkit from-techdays-belgium-and-netherlands.aspx Caliburn.micro concepts
101
Zasoby – c.d. Daniel Plaisted’s blog
Portable Class Library MSDN documentation 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/hh 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
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.