Silverlight 4 dla Windows Phone 7 Bartłomiej Zass ISV Developer Evangelist Microsoft Polska
Wybrane elementy Telefon – wstęp Marketplace Interfejs użytkownika Interakcja Nawigacja Tombstoning Akcelerometr Launchers & Choosers WebBrowser Usługi lokalizacyjne Powiadomienia push Integracja z OS Media Inne
Windows Phone 7 Całkiem nowy początek Inna grupa docelowa niż WM 6.x Konsument: wygoda, design, platforma ZUNE Windows Phone 7 vs Windows Embedded Handheld
Inny nie bez powodu Interfejs użytkownika Integracja z sieciami społecznościowymi Zupełnie nowe API Aplikacje użytkowe – Silverlight Gry – XNA (XBOX)
Metro
Metro w Windows Phone 7
Panorama Hub
Unifikacja sprzętu 800 lub 480 480 lub 320 Multimedia Rozdzielczość 480x800 QVGA 320x480 HVGA Multimedia Dokładna specyfikacja Akceleracja kodeków 800 lub 480 Ekr. pojemnościowy 4 lub więcej punktów Pamięć 256MB RAM lub więcej 8GB flash lub więcej Sensory A-GPS, Akcelerometr, Kompas, Światło, Czujnik zbliżeniowy GPU Akceleracja DirectX 9 Aparat 5 mega pixeli lub więcej 480 lub 320 Przyciski Start, Szukaj, Wstecz Radio FM
Interfejs telefonu Analogiczny do przeglądarki internetowej 3 przyciski Wstecz Start Wyszukiwanie
demo
Marketplace Sklep / katalog z aplikacjami, grami i muzyką Na każdym telefonie (domyślnie jako quickstart) Jedyna możliwość wgrania aplikacji Dobry pomysł na zarobek 70% zysków ze sprzedaży Globalny rynek iPhone’owi milionerzy = 1 USD * 100 000
Zasięg 30 rynków
Marketplace - warunki Rejestracja - 100 USD za rok Studenci 5 aplikacji bezpłatnych, kolejne 19,99 USD Model reklamowy Dowolna liczba aplikacji płatnych http://create.msdn.com Rejestracja i weryfikacja konta Możliwość przetestowania w biurze Microsoft lub na ITAD
Marketplace - cechy Codzienna, zlokalizowana promocja Trial API Różne modele biznesowe Paid, freemium, reklamy, bezpłatne Różne modele płatności Karta kredytowa, billing Automatyczne aktualizacje (push) Reguły (content policies)
Marketplace - cechy Miesięczna wypłata Proces rejestracji Potwierdzenie adresu e-mail Aktywacja konta – średnio 10 dni Wypłata – formularz W8B Certyfikacja – średnio 5 dni
Dystrybucja Dystrybucja beta Do wybranej grupy użytkowników (live ID) Deeplink przesyłany poprzez e-mail Okres beta – krótki, określony Wiele języków w jednym pliku XAP
Urządzenia deweloperskie Konieczne aktywne konto w Marketplace Max 3 telefony deweloperskie Studenci Max 1 telefon deweloperski Pełna aktywacja po zgłoszeniu aplikacji
Integracja z aplikacją MarketplaceDetailTask ContentType: Application | Music ContentID: null (detale aktualnej), lub app ID MarketplaceHubTask MarketplaceReviewTask MarketplaceSearchTask
demo
Silverlight dla Windows Phone Bazuje na Silverlight 3 (zmodyfikowany) Elementy Silverlight 4 Dodatkowe funkcjonalności Tylko out-of-browser (większe uprawnienia)
PhoneApplicationService App.xaml Zdarzenia globalne dla aplikacji Launching Closing Activated Deactivated
Capabilities WMAppManifest.xml Deklaracja zapotrzebowania na konkretną funkcję Bezpieczeństwo! Marketplace Informacje o aplikacji Ostrzeżenie podczas instalacji Ostrzeżenie, kiedy funkcja zostanie wywołana UnauthorizedException (brak API do sprawdzania)
Capabilities – c.d. Capability Klasa lub namespace, która jej wymaga ID_CAP_MEDIALIB MediaStreamSource, Microsoft.Devices.Radio, Microsoft.Xna.Framework.Media.MediaLibrary and MediaSource, Microsoft.Devices.MediaHistory ID_CAP_NETWORKING System.Net, Microsoft.Xna.Framework.GamerServices.GamerServicesComponent, WebBrowser class, Smooth Streaming Media Element (SSME) ID_CAP_PUSH_NOTIFICATION ID_CAP_SENSORS Microsoft.Devices.Sensors ID_CAP_MICROPHONE Microsoft.Xna.Framework.Audio.Microphone ID_CAP_PHONEDIALER Microsoft.Phone.Tasks ID_CAP_PUSH_NOTIFICATION Microsoft.Phone.Notification ID_CAP_WEBBROWSERCOMPONENT WebBrowser class ID_CAP_LOCATION System.Device.Location
Interfejs użytkownika Prosty i elegancki Ekran pojemnościowy (wielkość!) Skórki Ciemna Jasna (bateria!) Kolor akcentu - wiodący Automatyczne skinowanie kontrolek wbudowanych Możliwość nadpisania każdego elementu skórki
Themes (skórki) Domyślne zasoby globalne http://msdn.microsoft.com/en-us/library/ff769552(VS.92).aspx Projektowatnie interfejsu - wyświetlacz OLED (Organic Emitting Diode) Czerń – połowa mocy LCD Biel – trzykrotna moc LCD 30 klatek na sekundę
Kontrolki systemowe Menu „Application Bar” Maksymalnie 4 przyciski Menu – rzadziej używane zadania Możliwa przezroczystość System Tray (możliwość schowania)
Grafika - Silverlight Kontrolka Image Źródło BitmapImage JPEG i PNG (XNA dodatkowo GIF) Źródło Build action = Resource lub Content Internet URL BitmapImage new BitmapImage(URI) ImageOpened, ImageFailed, DownloadProgress Rozmiar aplikacji vs rozmiar zdjęć Camera chooser
Orientacja ekranu Możliwość obrócenia ekranu Obsługa automatyczna Akcelerometr Klawiaturka Obsługa automatyczna Własne zdarzenie (dodatkowe operacje)
Panorama
Pivot
Efekt Tilt Efekt „pływających” przycisków Dołączany jako Attached Property ButtonBase, ListBoxItem Najcześciej PhoneApplicationFrame Możliwe włączenie dla wybranego kontenera Właściwości IsEnabled SuppressTilt
demo
Interakcja TextBox zintegrowany z Software Input Scope Tekst, URL, liczba, czas, telefon, e-mail, hasło, chat Klawiatura - opcjonalnie
Touch w Silverlight TouchPanel.GetCapabilities IsConnected MaximumTouchCount TouchPanel.GetState() Niskopoziomowo – Touch.FrameReported GetTouchPoints GetPrimaryTouchPoint i args.SuspendMousePromotionUntilTouchUp() TouchPoint -> TouchDevice.DirectlyOver Zdarzenia Manipulation (max 2 punkty) ManipulationStarted, ManipulationDelta, ManipulationCompleted ManipulationDeltaEventArgs – Velocities, FinalVelocities LinearVelocity, ExpansionVelocity Dla kontrolki (sender) Dla kontenera (args.OriginalSource – Routed Events)
Gesty
Gesty Standardowe kontrolki automatycznie Silverlight Toolkit <Grid x:Name="LayoutRoot" Background="Transparent"> <toolkit:GestureService.GestureListener> <toolkit:GestureListener x:Name="gl" /> </toolkit:GestureService.GestureListener> </Grid> XNA Gestures ManipulationCompleted TouchPanel.ReadGesture();
demo
Nawigacja domyślnie w Silverlight Application UserControl Content Content Content
Silverlight 3 Navigation Application UserControl Content UserControl Frame Page 3 Page 1 Page 2 Application
? Windows Phone 7 Application Frame Page 3 Page 1 Page 2 UserControl
Nawigacja PhoneApplicationFrame, PhoneApplicationPage Przycisk wstecz Przełączanie między aplikacjami Możliwość nadpisania obsługi zdarzenia OnNavigating(ed)From, OnBackKeyPress e.Cancel NavigationService GoBack, CanGoBack NavigateTo GoForward – brak UriMapper
demo
lock screen Świat pełen przerwań… phone calls low battery App switch reminders App switch
Tombstoning Brak przetwarzania w tle Cykl życia aplikacji Długotrwałe obliczenia – chmura Aplikacja nigdy nie działa w tle – system ją zatrzymuje Cykl życia aplikacji Running Closing Deactivating Activating Stan aplikacji Stan wizualny – focus, scroll, itp.
Tombstoning Zamrażanie aplikacji Dostępne zdarzenia Launched (uruchomienie) Closed (przycisk back) Deactivated (przycisk start, telefon, sms, …) Activated (przycisk back po wyjściu z aplikacji) Debugowanie Ponownie F5 w ciągu 10 sekund
Przywracanie stanu PhoneApplicationPage Ustawienia pojedynczej strony OnNavigatedFrom OnNavigatingFrom OnNavigatedTo PhoneApplicationService.Current.State Dane tymczasowe (np. stan interfejsu użytkownika) Dictionary<string, object> Wyłącznie obiekty serializowalne Publiczny bezparametrowy konstruktor
Wyjątki PhotoChooserTask CameraCaptureTask MediaPlayerLauncher EmailAddressChooserTask PhoneNumberChooserTask Multiplayer Game Invite [games] Gamer You Card [games]
Isolated Storage Ustawienia globalne aplikacji IsolatedStorageSettings IsolatedStorageFile Wirtualne pliki przechowywane w pamięci flash Brak ograniczeń przestrzeni
demo
Akcelerometr +Y +X +Z Mierzy siłe przyłożoną do każdej osi -Z -X -Y Przynajmniej 1 sensor Grawitacja i inne źródła W planach kalibracja +X +Z -Y
Akcelerometr Microsoft.Devices.Sensors Wektor X, Y, Z (zasada prawej dłoni) Wartość - twierdzenie pitagorasa 1 = 1g (przyspieszenie ziemskie) Standardowa pozycja: [0, 0, -1] Możliwe odchylenie ok. 10% Accelerometer.ReadingChanged Dispatcher!
demo
Launchers MediaPlayerLauncher PhoneCallTask PhoneNumberChooserTask PhotoChooserTask SaveEmailAddressTask SavePhoneNumberTask SearchTask SMSComposeTask WebBrowserTask CameraCaptureTask EmailAddressChooserTask EmailComposeTask MarketplaceDetailTask MarketplaceHubTask MarketplaceReviewTask MarketplaceSearchTask
Choosers EmailAddressChooserTask CaptureCameraTask PhoneNumberChooserTask PhotoChooserTask
demo
Kontrolka Web Browser Zdalna i lokalna zawartość Obsługa gestów – pan, double tap, pinch Transformacje Możliwość interakcji z JavaScript Prywatność Skrypt domyślnie wyłączony Ciasteczka i cache wyizolowane
Silverlight -> JS javascript string out = wb.InvokeScript("runScriptStuff", arg1, arg2); javascript function runScriptStuff(arg1, arg2) { return “awesome”; }
JS -> Silverlight javascript void wb_ScriptNotify(object s, NotifyEventArgs e) { string return = e.Value; } javascript window.external.Notify(string);
demo
Lokalizacja GPS WiFi Location services Nadajniki BTS + Dokładność - Energia - Szybkość - Zasięg Nadajniki BTS - Dokładność + Energia + Szybkość - Zasięg WiFi +/- Dokładność +/- Energia +/- Szybkość +/- Miasta Location services
Usługi lokalizacyjne Analogiczne API do Windows 7 Kompromis pomiędzy dokładnością, czasem i energią Jednorodne API pomiędzy urządzeniami
A-GPS Assisted GPS System.Device.Location GeoCoordinateWatcher GeoPostitionAccuracy: High | Default PositionChanged PositionChanged udostępnia e.Position.Location Longitude (-180 – 180), Latitude (-90 - 90) VerticalAccuracy, HorizontalAccuracy - dokładność Speed - szybkość Course (0-360) - kierunek Altitude – wysokość GeoCoordinate -> GetDistanceTo
Bing Maps https://www.bingmapsportal.com/ Bezpłatne dla rozwiązań mobilnych Usługi (SOAP, JSON, REST …) Geocode / ReverseGeocode – adresy Search – np. restaurant in Warsaw Imagery Service – grafika Route – trasy Kontrolka Bing Maps dla WP7
demo
Notyfikacje push Komunikacja inicjowana przez serwer Analogiczne do Exchange Push Przetwarzanie po stronie serwera Oszczędza baterię i poprawia użyteczność
14 15 Typy notyfikacji New photos online! Seattle, WA: Sunny and 85 degrees
Notyfikacje push Data to tile Tile Push client Data to toast Toast Open push channel Data to App Return URI App Send URI to server Send push data to client Your service Push service Event Send push data to URI
Push HttpNotificationChannel Jeden dla aplikacji Konieczne uzupełnienie Publisher w WMAppManifest
Usługa push - odpowiedzi Status notyfikacji Received QueueFull Suppressed Dropped Status urządzenia Connected Temporarily Disconnected Status subskrybcji Active, Expired
demo
Kafelki Notyfikacje push ShellTileSchedule Aktualizacja ikony aplikacji Minimum 1h Jednorazowo lub cyklicznie
Integracja z OS Launchers („uruchom i zapomnij”) Choosers („okna dialogowe”) MediaLibrary MediaHistoryTask Pictures Share Extras
demo
Wibracja Uruchamia wibrację na dany okres czasu Przywołanie uwagi użytkownika Powiadomienia o zmianach Itp.. VibrateController vc = VibrateController.Default; vc.Start(TimeSpan.FromSeconds(3));
Media Obsługa mediów Ograniczenia MediaElement Dekodowanie sprzętowe PlayReady DRM Ograniczenia MediaElement Tylko jeden Brak VideoBrush (przysłanianie, itp.) Radio FM
Integracja z XNA Dostępne wszystkie assembly oprócz: Microsoft.Xna.Framework.Game Microsoft.Xna.Framework.Graphics SoundEffect Większa wydajność niż MediaElement SoundEffect se = SoundEffect.FromStream(TitleContainer.OpenStream("hand-clap-1.wav")); soundEffectInstance = se.CreateInstance(); soundEffectInstance.IsLooped = true; soundEffectInstance.Play();
Integracja z XNA (2) Mikrofon RAW PCM WAV DynamicSoundEffectInstance – dźwięki dynamicznie MediaLibrary Obrazy i muzyka (bez DRM) Także zapis zdjęć (muzyki nie) Song (Song.FromUri(„”), MediaPlayer.Play(song) MathHelper, Vector, itp. GameServices
Integracja z XNA (3) Gesty – Microsoft.Xna.Framework.Input.Touch <Grid x:Name="ContentPanel" Grid.Row="1" ManipulationCompleted="ContentPanel_ManipulationCompleted"> TouchPanel.EnabledGestures = GestureType.Pinch | GestureType.Hold | GestureType.DoubleTap; private void ContentPanel_ManipulationCompleted(object sender, ManipulationCompletedEventArgs e) { while (TouchPanel.IsGestureAvailable) { GestureSample gesture = TouchPanel.ReadGesture(); if (gesture.GestureType == GestureType.Pinch) { // Do something with pinch } }
demo
Inne Blokada ekranu Menu kontekstowe
demo
3/31/2017 12:36 AM © 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista 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.