Transcript pptx
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 Windows Phone 8, Windows 8 – podobieństwa i różnice Architektura aplikacji - MVVM i Portable Class Libraries
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
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
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!
Demo
TypeScript
Strategie - HTML 5 i aplikacje mobilne
… Titanium (Appcelerator) Cross-kompilacja Frameworki Javascript JQueryMobile SenchaTouch Jo Propulsion … Apache Cordova (PhoneGap) AppMobi … Rozwiązania hybrydowe Mobilna strona Natywna platforma aplikacyjna Przeglądarka obsługująca HTML 5 OS platform
Demo
jQuery Mobile
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
PhoneGap i Windows Phone
Demo
PhoneGap i Windows Phone
Aplikacje natywne
Windows 8 – krótkie przypomnienie Windows Phone
Platforma Windows 8
C C++ XAML Communication & Data C# VB WinRT APIs Graphics & Media Application Model HTML / CSS JavaScript (Chakra) Devices & Printing
Demo
Windows 8 i Windows Phone 7
Windows Phone 8
Nowe telefony, nowe rozdzielczości, …
• wiele rdzeni procesora, • nowy procesor graficzny, • • nowoczesna architektura, karty MicroSD, • NFC, • … WVGA 800 x 480 15:9 WXGA 1280 x 768 15:9 720p 1280 x 720 16:9
WVGA
480x800 1.0 Scale 400 Logical 400 Physical 2 Logical 2 Physical 30 Logical 30Physical
WXGA
768x1280 1.6 Scale 400 Logical 640 Physical 2 Logical 3Physical ( Rounded) 30 Logical 48Physical
720p
720x1280 1.5 Scale 400 Logical 600 Physical 2 Logical 3 Physical 30 Logical 45Physical
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
• • • •
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 WP8.0 Games DirectX/Direct 3D & C++ WP8.0 XAML & C++ WP8.0 XAML & C#/VB with Direct3D Graphics WP7.1 XNA & C#/VB WP7.1 XAML & C#/VB WP8.0 XAML & C#/VB .NET API for Windows Phone Windows Phone Runtime Win32 & COM Managed Managed & Native Native
.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
…
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) 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.PersonalInformation
LockScreen,LockScreenManager Wszystkie i dodatki
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)
Co z aplikacjami na Windows Phone 7.x?
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
WP OS 7.1 app bez rekompilacji WP OS 8.0 app WP OS 8.0 app WP OS 7.1 app +Quirks WP 8.0 Runtime/ Libraries
Skąd wziąć narzędzia do programowania?
Twoje centrum dowodzenia aplikacjami
http://
dev.windowsphone.com
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.
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)
Lock the Screen na emulatorze
• Z klawiatury: • Dwa razy F12 • Simulation Dashboard
Symulacja sieci
• Dostępne w simulation dashboard • Testowanie dla różnych warunków sieci
3 6
Zrzuty ekranu
• Na emulatorze • Na urządzeniu • Przyciski Win + power
Co nowego w Windows Phone 8?
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
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
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
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
Włączanie Fast Application Resume
• • Ochrona interfejsu użytkownika Pewność, ze aplikacje będą działały prawidłowo • Nowy atrybut ActivationPolicy w DefaultTask < DefaultTask Name = " _default " ActivationPolicy="Resume" / > NavigationPage = " MainPage.xaml
"
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
LongListSelector
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.
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
Jak włączyć?
< DefaultTask Name = " _default " < BackgroundExecution > < ExecutionType BackgroundExecution > Name = " LocationTracking " DefaultTask > NavigationPage = " Views/Home.xaml
/> " >
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
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
Zestaw nowych launcherów
•
SaveAppointmentTask
•
ShareMediaTask
•
MapDownloaderTask
•
MapsTask
•
MapsDirectionsTask
Komendy głosowe i rozpoznawanie mowy
•
Voice Commands
przycisku Start umożliwia uruchomienie aplikacji, lub jej konkretnej funkcji, za pomocą głosu, po przytrzymaniu •
Speech Recognition + Text-to-Speech API
wspiera przekształcenie mowy w tekst i czytanie już zapisanego teksu
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”
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)
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
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
Deep linking - przykład
Peter Bergman Loved the Purple Onion
Bluetooth i NFC
•
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
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
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
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
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)
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
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
Tworzenie konta
Deployment – managed vs unmanaged
Feature
Enrollment method Policy management Number of enrollments App install method App inventory Silent app updates Unenroll
Managed
Settings applet + MDM Yes Limited to 1 MDM/company hub MDM MDM Remote and local
Unmanaged
Email/browser No Unlimited Email/browser/company hub No No No
Managed enrollment
Company Hub
Windows Phone i Windows 8
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
Przypadki duplikacji w API
• W kilku przypadkach, WinPRT API oferują podobne funkcjonalności do .NET API z WP 7.5, np.:
.NET API
System.IO.IsolatedStorage
System.NET.Sockets
System.Threading.ThreadPool
Microsoft.Devices.Sensors
Windows Phone Runtime API
Windows.Storage
Windows.Networking.Sockets
Windows.System.Threading.ThreadPool
Windows.Devices.Sensors
• 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
Demo
WinPRT i WinRT - podobieństwa
Wybrane różnice
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
Kontrolki XAML
Np. GridView, ListView Np. Panorama, Pivot Np. Grid, StackPanel, TextBox, ListBox, Button, itp.
Mapowanie kontrolek
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
Współdzielenie logiki – jak?
Brak binarnej kompatybilności między projektami Silverlight, Windows Phone, Windows 8, WPF Osobne typy class library
Trudności w utrzymaniu...
Portable Class Libraries
Jedno źródło Jeden projekt Jedne binaria Wiele platform!
Platform / feature matrix
Demo
Portable Class Library
Model-View-ViewModel
DataBinding Commands Messages View Service PropertyChanged Events
Architektura cross-platform
Windows Store App Windows Phone App Portable Class Library
Abstrakcja – interfejs
// W Portable Class Library public interface IFileStorage { Task SaveFileAsync(string filename, string contents); Task
Dodawanie plików jako link
Również z Partial Classes...
Kompilacja warunkowa
Nie w Portable Class Library W plikach XAML – nieobsługiwane Ostrożnie i z umiarem...
Demo
Portable Class Libraries i MVVM
Abstrakcja - klasa abstrakcyjna
public abstract class ServiceBusAdapter { public static ServiceBusAdapter Current { get; set; } } public abstract byte[] ComputeHmacSha256(byte[] secretKey, byte[] data);
// 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"; public override byte[] ComputeHmacSha256(byte[] secretKey, byte[] data) { var provider = MacAlgorithmProvider.OpenAlgorithm(HmacSha256AlgorithmName); //...
return hashed.ToArray(); } }
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));
Dependency Injection - Unity
// Rejestrowanie usługi – start aplikacji WP 7
_container.RegisterType
// Rejestrowanie usługi – start aplikacji Win 8
_container.RegisterType
// Rejestrowanie usługi – singleton
_container.RegisterType
Dependency Injection – c.d.
public class MyViewModel(IStateService stateService) { // ...
}
// Wewnątrz
{ { get {
Portable Class Library // Widok bindujemy (np. w XAML) do ServiceLocator.MainViewModel
public class ServiceLocator public static MyViewModel MainViewModel
// Automatyczne wstrzykiwanie zal. do konstruktora
return container.Resolve
Demo
Windows Phone i Windows 8 + PCL – przykład zaawansowany
Inne platformy?
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
Podsumowanie
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
Zasoby
MVVM MVVM Light Toolkit portable fork MvvmCross IoC Autofac Ninject portable fork Microsoft.Composition
(Lightweight MEF) Other Json.NET
Zasoby – c.d.
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.
Daniel Plaisted’s blog http://blogs.msdn.com/b/dsplaisted/archive/2012/08/27/how-to-make-portable-class-libraries-work-for-you.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