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 Name = " LocationTracking " 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 MicroSDUż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 LoadFileAsync(string filename); } // W ViewModelu public void Save() { _fileStorage.SaveFileAsync(Filename, Contents); } public async void Load() { Contents = await _fileStorage.LoadFileAsync(Filename); }

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( new ContainerControlledLifetimeManager());

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