Cyfroteka.pl

klikaj i czytaj online

Cyfro
Czytomierz
00326 010464 10727275 na godz. na dobę w sumie
Xamarin. Tworzenie aplikacji cross-platform. Receptury - ebook/pdf
Xamarin. Tworzenie aplikacji cross-platform. Receptury - ebook/pdf
Autor: Liczba stron: 328
Wydawca: Helion Język publikacji: polski
ISBN: 978-83-283-3538-7 Data wydania:
Lektor:
Kategoria: ebooki >> komputery i informatyka >> programowanie >> c# - programowanie
Porównaj ceny (książka, ebook (-20%), audiobook).

Platforma Xamarin.Forms jest wszechstronnym narzędziem dla nowoczesnych programistów. Umożliwia budowanie aplikacji w języku C#, włączając w to interfejsy graficzne dla urządzeń macOS, Android i Windows Phone. Ułatwia budowanie niestandardowych widoków, układów i kontrolek. Xamarin pozwala również na tworzenie własnych uniwersalnych wtyczek i udostępnianie ich w systemie NuGet. Obecnie Xamarin.Forms zdobywa coraz większą popularność. W wielu dużych firmach stanowi standard budowy oprogramowania dla urządzeń mobilnych.

W tej książce opisano zasady programowania aspektowego przy tworzeniu architektury aplikacji, która działa efektywnie na każdej platformie i korzysta z wbudowanego lokalizatora usług. Przedstawiono dobre praktyki tworzenia i dostosowywania kontrolek Xamarin.Forms ListView, grupowania elementów, list szybkiego dostępu i niestandardowych komórek. Opisano również procedury testowania interfejsu użytkownika, zarówno lokalnie, jak i za pomocą Xamarin Test Cloud. Czytelnik dowie się również, w jaki sposób monitorować aplikację za pomocą usługi Xamarin Insights, a także jak przygotować aplikację do udostępnienia i umieścić ją w sklepie internetowym.

W książce między innymi:

Xamarin.Forms — twórz aplikacje idealne dla urządzeń mobilnych!


George Taskos programuje od dzieciństwa. W 2005 roku zajął się profesjonalnym tworzeniem aplikacji. Tworzył wieloserwerowe aplikacje oparte na różnych technologiach, m.in. Windows Forms, WPF, ASP.NET MVC, SOAP i REST. Od kilku lat rozwija aplikacje dla systemów iOS i Android, wykorzystując technologię Xamarin Cross Platform Mobile. W 2009 roku Taskos uzyskał tytuły Microsoft Certified Solutions Developer i Xamarin Certified Mobile Developer. Mieszka w Nowym Jorku. W wolnym czasie angażuje się we wspieranie rozwoju nowych firm.

Znajdź podobne książki Ostatnio czytane w tej kategorii

Darmowy fragment publikacji:

Tytuł oryginału: Xamarin Cross-Platform Development Cookbook Tłumaczenie: Andrzej Watrak ISBN: 978-83-283-3537-0 Copyright © Packt Publishing 2016 First published in the English language under the title Xamarin Cross-Platform Development Cookbook - (9781785880537) Polish edition copyright © 2017 by Helion SA. All rights reserved. All rights reserved. No part of this book may be reproduced or transmitted in any form or by any means, electronic or mechanical, including photocopying, recording or by any information storage retrieval system, without permission from the Publisher. Wszelkie prawa zastrzeżone. Nieautoryzowane rozpowszechnianie całości lub fragmentu niniejszej publikacji w jakiejkolwiek postaci jest zabronione. Wykonywanie kopii metodą kserograficzną, fotograficzną, a także kopiowanie książki na nośniku filmowym, magnetycznym lub innym powoduje naruszenie praw autorskich niniejszej publikacji. Wszystkie znaki występujące w tekście są zastrzeżonymi znakami firmowymi bądź towarowymi ich właścicieli. Autor oraz Wydawnictwo HELION dołożyli wszelkich starań, by zawarte w tej książce informacje były kompletne i rzetelne. Nie biorą jednak żadnej odpowiedzialności ani za ich wykorzystanie, ani za związane z tym ewentualne naruszenie praw patentowych lub autorskich. Autor oraz Wydawnictwo HELION nie ponoszą również żadnej odpowiedzialności za ewentualne szkody wynikłe z wykorzystania informacji zawartych w książce. Wydawnictwo HELION ul. Kościuszki 1c, 44-100 GLIWICE tel. 32 231 22 19, 32 230 98 63 e-mail: helion@helion.pl WWW: http://helion.pl (księgarnia internetowa, katalog książek) Pliki z przykładami omawianymi w książce można znaleźć pod adresem: ftp://ftp.helion.pl/przyklady/xamari.zip Drogi Czytelniku! Jeżeli chcesz ocenić tę książkę, zajrzyj pod adres http://helion.pl/user/opinie/xamari Możesz tam wpisać swoje uwagi, spostrzeżenia, recenzję. Printed in Poland. • Kup książkę • Poleć książkę • Oceń książkę • Księgarnia internetowa • Lubię to! » Nasza społeczność Spis tre(cid:258)ci O autorze O korektorze merytorycznym Wst(cid:218)p Rozdzia(cid:239) 1. Jeden pier(cid:258)cie(cid:241), by rz(cid:200)dzi(cid:202) wszystkimi Wprowadzenie Tworzenie uniwersalnego rozwi(cid:200)zania Tworzenie uniwersalnego ekranu logowania Korzystanie ze wspólnych funkcjonalno(cid:258)ci systemów Uwierzytelnianie u(cid:285)ytkowników za pomoc(cid:200) serwisów Facebook i Google Rozdzia(cid:239) 2. Raz deklaruj, wsz(cid:218)dzie wizualizuj Wprowadzenie Tworzenie uniwersalnej aplikacji z interfejsem zak(cid:239)adkowym Kodowanie bloków funkcjonalnych interfejsu u(cid:285)ytkownika i wyzwalaczy Umieszczanie w pliku XAML warto(cid:258)ci w(cid:239)a(cid:258)ciwych dla danego systemu Stosowanie w(cid:239)asnych mechanizmów do zmiany wygl(cid:200)du kontrolek Rozdzia(cid:239) 3. Natywne kontrolki urz(cid:200)dze(cid:241) i ich funkcjonowanie Wprowadzenie Wy(cid:258)wietlanie natywnych stron za pomoc(cid:200) wizualizatorów Obs(cid:239)uga gestów na ró(cid:285)nych urz(cid:200)dzeniach Wykonywanie zdj(cid:218)(cid:202) w aplikacji za pomoc(cid:200) natywnej kontrolki aparatu fotograficznego Rozdzia(cid:239) 4. Ró(cid:285)ne pojazdy, ten sam silnik Wprowadzenie Sposoby tworzenia uniwersalnego kodu dla ró(cid:285)nych systemów Korzystanie z lokalizatora zale(cid:285)no(cid:258)ci 9 11 13 19 19 20 29 35 43 53 53 54 61 70 75 81 81 82 91 95 109 109 110 118 Poleć książkęKup książkę Spis tre(cid:286)ci Korzystanie z zewn(cid:218)trznego kontenera wstrzykiwanych zale(cid:285)no(cid:258)ci Wzorzec projektowy MVVM aplikacji Korzystanie z komunikatora zdarze(cid:241) Globalizowanie aplikacji Rozdzia(cid:239) 5. Hej, gdzie s(cid:200) moje dane? Wprowadzenie Kodowanie uniwersalnego dost(cid:218)pu do bazy danych SQLite Wykonywanie operacji CRUD na bazie SQLite Korzystanie z internetowych us(cid:239)ug REST Korzystanie z natywnych bibliotek REST i wydajne wysy(cid:239)anie zapyta(cid:241) przez sie(cid:202) Rozdzia(cid:239) 6. Jeden za wszystkich, wszyscy za jednego Wprowadzenie Tworzenie uniwersalnych wtyczek Robienie zdj(cid:218)(cid:202) i nagrywanie filmów Odczytywanie danych GPS Wy(cid:258)wietlanie i wysy(cid:239)anie lokalnych powiadomie(cid:241) Rozdzia(cid:239) 7. Wi(cid:200)zanie danych Wprowadzenie Wi(cid:200)zanie danych w kodzie C# Wi(cid:200)zanie danych w kodzie XAML Dwukierunkowe wi(cid:200)zanie danych Korzystanie z konwerterów warto(cid:258)ci Rozdzia(cid:239) 8. Lista do wgl(cid:200)du Wprowadzenie Wy(cid:258)wietlanie kolekcji danych i zaznaczanie wiersza listy Tworzenie, usuwanie i od(cid:258)wie(cid:285)anie elementów listy Dostosowywanie szablonu wiersza Grupowanie elementów i tworzenie listy nawigacyjnej Rozdzia(cid:239) 9. Gesty i animacje Wprowadzenie Definiowanie detektorów gestów w j(cid:218)zyku XAML Obs(cid:239)uga gestów za pomoc(cid:200) natywnych wizualizatorów Definiowanie uniwersalnych animacji Rozdzia(cid:239) 10. Koniecznie przetestuj aplikacj(cid:218) Wprowadzenie Definiowanie testów jednostkowych Definiowanie testów akceptacyjnych za pomoc(cid:200) platformy Xamarin.UITest Testowanie interfejsu u(cid:285)ytkownika za pomoc(cid:200) terminala Xamarin.UITest REPL Przesy(cid:239)anie definicji testów do us(cid:239)ugi Xamarin Test Cloud i ich uruchamianie 4 122 127 136 138 147 147 148 155 161 168 177 177 178 185 190 195 201 201 202 204 206 211 217 217 218 222 228 233 239 239 240 242 249 255 255 256 262 269 279 Poleć książkęKup książkę Spis tre(cid:286)ci Rozdzia(cid:239) 11. Trzy, dwa, jeden — start i kontrola Wprowadzenie Korzystanie z us(cid:239)ugi Xamarin Insights Publikowanie aplikacji dla systemu iOS Publikowanie aplikacji dla systemu Android Publikowanie aplikacji dla Windows Phone Skorowidz 291 291 292 302 307 316 321 5 Poleć książkęKup książkę Spis tre(cid:286)ci 6 Poleć książkęKup książkę 1 Jeden pier(cid:258)cie(cid:241), by rz(cid:200)dzi(cid:202) wszystkimi W tym rozdziale opisane s(cid:200) nast(cid:218)puj(cid:200)ce procedury: (cid:81) tworzenie uniwersalnego rozwi(cid:200)zania (cid:81) tworzenie uniwersalnego ekranu logowania (cid:81) korzystanie ze wspólnych funkcjonalno(cid:258)ci systemów (cid:81) uwierzytelnianie u(cid:285)ytkowników za pomoc(cid:200) serwisów Facebook i Google Wprowadzenie Xamarin.Forms jest platform(cid:200) daj(cid:200)c(cid:200) mo(cid:285)liwo(cid:258)(cid:202) tworzenia nie tylko wspó(cid:239)dzielonych modeli, algorytmów i procedur dost(cid:218)pu do danych, jak w tradycyjnych rozwi(cid:200)zaniach opartych na platformie Xamarin, ale równie(cid:285) uniwersalnych interfejsów u(cid:285)ytkownika, wspólnych dla urz(cid:200)- dze(cid:241) z systemami iOS, Android i Windows Phone. Dzi(cid:218)ki Xamarin.Forms mo(cid:285)na szybko i (cid:239)atwo tworzy(cid:202) efektowne aplikacje i narz(cid:218)dzia do przetwarzania danych. Realizacja tych celów jest mo(cid:285)liwa, poniewa(cid:285) platforma Xamarin wykorzystuje supernowo- czesny j(cid:218)zyk C#, si(cid:239)(cid:218) bibliotek .NET Base Class Libraries (BCL) obs(cid:239)uguj(cid:200)cych natywne interfejsy API oraz dwa doskona(cid:239)e (cid:258)rodowiska programistyczne: Xamarin Studio i Microsoft Visual Studio. Pami(cid:218)taj jednak, (cid:285)e do tworzenia i uruchamiania aplikacji dla iOS za pomoc(cid:200) systemu Xamarin Build Host niezb(cid:218)dny jest komputer Mac pod(cid:239)(cid:200)czony do sieci i dzia(cid:239)aj(cid:200)cy jako serwer. Ta ksi(cid:200)(cid:285)ka zawiera praktyczne przepisy, rozwi(cid:200)zania i instrukcje, opisuj(cid:200)ce krok po kroku two- rzenie profesjonalnych, uniwersalnych aplikacji. Dowiesz si(cid:218) z niej, jak wed(cid:239)ug najlepszych Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury wzorców i praktyk budowa(cid:202) interfejsy u(cid:285)ytkownika wspólne dla ró(cid:285)nych urz(cid:200)dze(cid:241), dostosowy- wa(cid:202) warstwy i widoki oraz wstrzykiwa(cid:202) implementacje charakterystyczne dla poszczególnych typów urz(cid:200)dze(cid:241). W tym rozdziale szczegó(cid:239)owo opisuj(cid:218), jak tworzy si(cid:218) uniwersalne rozwi(cid:200)zanie, definiuje ekran logowania, zapisuje dane na ró(cid:285)nych urz(cid:200)dzeniach i wykorzystuje komponent Xamarin.Auth umo(cid:285)liwiaj(cid:200)cy logowanie si(cid:218) do aplikacji za pomoc(cid:200) serwisów Facebook i Google. (cid:165)wietnie! To jest w(cid:239)a(cid:258)nie to, co jest potrzebne do tworzenia aplikacji z prawdziwego zdarzenia. Tworzenie uniwersalnego rozwi(cid:200)zania Pierwsze kroki z platform(cid:200) Xamarin.Forms s(cid:200) bardzo proste. Program instalacyjny wszystko konfiguruje, (cid:258)rodowisko IDE tworzy projekt i dzia(cid:239)aj(cid:200)ca aplikacja jest gotowa w ci(cid:200)gu kilku minut! Zaczynajmy! Przygotuj si(cid:218) Zanim zaczniesz tworzy(cid:202) uniwersaln(cid:200) aplikacj(cid:218), musisz przygotowa(cid:202) niezb(cid:218)dne narz(cid:218)dzia. Wy- starczy do tego celu u(cid:285)y(cid:202) tylko jednego programu instalacyjnego, pobranego ze strony Xamarin. Wykonaj nast(cid:218)puj(cid:200)ce kroki: 1. Otwórz stron(cid:218) http://xamarin.com/download. 20 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi 2. Wprowad(cid:283) dane niezb(cid:218)dne do rejestracji w systemie. 3. Kliknij odno(cid:258)nik Download Xamarin Studio Community (pobierz (cid:258)rodowisko Xamarin Studio Community). 4. Po pobraniu pliku instalacyjnego uruchom go i post(cid:218)puj wed(cid:239)ug pojawiaj(cid:200)cych si(cid:218) wskazówek. W trakcie instalacji program pobierze i zainstaluje wszystkie potrzebne komponenty. Po zako(cid:241)czonej instalacji b(cid:218)dzie dost(cid:218)pne (cid:258)rodowisko IDE Xamarin Studio, przeznaczone do tworzenia uniwersalnych aplikacji: Jak to zrobi(cid:202)? Tworzenie rozwi(cid:200)zania opartego na platformie Xamarin.Forms, wykorzystuj(cid:200)cego szablony do- st(cid:218)pne w (cid:258)rodowiskach Xamarin Studio i Visual Studio, jest proste. W zale(cid:285)no(cid:258)ci od (cid:258)rodowiska dost(cid:218)pne s(cid:200) trzy (Xamarin Studio dla Windows) lub cztery (Xamarin Studio dla iOS i Visual Studio) wzorcowe projekty. Oczywi(cid:258)cie tworzone rozwi(cid:200)zanie mo(cid:285)esz otworzy(cid:202) w dowolnym (cid:258)rodowisku i w trakcie programowania dodawa(cid:202) do niego kolejne projekty. W tej cz(cid:218)(cid:258)ci rozdzia(cid:239)u utworzysz rozwi(cid:200)zanie oparte na pustym szablonie, dost(cid:218)pnym w (cid:258)rodowisku Xamarin Studio dla iOS, a nast(cid:218)pnie w (cid:258)rodowisku Visual Studio dodasz do niego projekt dla systemu Windows Phone. 21 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Uruchom (cid:258)rodowisko Xamarin Studio i kliknij polecenie menu Plik/Nowe rozwi(cid:200)zanie. W oknie, które si(cid:218) pojawi, w sekcji Multiplatform kliknij opcj(cid:218) Aplikacja. W (cid:258)rodkowej cz(cid:218)(cid:258)ci okna pojawi si(cid:218) kilka szablonów aplikacji, jak zrzucie: Kliknij opcj(cid:218) Forms App, a nast(cid:218)pnie przycisk Dalej. Pojawi si(cid:218) okno z polem App Name (nazwa aplikacji) do wpisania nazwy tworzonej aplikacji oraz polem Organization Identifier (identyfikator organizacji) do wprowadzenia nazwy pakietu (package) w systemie Android lub paczki (bundle) w systemie iOS. Docelowy system mo(cid:285)esz wybra(cid:202) za pomoc(cid:200) opcji Target Platforms (docelowe systemy). Nast(cid:218)pna opcja, Shareed Code (wspó(cid:239)dzielony kod), jest wykorzystywana w przypadku zastoso- wania w aplikacji biblioteki przeno(cid:258)nych klas (Portable Class Library) lub biblioteki wspó(cid:239)dzie- lonej (Shared Library). Wybranie opcji Shared Library powoduje utworzenie projektu wykorzy- stuj(cid:200)cego dyrektywy kompilacji warunkowej, w którym biblioteki s(cid:200) umieszczane w g(cid:239)ównym pliku binarnym. Natomiast opcja Portable Class Library umo(cid:285)liwia wybór docelowego profilu aplikacji i rozpowszechnianie jej w serwisach NuGet lub Xamarin Component Store. W rozwi(cid:200)- zaniach opisanych w tej ksi(cid:200)(cid:285)ce stosowana jest tylko ta druga opcja wraz ze zwi(cid:200)zanymi z ni(cid:200) wzorcami i praktykami. Wybierz opcje jak na drugim zrzucie na nast(cid:218)pnej stronie i kliknij przycisk Dalej. W nast(cid:218)pnym oknie w polu Nazwa projektu wpisz tekst, który b(cid:218)dzie wykorzystywany do tworzenia nazw projektów w formacie [NazwaProjektu].[System] dla poszczególnych systemów. W polu Nazwa rozwi(cid:200)zania wpisz nazw(cid:218) rozwi(cid:200)zania, jak na kolejnym zrzucie. W polu Lokalizacja mo(cid:285)esz wskaza(cid:202) katalog, w którym zostanie zapisane rozwi(cid:200)zanie, a za pomoc(cid:200) opcji Kontrola wersji wybra(cid:202) mo(cid:285)liwo(cid:258)(cid:202) korzystania z systemu kontroli wersji Git. 22 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi 23 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Zaznacz opcj(cid:218) Xamarin Test Cloud i kliknij przycisk Utwórz. Zwró(cid:202) uwag(cid:218), (cid:285)e nowe rozwi(cid:200)zanie sk(cid:239)ada si(cid:218) z czterech projektów. W rozdziale 10., „Koniecznie przetestuj aplikacj(cid:218)”, dowiesz si(cid:218), jak tworzy(cid:202) testy rozwi(cid:200)zania. Ostatni projekt jest dodawany tylko wtedy, gdy rozwi(cid:200)zanie jest tworzone w (cid:258)rodowisku Xamarin Studio. Teraz w górnej cz(cid:218)(cid:258)ci okna wybierz symulator telefonu iPhone i kliknij przycisk odtwarzania. Uruchomi si(cid:218) symulator, a w nim Twoja aplikacja z komunikatem Welcome to Xamarin Forms! (Witaj w Xamarin Forms!). Gratulacje! Podobn(cid:200) operacj(cid:218) mo(cid:285)esz wykona(cid:202) dla systemu Android, klikaj(cid:200)c prawym przyciskiem myszy projekt MojaAplikacja.droid i wybieraj(cid:200)c opcj(cid:218) Ustaw jako projekt startowy. Do uruchamiania projektów dla systemu Android mo(cid:285)esz wykorzysta(cid:202) symulator Google Xamarin Android Player, dost(cid:218)pny na stronie https://xamarin.com/android-player, który moim zdaniem jest bardziej efektywny i szybszy. Kliknij przycisk odtwarzania i zobacz ten sam komunikat w swoim ulubionym symulatorze. (cid:165)wietnie! Wystarczy(cid:239)o kilka razy klikn(cid:200)(cid:202), aby otrzyma(cid:202) aplikacj(cid:218) dla systemów iOS i Android! Zanim dok(cid:239)adniej poznasz struktur(cid:218) projektu, przejd(cid:283) do (cid:258)rodowiska Visual Studio i dodaj do rozwi(cid:200)zania projekt Windows Phone. Wykonaj w tym celu nast(cid:218)puj(cid:200)ce czynno(cid:258)ci: 1. Otwórz (cid:258)rodowisko Visual Studio, kliknij opcj(cid:218) menu File/Open/Project/Solution (plik/otwórz/projekt/rozwi(cid:200)zanie) i wybierz plik rozwi(cid:200)zania, w tym przypadku MojaAplikacja.sln. 2. W panelu Solution Explorer (eksplorator rozwi(cid:200)zania) kliknij prawym przyciskiem myszy nazw(cid:218) rozwi(cid:200)zania i z podr(cid:218)cznego menu wybierz Add/New Project (dodaj/nowy projekt). 3. W panelu po lewej stronie kliknij sekcj(cid:218) Visual C#/Windows/Windows 8/Windows Phone, w (cid:258)rodkowej cz(cid:218)(cid:258)ci kliknij pozycj(cid:218) Blank App (Windows Phone Silverlight), a nast(cid:218)pnie w polu Name (nazwa) wpisz nazw(cid:218) projektu. Aby zachowa(cid:202) przyj(cid:218)t(cid:200) konwencj(cid:218) nazw, wpisz MojaAplikacja.WinPhone i kliknij przycisk OK (zobacz zrzut na nast(cid:218)pnej stronie). 4. W nast(cid:218)pnym oknie, które si(cid:218) pojawi, wybierz opcj(cid:218) Windows Phone 8.0 lub Windows Phone 8.1. Voilà! Do rozwi(cid:200)zania doda(cid:239)e(cid:258) projekt dla kolejnego urz(cid:200)dzenia. Jednak brakuje w nim kilku elementów, warunkuj(cid:200)cych korzystanie z platformy Xamarin.Forms. Musisz jeszcze doda(cid:202) niezb(cid:218)dne pakiety i biblioteki oraz dokona(cid:202) niewielkich modyfikacji w kodzie startowym aplikacji. 24 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi 5. Kliknij prawym przyciskiem myszy nazw(cid:218) utworzonego przed chwil(cid:200) projektu MojaAplikacja.WinPhone i wybierz polecenie Manage NuGet Packages (zarz(cid:200)dzaj pakietami NuGet). 6. Kliknij odno(cid:258)nik Browse (przegl(cid:200)daj), w polu wyszukiwania wpisz xamarin.forms. Na li(cid:258)cie znalezionych pakietów kliknij Xamarin.Forms, a nast(cid:218)pnie przycisk Install (zainstaluj), aby doda(cid:202) pakiet do projektu (zobacz pierwszy zrzut na nast(cid:218)pnej stronie). 7. Do projektu musisz jeszcze doda(cid:202) odwo(cid:239)anie do biblioteki PCL. W tym celu kliknij prawym przyciskiem myszy sekcj(cid:218) MojaAplikacja.WinPhone/References i wybierz polecenie Add Reference (dodaj odwo(cid:239)anie). W panelu po lewej stronie kliknij sekcj(cid:218) Projects/Solution (projekty/rozwi(cid:200)zania). W (cid:258)rodkowym panelu zaznacz pole wyboru w wierszu MojaAplikacja (zobacz drugi zrzut na nast(cid:218)pnej stronie). Analogicznie kliknij sekcj(cid:218) Assemblies/Extensions (modu(cid:239)y/rozszerzenia) i zaznacz modu(cid:239) System.Windows.Interactivity. Na koniec kliknij OK. 8. Prawie gotowe. Teraz musisz jeszcze wprowadzi(cid:202) zmiany w pliku XAML g(cid:239)ównej strony, aby przekszta(cid:239)ci(cid:202) projekt w aplikacj(cid:218) opart(cid:200) na Xamarin.Forms. Kliknij dwukrotnie plik MojaAplikacja.WinPhone/MainPage.xaml i zmie(cid:241) znacznik phone:PhoneApplicationPage na phone:FormsApplicationPage, jak na nast(cid:218)pnym zrzucie. 25 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury 26 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi 9. Oprócz tego musisz jeszcze zmieni(cid:202) przestrze(cid:241) nazw (nie jest to jednak konieczne, je(cid:285)eli korzystasz z jakiego(cid:258) pomys(cid:239)owego narz(cid:218)dzia, na przyk(cid:239)ad ReSharper, które wykona t(cid:218) operacj(cid:218) za Ciebie). Odszukaj wiersz rozpoczynaj(cid:200)cy si(cid:218) od xmlns:phone i zast(cid:200)p go poni(cid:285)szym kodem. Upewnij si(cid:218), (cid:285)e listing po zmianach wygl(cid:200)da jak na zrzucie. xmlns:phone= clr-namespace:Xamarin.Forms.Platform.WinPhone; (cid:180)assembly=Xamarin.Forms.Platform.WP8 10. Teraz otwórz plik MainPage.xaml.cs i zmie(cid:241) w nim odwo(cid:239)anie do klasy rodzicielskiej PhoneApplicationPage na FormsApplicationPage. Oprócz tego usu(cid:241) wszystkie istniej(cid:200)ce instrukcje using i wpisz dwie inne, jak na nast(cid:218)pnym zrzucie. Na koniec dopisz kod pokazany w wierszach 10 i 11: 11. Kliknij prawym przyciskiem myszy projekt MojaAplikacja.WinPhone, wybierz opcj(cid:218) Set as Start Up Project (ustaw jako projekt startowy), a nast(cid:218)pnie naci(cid:258)nij klawisz F5 lub kliknij opcj(cid:218) menu Debug/Start Debugging (debugowanie/rozpocznij debugowanie). 27 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Gratulacje! Utworzy(cid:239)e(cid:258) rozwi(cid:200)zanie z(cid:239)o(cid:285)one z trzech projektów, przeznaczonych dla poszcze- gólnych systemów (iOS, Android i Windows Phone), oraz z biblioteki PCL. Pami(cid:218)taj, (cid:285)e projekt dla Windows Phone jest aktywny tylko w (cid:258)rodowisku Visual Studio. Jak to dzia(cid:239)a? Utworzy(cid:239)e(cid:258) wi(cid:218)c trzy klasyczne natywne aplikacje, jak równie(cid:285) wspó(cid:239)dzielony kod. (cid:165)wietnie! Przyjrzyj si(cid:218) temu oto schematowi architektury platformy Xamarin.Forms, odzwierciedlaj(cid:200)- cemu utworzon(cid:200) w(cid:239)a(cid:258)nie aplikacj(cid:218): Na najwy(cid:285)szym poziomie architektury widniej(cid:200) trzy projekty charakterystyczne dla poszczegól- nych systemów. Poni(cid:285)ej znajduje si(cid:218) poziom wspó(cid:239)dzielonego kodu C# interfejsu u(cid:285)ytkownika, a pod nim warstwa wspó(cid:239)dzielonego kodu C# aplikacji. U(cid:285)ywaj(cid:200)c platformy Xamarin.Forms, interfejs u(cid:285)ytkownika wykorzystuj(cid:200)cy wspó(cid:239)dzielone kon- trolki, wy(cid:258)wietlany przez natywne mechanizmy, w poszczególnych systemach definiuje si(cid:218) tylko raz. W ka(cid:285)dym systemie zawarty jest natywny mechanizm wy(cid:258)wietlaj(cid:200)cy ka(cid:285)d(cid:200) wspó(cid:239)dzielo- n(cid:200) kontrolk(cid:218). Gdy umie(cid:258)cisz w interfejsie etykiet(cid:218) (Label), wtedy mechanizm dost(cid:218)pny w iOS przekszta(cid:239)ci j(cid:200) w kontrolk(cid:218) UILabel, w Androidzie w TextView, a w Windows Phone w TextBlock. Rozwi(cid:241) g(cid:239)ówny projekt MojaAplikacja (Portable), a nast(cid:218)pnie References. Na li(cid:258)cie znajdziesz mi(cid:218)dzy innymi dwie biblioteki: Xamarin.Forms.Core i Xamarin.Forms.Xaml. Pierwsza zawiera kod g(cid:239)ównego algorytmu platformy Xamarin.Forms, a druga s(cid:239)u(cid:285)y do przetwarzania kodu XAML, szczegó(cid:239)owo opisanego w rozdziale 2., „Raz deklaruj, wsz(cid:218)dzie wizualizuj”. Teraz przejrzyj projekty dla poszczególnych systemów. Najpierw zajmij si(cid:218) Androidem. Rozwi(cid:241) sekcj(cid:218) MojaAplikacja.Droid/References. Znajdziesz w niej mi(cid:218)dzy innymi wspomniane wcze(cid:258)niej biblioteki Xamarin.Forms.Core i Xamarin.Forms.Xaml oraz dodatkowo Xamarin.Forms.Platform. Android. Ta ostatnia jest bibliotek(cid:200) charakterystyczn(cid:200) dla systemu Android. Zdefiniowane s(cid:200) w niej wszystkie mechanizmy wy(cid:258)wietlaj(cid:200)ce tre(cid:258)(cid:202) na ekranie. Jej zadaniem jest kojarzenie ogólnych klas interfejsu u(cid:285)ytkownika z klasami typowymi dla Androida. Ta sama zasada obowi(cid:200)zuje w projekcie na iOS. Charakterystyczna dla niego biblioteka nosi nazw(cid:218) Xamarin.Forms.Platform.iOS. 28 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi W ka(cid:285)dym projekcie w li(cid:258)cie bibliotek znajduje si(cid:218) równie(cid:285) odwo(cid:239)anie do g(cid:239)ównego projektu definiuj(cid:200)cego bibliotek(cid:218) PCL, bo bez g(cid:239)ównego kodu aplikacja nie b(cid:218)dzie dzia(cid:239)a(cid:202), prawda? Wszystko wygl(cid:200)da (cid:258)wietnie, ale w jaki sposób projekty dla poszczególnych systemów s(cid:200) powi(cid:200)- zane z platform(cid:200) Xamarin.Forms? Aby si(cid:218) tego dowiedzie(cid:202), musisz zajrze(cid:202) do kodu startowego aplikacji, w(cid:239)a(cid:258)ciwego dla ka(cid:285)dego systemu. Zacznij od projektu dla Windows Phone. Zmieni(cid:239)e(cid:258) w nim kod w pliku MainPage.xaml.cs. Interfejs u(cid:285)ytkownika nie jest teraz oparty na klasie PhoneApplicationPage, lecz na FormsApplica- tionPage z przestrzeni Xamarin.Forms.Platform.WinPhone. W kodzie wa(cid:285)ne jest wywo(cid:239)anie kon- struktora tej klasy, Forms.Init(), a tak(cid:285)e metody LoadApplication(). Argumentem tej metody jest nowa instancja klasy Xamarin.Forms.Appplication, zdefiniowanej w bibliotece PCL. Otwórz teraz plik MojaAplikacja (Portable)/App.xaml/App.xaml.cs. Zawiera on kod startowy Xamarin.Forms. Konstruktor klasy zawiera troch(cid:218) kodu inicjalizuj(cid:200)cego interfejs u(cid:285)ytkownika. Z nast(cid:218)pnej cz(cid:218)(cid:258)ci rozdzia(cid:239)u dowiesz si(cid:218) wi(cid:218)cej na temat tego kodu, jak równie(cid:285) go zmienisz. W projekcie dla iOS w pliku AppDelegate.cs wywo(cid:239)ywana jest analogiczna do opisanej wy(cid:285)ej metoda FinishedLaunching(). Zwró(cid:202) jednak uwag(cid:218), (cid:285)e klasa AppDelegate dziedziczy cechy po klasie Xamarin.Forms.Platform.iOS.FormsApplicationDelegate. Na koniec przyjrzyj si(cid:218) projektowi dla Androida. W pliku MainActivity.cs zdefiniowana jest klasa aktywno(cid:258)ci MainActivity, dziedzicz(cid:200)ca cechy po klasie Xamarin.Forms.Platform.Android. FormsApplicationActivity. G(cid:239)owna metoda tej klasy, OnCreate(), inicjalizuje pewne charaktery- styczne zmienne oraz klas(cid:218) Xamarin.Forms. Zwró(cid:202) uwag(cid:218), (cid:285)e metoda Forms.Init() w tym systemie jest wywo(cid:239)ywana inaczej, to jest z dwoma argumentami: obiektami typu MainActivity i Bundle. Zobacz te(cid:285) (cid:81) https://developer.xamarin.com/guides/cross-platform/xamarin-forms/controls/views Tworzenie uniwersalnego ekranu logowania W niemal ka(cid:285)dej aplikacji jest ekran logowania. W tym przyk(cid:239)adzie poznasz jedn(cid:200) z najbardziej podstawowych stron platformy Xamarin.Forms. Utworzysz ekran logowania, w którym u(cid:285)ytkow- nik b(cid:218)dzie wpisywa(cid:239) swój login i has(cid:239)o, a nast(cid:218)pnie klika(cid:239) przycisk, aby uzyska(cid:202) dost(cid:218)p do aplikacji. Mo(cid:285)esz utworzy(cid:202) nowe lub kontynuowa(cid:202) prac(cid:218) nad aktualnym rozwi(cid:200)zaniem. 29 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Jak to zrobi(cid:202)? W (cid:258)rodowisku Xamarin Studio rozwi(cid:241) g(cid:239)ówny projekt MojaAplikacja i wykonaj nast(cid:218)puj(cid:200)ce kroki: 1. Otwórz plik App.xaml/App.xaml.cs i zast(cid:200)p kod konstruktora App() poni(cid:285)szym kodem: var userNameEntry = new Entry { Placeholder = login }; var passwordEntry = new Entry { Placeholder = has(cid:239)o , IsPassword = true }; var loginButton = new Button { Text = Zaloguj }; loginButton.Clicked += (sender, e) = { Debug.WriteLine(string.Format( Login: {0} - Has(cid:239)o: {1} , userNameEntry.Text, passwordEntry.Text)); }; MainPage = new ContentPage { Content = new StackLayout { VerticalOptions = LayoutOptions.Center, Children = { userNameEntry, passwordEntry, loginButton } } }; 2. Uruchom aplikacj(cid:218) w ka(cid:285)dym systemie. Na ekranie powinny pojawi(cid:202) si(cid:218) proste pola testowe i przycisk. 3. W odpowiednich polach wpisz login i has(cid:239)o. 4. Kliknij przycisk Zaloguj i obserwuj komunikaty wy(cid:258)wietlane przez aplikacj(cid:218), zdefiniowane w procedurze obs(cid:239)ugi zdarzenia Clicked. Ekran powinien wygl(cid:200)da(cid:202) jak na zrzutach. 30 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi W systemie iOS: W systemie Android: W systemie Windows Phone: 31 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Wszystko wygl(cid:200)da (cid:258)wietnie: elementy w domy(cid:258)lnym uk(cid:239)adzie umieszczone s(cid:200) w (cid:258)rodkowej cz(cid:218)(cid:258)ci ekranu i zajmuj(cid:200) ca(cid:239)(cid:200) jego szeroko(cid:258)(cid:202). Oczywi(cid:258)cie ka(cid:285)dy widok i kontener ma w(cid:239)a(cid:258)ciwo(cid:258)ci umo(cid:285)liwiaj(cid:200)ce dowolne rozmieszczanie kontrolek na ekranie i okre(cid:258)lanie odst(cid:218)pów pomi(cid:218)dzy nimi. Zmie(cid:241) teraz nieco uk(cid:239)ad. Przy okazji uporz(cid:200)dkujesz kod. W tym celu wykonaj nast(cid:218)puj(cid:200)ce kroki: 1. Kliknij prawym przyciskiem myszy g(cid:239)ówny projekt MojaAplikacja, nast(cid:218)pnie wybierz polecenie Dodaj/Nowy folder i utwórz nowy folder o nazwie Custom Pages (w(cid:239)asne strony). 2. Kliknij prawym przyciskiem myszy nowo utworzony folder i wybierz polecenie Dodaj/Nowy plik. W oknie, które si(cid:218) pojawi, zaznacz opcj(cid:218) Pusta klasa, w polu Nazwa wpisz MainPage (strona g(cid:239)ówna) i kliknij przycisk Nowy. 3. W definicji nowej klasy wpisz nast(cid:218)puj(cid:200)cy kod: public class MainPage: ContentPage { Entry userNameEntry; Entry passwordEntry; Button loginButton; StackLayout stackLayout; public MainPage() { userNameEntry = new Entry { Placeholder = login }; passwordEntry = new Entry { Placeholder = has(cid:239)o , IsPassword = true }; loginButton = new Button { Text = Zaloguj }; loginButton.Clicked += LoginButton_Clicked; this.Padding = new Thickness(20); stackLayout = new StackLayout { VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand, Orientation = StackOrientation.Vertical, Spacing = 10, Children = { userNameEntry, passwordEntry, loginButton } }; this.Content = stackLayout; } 32 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi void LoginButton_Clicked(object sender, EventArgs e) { Debug.WriteLine(string.Format( Login: {0} - Has(cid:239)o: {1} , userNameEntry.Text, passwordEntry.Text)); } } 4. Na pocz(cid:200)tku pliku wpisz nast(cid:218)puj(cid:200)cy wiersz: using Xamarin.Forms; 5. W pliku App.xaml/App.xaml.cs usu(cid:241) wpisany wcze(cid:258)niej kod i wpisz w jego miejscu nast(cid:218)puj(cid:200)cy wiersz: MainPage = new MainPage(); 6. Uruchom aplikacj(cid:218) dla ka(cid:285)dego systemu i sprawd(cid:283) efekty wprowadzonych zmian. Ekran powinien wygl(cid:200)da(cid:202) jak na zrzutach. W systemie iOS: W systemie Android: 33 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury W systemie Windows Phone: Jak to dzia(cid:239)a? Plik App.xaml.cs zawiera g(cid:239)ówny kod startowy aplikacji. Definiowana w nim klasa ma w(cid:239)a(cid:258)ciwo(cid:258)(cid:202) MainPage, której przypisywany jest obiekt tworz(cid:200)cy stron(cid:218) startow(cid:200) aplikacji. W(cid:239)a(cid:258)ciwo(cid:258)ci Content (zawarto(cid:258)(cid:202)) klasy MainPage jest przypisywany obiekt typu StackLayout (uk(cid:239)ad pionowy). W jego w(cid:239)a(cid:258)ciwo(cid:258)ci Children (dzieci) umieszczane s(cid:200) trzy widoki: userNameEntry (pole do wpisania loginu), passwordEntry (pole do wpisania has(cid:239)a) i loginButton (przycisk logo- wania). Dodatkowo w(cid:239)a(cid:258)ciwo(cid:258)ciom VerticalOptions (opcje uk(cid:239)adu pionowego), HorizontalOptions (opcje uk(cid:239)adu poziomego), Orientation (orientacja) i Spacing (odst(cid:218)py) przypisywane s(cid:200) odpo- wiednie warto(cid:258)ci. W(cid:239)a(cid:258)ciwo(cid:258)ci Clicked (klikni(cid:218)ty) obiektu loginButton zosta(cid:239)a przypisana procedura obs(cid:239)ugi zdarzenia wywo(cid:239)anego klikni(cid:218)ciem przycisku logowania. W tej chwili procedura ta nie wykonuje (cid:285)adnych operacji oprócz wy(cid:258)wietlania komunikatów w panelu Dane wyj(cid:258)ciowe aplikacji. 34 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi W utworzonym interfejsie u(cid:285)ytkownika wykorzystany jest adaptywny uk(cid:239)ad elementów, dost(cid:218)pny w platformie Xamarin.Forms. Nie trzeba okre(cid:258)la(cid:202) po(cid:239)o(cid:285)enia poszczególnych kontrolek, wystarczy zdefiniowa(cid:202) kontenery, umie(cid:258)ci(cid:202) w nich elementy potomne i zdefiniowa(cid:202) regu(cid:239)y ich rozmieszcze- nia na ekranie. Aby nada(cid:202) ekranowi logowania ostateczny wygl(cid:200)d, zosta(cid:239)y zmienione w(cid:239)a(cid:258)ciwo(cid:258)ci VerticalOptions i HorizontalOptions kontenera StackLayout, definiuj(cid:200)ce rozmieszczenie kontrolek na ekranie, oraz w(cid:239)a(cid:258)ciwo(cid:258)(cid:202) Spacing, okre(cid:258)laj(cid:200)ca odst(cid:218)py pomi(cid:218)dzy kontrolkami i marginesy wokó(cid:239) nich. W platformie Xamarin.FormsNie nie istnieje prosty sposób okre(cid:258)lania wysoko(cid:258)ci i szeroko(cid:258)ci elementów. Definiuj(cid:200)c widok, okre(cid:258)la si(cid:218) wymagania dotycz(cid:200)ce ich wymiarów bez gwarancji, (cid:285)e zostan(cid:200) one spe(cid:239)nione. W(cid:239)a(cid:258)ciwo(cid:258)ci Width (szeroko(cid:258)(cid:202)) i Height (wysoko(cid:258)(cid:202)) s(cid:200) tylko do odczytu. Co dalej? Tworz(cid:200)c uniwersalne aplikacje, na przyk(cid:239)ad oparte na platformie Xamarin.Forms, nie zapominaj, (cid:285)e u(cid:285)ytkownicy korzystaj(cid:200) z wielu ró(cid:285)nych urz(cid:200)dze(cid:241) o ró(cid:285)nych wielko(cid:258)ciach ekranów, a w po- szczególnych systemach stosowane s(cid:200) inne jednostki wymiarów elementów. W iOS s(cid:200) to unity, a w Androidzie i Windows Phone tak zwane piksele niezale(cid:285)ne od urz(cid:200)dzenia (dpi). Jak sobie z tym radzi Xamarin.Forms? Je(cid:285)eli na przyk(cid:239)ad w(cid:239)a(cid:258)ciwo(cid:258)ci Spacing zostanie przypisana warto(cid:258)(cid:202) 10, wówczas zostanie ona prze(cid:239)o(cid:285)ona na 10 unitów w iOS i 10 dpi w Androidzie i Win- dows Phone. Korzystanie ze wspólnych funkcjonalno(cid:258)ci systemów Najwi(cid:218)kszym wyzwaniem towarzysz(cid:200)cym tworzeniu uniwersalnych aplikacji jest uwzgl(cid:218)dnianie ró(cid:285)nic pomi(cid:218)dzy interfejsami API typowymi dla poszczególnych systemów. Wiele funkcjonalno- (cid:258)ci jest wspólnych, ale korzystanie z nich nie zawsze jest proste. Na przyk(cid:239)ad wy(cid:258)wietlenie okienka z komunikatem lub otwarcie strony o zadanym adresie URL jest mo(cid:285)liwe we wszyst- kich systemach, ale interfejsy API umo(cid:285)liwiaj(cid:200)ce wykonanie tych operacji s(cid:200) w poszczegól- nych urz(cid:200)dzeniach zupe(cid:239)nie inne. Ponadto biblioteka PCL nie oferuje dost(cid:218)pu do wszystkich funkcjonalno(cid:258)ci urz(cid:200)dze(cid:241). Standardowo Xamarin.Forms obs(cid:239)uguje niektóre wspólne dla wszystkich systemów funkcjonal- no(cid:258)ci. W rozdziale 4., „Ró(cid:285)ne pojazdy, ten sam silnik”, opisana jest architektura biblioteki oraz sposoby tworzenia w(cid:239)asnych klas, ich implementacji i wykorzystania w wykonywanym kodzie. 35 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Jak to zrobi(cid:202)? W tej cz(cid:218)(cid:258)ci poznasz nast(cid:218)puj(cid:200)ce interfejsy API platformy Xamarin.Forms: (cid:81) Device.OpenUri do otwierania adresów URL w przegl(cid:200)darce danego systemu; (cid:81) Device.StartTimer do wykonywania zada(cid:241) w okre(cid:258)lonym momencie; (cid:81) Device.BeginInvokeOnMainThread do uruchamiania kodu, zazwyczaj w tle systemu, w celu zmiany zawarto(cid:258)ci ekranu; (cid:81) Page.DisplayAlert do wy(cid:258)wietlania prostych okien z komunikatami; (cid:81) Xamarin.Forms.Maps do wy(cid:258)wietlania map (ta funkcjonalno(cid:258)(cid:202) jest zawarta w uniwersalnym pakiecie NuGet). Aby dowiedzie(cid:202) si(cid:218), jak korzysta(cid:202) z powy(cid:285)szych interfejsów, utwórz now(cid:200) aplikacj(cid:218). W tym celu wykonaj nast(cid:218)puj(cid:200)ce kroki: 1. Utwórz od podstaw w opisany wcze(cid:258)niej sposób nowy projekt oparty na domy(cid:258)lnym szablonie i nadaj mu nazw(cid:218) CommonPlatform. 2. Utwórz nowy folder, a w nim now(cid:200) klas(cid:218) o nazwie MainPage. 3. W definicji przestrzeni wpisz nast(cid:218)puj(cid:200)cy kod: public class MainPage: ContentPage { private Button openUriButton; private Button startTimerButton; private Button marshalUIThreadButton; private Button displayAlertButton; private Button displayActionSheetButton; private Button openMapButton; private StackLayout stackLayout; public MainPage() { openUriButton = new Button { Text = Otwórz Xamarin Evolve }; startTimerButton = new Button { Text = Uruchom stoper }; marshalUIThreadButton = new Button { Text = Uruchom w g(cid:239)ównym w(cid:200)tku }; displayAlertButton = new Button { Text = Wy(cid:258)wietl komunikat }; displayActionSheetButton = new Button { Text = Wy(cid:258)wietl list(cid:218) akcji }; openMapButton = new Button { Text = Otwórz map(cid:218) }; 36 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi openUriButton.Clicked += OpenUriButton_Clicked; startTimerButton.Clicked += StartTimerButton_Clicked; marshalUIThreadButton.Clicked += MarshalUIThreadButton_Clicked; displayAlertButton.Clicked += DisplayAlertButton_Clicked; displayActionSheetButton.Clicked += DisplayActionSheetButton_Clicked; openMapButton.Clicked += OpenMapButton_Clicked; stackLayout = new StackLayout { Orientation = StackOrientation.Vertical, Spacing = 10, Padding = new Thickness(10), VerticalOptions = LayoutOptions.FillAndExpand, HorizontalOptions = LayoutOptions.FillAndExpand, Children = { openUriButton, startTimerButton, marshalUIThreadButton, displayAlertButton, displayActionSheetButton, openMapButton } }; Content = stackLayout; } void OpenMapButton_Clicked(object sender, EventArgs e) { } async void DisplayActionSheetButton_Clicked(object sender, EventArgs e) { string action = await DisplayActionSheet( Prosta lista akcji , Anuluj , Usu(cid:241) , new string[] { Akcja 1 , Akcja 2 , Akcja 3 , }); Debug.WriteLine( Klikn(cid:200)(cid:239)e(cid:258) {0} , action); } async void DisplayAlertButton_Clicked(object sender, EventArgs e) { bool result = await DisplayAlert( Prosty komunikat , Super! , OK , Anuluj ); Debug.WriteLine( Klikni(cid:218)ty przycisk: {0} , result ? OK : Anuluj ); } void MarshalUIThreadButton_Clicked(object sender, EventArgs e) { Task.Run(async() = { for (int i = 0; i 3; i++) { await Task.Delay(1000); Device.BeginInvokeOnMainThread(() = { marshalUIThreadButton.Text = string.Format( Wywo(cid:239)any {0} , i); }); } }); } 37 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury void StartTimerButton_Clicked(object sender, EventArgs e) { Device.StartTimer(new TimeSpan(0, 0, 1), () = { Debug.WriteLine( Wywo(cid:239)any delegat stopera ); return true; // false, je(cid:298)eli stoper ma by(cid:252) zatrzymany }); } void OpenUriButton_Clicked(object sender, EventArgs e) { Device.OpenUri(new Uri( http://xamarin.com/evolve )); } } 4. Na razie nie zwracaj uwagi na pust(cid:200) metod(cid:218) OpenMapButton_Clicked(). Aby móc z niej korzysta(cid:202), za chwil(cid:218) zmienisz nieco konfiguracj(cid:218) rozwi(cid:200)zania. 5. Uruchom aplikacj(cid:218) i sprawd(cid:283) funkcjonowanie wszystkich przycisków z wyj(cid:200)tkiem Otwórz map(cid:218), z którym na razie nie jest zwi(cid:200)zana (cid:285)adna funkcjonalno(cid:258)(cid:202). Ekran powinien wygl(cid:200)da(cid:202) jak na zrzutach. W systemie iOS: W systemie Android: 38 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi W systemie Windows Phone: Aby móc wy(cid:258)wietla(cid:202) mapy w aplikacji, musisz w konfiguracji rozwi(cid:200)zania wprowadzi(cid:202) kilka zmian, odpowiednich dla poszczególnych urz(cid:200)dze(cid:241). Wykonaj poni(cid:285)sze kroki: 1. Do ka(cid:285)dego projektu dodaj pakiet NuGet o nazwie Xamarin.Forms.Maps. 2. W projekcie dla Windows Phone w pliku MainPage.xaml/MainPage.xaml.cs wpisz pod wywo(cid:239)aniem metody Forms.Init() poni(cid:285)szy kod. Analogiczn(cid:200) zmian(cid:218) wprowad(cid:283) w projekcie dla Androida w pliku MainActivity.cs i w projekcie dla iOS w pliku AppDelegate.cs. Xamarin.FormsMaps.Init(); 3. W projekcie dla Androida zmie(cid:241) powy(cid:285)szy kod, wpisuj(cid:200)c wymagane argumenty metody: Xamarin.FormsMaps.Init(this, bundle); 39 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury 4. Je(cid:285)eli tworzysz aplikacj(cid:218) dla systemu iOS 7, nie musisz wprowadza(cid:202) (cid:285)adnych dodatkowych zmian. Natomiast w przypadku systemu iOS 8 musisz zmieni(cid:202) plik info.plist. Otwórz ten plik, kliknij zak(cid:239)adk(cid:218) (cid:189)ród(cid:239)o i dodaj do tabeli nast(cid:218)puj(cid:200)ce wiersze: NSLocationAlwaysUsageDescription Ci(cid:200)g Zawsze musimy zna(cid:202) Twoje po(cid:239)o(cid:285)enie! NSLocationWhenInUseUsageDescription Ci(cid:200)g Musimy zna(cid:202) Twoje po(cid:239)o(cid:285)enie, gdy aplikacja jest aktywna! 5. Aby wy(cid:258)wietla(cid:202) mapy w Androidzie, musisz uzyska(cid:202) klucz Google Maps API v2. W tym celu otwórz stron(cid:218) https://developers.google.com/maps/documentation/android, kliknij przycisk Get a key (uzyskaj klucz) i post(cid:218)puj wed(cid:239)ug pojawiaj(cid:200)cych si(cid:218) wskazówek. 6. Otwórz plik Properties/AndroidManifest.xml, wy(cid:258)wietl jego (cid:283)ród(cid:239)o i w sekcji application wpisz nast(cid:218)puj(cid:200)cy wiersz: meta-data android:name= com.google.android.maps.v2.API_KEY android:value= TWÓJ KLUCZ / 7. Kliknij prawym przyciskiem myszy projekt dla Androida i wybierz polecenie Opcje. W oknie, które si(cid:218) pojawi, kliknij po lewej stronie pozycj(cid:218) Kompilacja/Android Application i w panelu Wymagane uprawnienia zaznacz nast(cid:218)puj(cid:200)ce opcje: (cid:81) Internet (cid:81) AccessNetworkState (cid:81) AccessCoarseLocation (cid:81) AccessFineLocation (cid:81) AccessLocationExtraCommands (cid:81) AccessMockLocation (cid:81) AccessWifiState 8. W projekcie dla Windows Phone otwórz plik Properties/WMAppmanifest.xml, kliknij zak(cid:239)adk(cid:218) Capabilities (mo(cid:285)liwo(cid:258)ci) i zaznacz nast(cid:218)puj(cid:200)ce opcje: (cid:81) ID_CAP_MAP (cid:81) ID_CAP_LOCATION 9. Dodaj do rozwi(cid:200)zania now(cid:200) stron(cid:218). W tym celu kliknij prawym przyciskiem folder Custom Pages, wybierz polecenie Dodaj/Nowy plik i utwórz pust(cid:200) klas(cid:218) o nazwie MapPage. 10. Zmie(cid:241) klas(cid:218) MapPage, definiuj(cid:200)c j(cid:200) jako pochodn(cid:200) klasy ContentPage. 11. W definicji klasy wpisz nast(cid:218)puj(cid:200)cy kod: private Map map; private StackLayout stackLayout; public MapPage() { 40 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi MapSpan span = MapSpan.FromCenterAndRadius( new Position(50.289192, 18.659656), Distance.FromMiles(0.4)); map = new Map(span) { VerticalOptions = LayoutOptions.FillAndExpand }; stackLayout = new StackLayout { Spacing = 0, Children = { map } }; Content = stackLayout; } 12. W pliku MainPage.cs w definicji metody OpenMapButton_Clicked() wpisz nast(cid:218)puj(cid:200)cy kod: Navigation.PushModalAsync(new MapPage()); 13. Uruchom aplikacje, kliknij przycisk Otwórz map(cid:218) i podziwiaj swoj(cid:200) prac(cid:218)! Mo(cid:285)esz zmienia(cid:202) typ mapy, jak równie(cid:285) umieszcza(cid:202) na niej znaczniki. Dost(cid:218)pne s(cid:200) nast(cid:218)puj(cid:200)ce rodzaje znaczników: (cid:81) Generic (ogólny) (cid:81) Place (miejsce) (cid:81) SavedPin (zapisany znacznik) (cid:81) SearchResult (wynik wyszukiwania) Aby umie(cid:258)ci(cid:202) znacznik na mapie, wpisz w konstruktorze klasy MapPage nast(cid:218)puj(cid:200)cy kod: Position position = new Position(50.289192, 18.659656); Pin pin = new Pin { Type = PinType.Place, Position = position, Label = Helion , Address = Helion }; map.Pins.Add(pin); Bardzo proste! Twórcy platformy Xamarin wykonali dobr(cid:200) robot(cid:218), definiuj(cid:200)c klasy umo(cid:285)liwiaj(cid:200)- ce wykonywanie podstawowych operacji na mapach. Ekran powinien wygl(cid:200)da(cid:202) jak na zrzutach. 41 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury W systemie iOS: W systemie Android: W systemie Windows Phone: 42 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi Jak to dzia(cid:239)a? Platforma Xamarin zawiera klasy, które mo(cid:285)na stosowa(cid:202) we wspó(cid:239)dzielonej bibliotece PCL, jak równie(cid:285) w projektach dla poszczególnych systemów. Mechanizm Service Locator, b(cid:218)d(cid:200)cy cz(cid:218)(cid:258)ci(cid:200) us(cid:239)ugi DependencyService (któr(cid:200) zajmiemy si(cid:218) w rozdziale 4., „Ró(cid:285)ne pojazdy, ten sam silnik”), rozwi(cid:200)zuje zale(cid:285)no(cid:258)ci w trakcie dzia(cid:239)ania aplikacji, dzi(cid:218)ki czemu szybko mo(cid:285)na tworzy(cid:202) aplikacje wykorzystuj(cid:200)ce najcz(cid:218)(cid:258)ciej stosowane funkcjonalno(cid:258)ci. Metoda DisplayAlert() wstrzykuje w trakcie dzia(cid:239)ania aplikacji kod klasy UIAlertController w iOS, kod klasy AlertDialog w Androidzie oraz kod klasy MessageBox w Windows Phone. Metoda Device.StartTimer() ukrywa szczegó(cid:239)y odpowiednich klas, charakterystycznych dla po- szczególnych systemów. Ta sama zasada jest stosowana we wszystkich opisanych wcze(cid:258)niej metodach, a tak(cid:285)e w meto- dach pakietu Xamarin.Forms.Maps, jednak w ostatnim przypadku wymagane jest wprowadzenie pewnych zmian w konfiguracjach projektów. Platformy Xamarin, a szczególnie Xamarin.Forms, powsta(cid:239)y po to, aby mo(cid:285)na by(cid:239)o efektywniej tworzy(cid:202) aplikacje. Temu celowi s(cid:239)u(cid:285)(cid:200) wtyczki Xamarin i Community. Zanim zaczniesz kodowa(cid:202), sprawdzaj ich zawarto(cid:258)(cid:202), aby nie wywa(cid:285)a(cid:202) otwartych drzwi! Zobacz te(cid:285) (cid:81) Rozdzia(cid:239) 4., „Ró(cid:285)ne pojazdy, ten sam silnik” (cid:81) https://developer.xamarin.com/guides/xamarin-forms/user-interface/controls/layouts (cid:81) https://components.xamarin.com Uwierzytelnianie u(cid:285)ytkowników za pomoc(cid:200) serwisów Facebook i Google Jedn(cid:200) z najcz(cid:218)(cid:258)ciej wykorzystywanych w aplikacjach funkcjonalno(cid:258)ci jest uwierzytelnianie u(cid:285)ytkownika za pomoc(cid:200) jego ulubionego serwisu. Ostatnim tematem tego rozdzia(cid:239)u jest imple- mentacja tej funkcjonalno(cid:258)ci z u(cid:285)yciem wtyczki Xamarin.Auth. Wtyczka ta umo(cid:285)liwia po(cid:239)(cid:200)czenie si(cid:218) aplikacji i uwierzytelnienie u(cid:285)ytkownika poprzez jeden z dwóch popularnych serwisów — Facebook lub Google — dzi(cid:218)ki czemu u(cid:285)ytkownik nie musi rejestrowa(cid:202) si(cid:218) w aplikacji. Ponadto programista oszcz(cid:218)dza sobie dodatkowej pracy zwi(cid:200)zanej z implementacj(cid:200) procedury logowania na urz(cid:200)dzeniu i serwerze. 43 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Jak to zrobi(cid:202)? 1. Utwórz w (cid:258)rodowisku Xamarin Studio lub Visual Studio nowe uniwersalne rozwi(cid:200)zanie o nazwie AuthenticateProviders. Je(cid:285)eli nie pami(cid:218)tasz, jak to si(cid:218) robi, zajrzyj do cz(cid:218)(cid:258)ci „Tworzenie uniwersalnego rozwi(cid:200)zania” na pocz(cid:200)tku tego rozdzia(cid:239)u. 2. Do projektów dla systemów iOS i Android (projektem dla Windows Phone na razie si(cid:218) nie zajmujemy) dodaj komponent uwierzytelniaj(cid:200)cy. W tym celu kliknij prawym przyciskiem myszy folder AuthenticateProviders.iOS/Sk(cid:239)adniki i wybierz polecenie Edytuj sk(cid:239)adniki. W oknie, które si(cid:218) pojawi, wyszukaj komponent Xamarin.Auth i dodaj go do projektu. T(cid:218) sam(cid:200) operacj(cid:218) wykonaj w przypadku projektu dla Androida. 3. Aby mo(cid:285)na by(cid:239)o uwierzytelnia(cid:202) u(cid:285)ytkowników za pomoc(cid:200) serwisów Facebook i Google, musisz w sekcjach deweloperskich obu serwisów uzyska(cid:202) w(cid:239)asne identyfikatory klienckie. W tym celu otwórz strony https://developers.facebook.com oraz https://console.developers.google.com i post(cid:218)puj wed(cid:239)ug znajduj(cid:200)cych si(cid:218) na nich wskazówek. 4. Proces uwierzytelniania u(cid:285)ytkownika w obu serwisach i w obu systemach wygl(cid:200)da niemal tak samo: tworzony jest nowy projekt i uzyskiwane s(cid:200) klucze. Wi(cid:218)cej informacji na ten temat znajdziesz w opisach poszczególnych systemów. Najwa(cid:285)niejsz(cid:200) kwesti(cid:200) jest zdefiniowanie takiego samego przekierowuj(cid:200)cego adresu URL, aby aplikacja po pomy(cid:258)lnym uwierzytelnieniu u(cid:285)ytkownika otwiera(cid:239)a odpowiedni(cid:200) stron(cid:218). 5. Kliknij prawym przyciskiem myszy g(cid:239)ówny projekt AuthenticateProviders, wybierz polecenie Dodaj/Nowy folder i utwórz folder o nazwie Models. 6. W nowo utworzonym folderze utwórz dwie klasy pomocnicze o nazwach OAuthSettings i ProviderManager. 7. W pliku OAuthSettings.cs wpisz nast(cid:218)puj(cid:200)cy kod: public class OAuthSettings { public string ClientId { get; set; } public string ClientSecret { get; set; } public string AuthorizeUrl { get; set; } public string RedirectUrl { get; set; } public string AccessTokenUrl { get; set; 44 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi } public List string Scopes { get; set; } public string ScopesString { get { return Scopes.Aggregate((current, next) = string.Format( {0}+{1} , current, next)); } } public OAuthSettings() { Scopes = new List string (); } } 8. W pliku ProviderManager.cs wpisz nast(cid:218)puj(cid:200)cy kod: public enum Provider { Unknown = 0, Facebook, Google } public static class ProviderManager { private static OAuthSettings FacebookOAuthSettings { get { return new OAuthSettings { ClientId = TWÓJ_ID_KLIENCKI , ClientSecret = TWOJE_HAS(cid:146)O_KLIENCKIE , AuthorizeUrl = https://m.facebook.com/dialog/oauth/ , RedirectUrl = http://www.facebook.com/connect/login_success.html , AccessTokenUrl = https://graph.facebook.com/v2.3/oauth/access_token , Scopes = new List string { } }; } } private static OAuthSettings GoogleOAuthSettings { get { return new OAuthSettings { ClientId = TWÓJ_ID_KLIENCKI , ClientSecret = TWOJE_HAS(cid:146)O_KLIENCKIE , AuthorizeUrl = https://accounts.google.com/o/oauth2/auth , RedirectUrl = https://www.googleapis.com/plus/v1/people/me , AccessTokenUrl = https://accounts.google.com/o/oauth2/token , Scopes = new List string { openid } }; } } 45 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury public static OAuthSettings GetProviderOAuthSettings(Provider provider) { switch (provider) { case Provider.Facebook: { return FacebookOAuthSettings; } case Provider.Google: { return GoogleOAuthSettings; } } return new OAuthSettings(); } } 9. Kliknij prawym przyciskiem myszy projekt AuthenticateProviders, wybierz polecenie Dodaj/Nowy folder i utwórz folder o nazwie Custom Pages. 10. Kliknij prawym przyciskiem myszy nowo utworzony folder i utwórz w nim dwie klasy o nazwach LoginPage i ProvidersAuthPage. W pliku LoginPage.cs wpisz nast(cid:218)puj(cid:200)cy kod: public class LoginPage : ContentPage { public OAuthSettings ProviderOAuthSettings { get; set; } public LoginPage(Provider provider) { ProviderOAuthSettings = ProviderManager.GetProviderOAuthSettings(provider); } } 11. W pliku ProvidersAuthPage.cs wpisz nast(cid:218)puj(cid:200)cy kod: public class ProvidersAuthPage : ContentPage { StackLayout stackLayout; Button facebookButton; Button googleButton; public ProvidersAuthPage() { facebookButton = new Button { Text = Facebook }; facebookButton.Clicked += async(sender, e) = await Navigation.PushModalAsync(new LoginPage(Provider.Facebook)); googleButton = new Button { Text = Google }; googleButton.Clicked += async(sender, e) = await Navigation.PushModalAsync(new LoginPage(Provider.Google)); stackLayout = new StackLayout { VerticalOptions = LayoutOptions.Center, HorizontalOptions = LayoutOptions.Center, Orientation = StackOrientation.Vertical, Spacing = 10, Children = { facebookButton, 46 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi googleButton } }; this.Content = stackLayout; } } 12. W projekcie AuthenticateProviders w pliku App.xaml/App.xaml wpisz w konstruktorze klasy nast(cid:218)puj(cid:200)cy kod: MainPage = new ProvidersAuthPage(); Teraz musisz zakodowa(cid:202) proces uwierzytelniania u(cid:285)ytkownika. W punkcie 3. doda(cid:239)e(cid:258) do dwóch projektów komponent Xamarin.Auth, który w zale(cid:285)no(cid:258)ci od systemu wykorzystuje si(cid:218) inaczej. Aby w ró(cid:285)nych systemach by(cid:239) wykonywany inny kod, zastosujesz klas(cid:218) PageRenderer i atrybut przestrzeni, dzi(cid:218)ki którym wykorzystana zostanie us(cid:239)uga DependencyService oferowana przez platform(cid:218) Xamarin.Forms. Wi(cid:218)cej informacji na ten temat znajdziesz w rozdziale 2., „Raz deklaruj, wsz(cid:218)dzie wizualizuj”. W projekcie dla systemu Android wykonaj nast(cid:218)puj(cid:200)ce operacje: 1. Utwórz nowy folder o nazwie Platform Specific, a w nim now(cid:200) klas(cid:218) LoginPageRenderer, dziedzicz(cid:200)c(cid:200) w(cid:239)a(cid:258)ciwo(cid:258)ci klasy PageRenderer. W definicji klasy wpisz nast(cid:218)puj(cid:200)cy kod: LoginPage page; bool loginInProgress; protected override void OnElementChanged(ElementChangedEventArgs Page e) { base.OnElementChanged(e); if (e.OldElement != null || Element == null) return; page = e.NewElement as LoginPage; if (page == null || loginInProgress) return; loginInProgress = true; try { // Twój identyfikator kliencki OAuth2 OAuth2Authenticator auth = new OAuth2Authenticator( page.ProviderOAuthSettings.ClientId, // Twoje has(cid:225)o klienckie OAuth2 page.ProviderOAuthSettings.ClientSecret, // Zakresy page.ProviderOAuthSettings.ScopesString, // Zakresy rozdzielone znakiem + new Uri(page.ProviderOAuthSettings.AuthorizeUrl), // Przekierowuj(cid:261)cy adres URL new Uri(page.ProviderOAuthSettings.RedirectUrl), new Uri(page.ProviderOAuthSettings.AccessTokenUrl) ); auth.AllowCancel = true; auth.Completed += async(sender, args) = { // Wykonywane operacje await page.Navigation.PopAsync(); 47 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury loginInProgress = false; }; auth.Error += (sender, args) = { Console.WriteLine( B(cid:239)(cid:200)d uwierzytelnienia: {0} , args.Exception); }; var activity = Xamarin.Forms.Forms.Context as Activity; activity.StartActivity(auth.GetUI(Xamarin.Forms.Forms.Context)); } catch (Exception ex) { Console.WriteLine(ex); } } 2. Wpisz poni(cid:285)sze instrukcje i atrybuty dekoracyjne przestrzeni nazw, aby kod poprawnie si(cid:218) skompilowa(cid:239): using XamFormsAuthenticateProviders; using XamFormsAuthenticateProviders.Droid; using Xamarin.Forms.Platform.Android; using Xamarin.Auth; [assembly: ExportRenderer(typeof(LoginPage), typeof(LoginPageRenderer))] namespace AuthenticateProviders.Droid W projekcie dla systemu iOS wykonaj nast(cid:218)puj(cid:200)ce operacje: 1. Jak poprzednio, utwórz nowy folder Platform Specific, a w nim klas(cid:218) LoginPageRenderer pochodn(cid:200) od klasy PageRenderer. 2. W definicji klasy wpisz nast(cid:218)puj(cid:200)cy kod, odpowiedni dla iOS: LoginPage page; bool loginInProgress; protected override void OnElementChanged(VisualElementChangedEventArgs e) { base.OnElementChanged(e); if (e.OldElement != null || Element == null) return; page = e.NewElement as LoginPage; } public override async void ViewDidAppear(bool animated) { base.ViewDidAppear(animated); if (page == null || loginInProgress) return; loginInProgress = true; try { // Twój identyfikator kliencki OAuth2 OAuth2Authenticator auth = new OAuth2Authenticator( page.ProviderOAuthSettings.ClientId, // Twoje has(cid:225)o klienckie OAuth2 page.ProviderOAuthSettings.ClientSecret, // Zakresy page.ProviderOAuthSettings.ScopesString, // Zakresy rozdzielone znakiem + new Uri(page.ProviderOAuthSettings.AuthorizeUrl), 48 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi // Przekierowuj(cid:261)cy adres URL new Uri(page.ProviderOAuthSettings.RedirectUrl), new Uri(page.ProviderOAuthSettings.AccessTokenUrl) ); auth.AllowCancel = true; auth.Completed += async(sender, args) = { // Wykonywane operacje await DismissViewControllerAsync(true); await page.Navigation.PopModalAsync(); loginInProgress = false; }; auth.Error += (sender, args) = { Console.WriteLine( B(cid:239)(cid:200)d uwierzytelnienia: {0} , args.Exception); }; await PresentViewControllerAsync(auth.GetUI(), true); } catch (Exception ex) { Console.WriteLine(ex); } } 3. Wpisz jeszcze poni(cid:285)sze instrukcje i atrybut ExportRenderer przestrzeni nazw: using System; using Xamarin.Forms; using Xamarin.Forms.Platform.iOS; using Xamarin.Auth; using AuthenticateProviders; using AuthenticateProviders.iOS; [assembly: ExportRenderer(typeof(LoginPage), typeof(LoginPageRenderer))] namespace AuthenticateProviders.iOS A co z pomini(cid:218)tym Windows Phone? Na pewno zauwa(cid:285)y(cid:239)e(cid:258), (cid:285)e w serwisie Xamarin Component Store nie ma komponentu uwierzytelniaj(cid:200)cego przeznaczonego dla tego systemu. Nie przejmuj si(cid:218) tym jednak, istniej(cid:200) inne mo(cid:285)liwo(cid:258)ci. Jeden z magicznych sposobów polega na wykorzysta- niu klasy PageRenderer, zastosowanej w dwóch poprzednich projektach. W projekcie dla systemu Windows Phone utwórz w opisany wy(cid:285)ej sposób klas(cid:218) i wpisz w(cid:239)asny kod uwierzytelniaj(cid:200)cy. Mo(cid:285)esz równie(cid:285) wykona(cid:202) nast(cid:218)puj(cid:200)ce operacje i wypróbowa(cid:202) eksperymentalny pakiet NuGet Xamarin.Auth: 1. Kliknij prawym przyciskiem myszy projekt dla systemu Windows Phone i dodaj do niego pakiet NuGet Xamarin.Auth. 2. Utwórz folder Platform Specific, a w nim klas(cid:218) LoginPageRenderer pochodn(cid:200) od klasy PageRenderer. 3. W definicji klasy zaimplementuj w(cid:239)asny algorytm uwierzytelniaj(cid:200)cy lub wykorzystaj pakiet Xamarin.Auth. Aby utworzy(cid:202) gotow(cid:200) aplikacj(cid:218), skorzystaj z do(cid:239)(cid:200)czonego do ksi(cid:200)(cid:285)ki kodu. 49 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury Poczyni(cid:239)e(cid:258) du(cid:285)e post(cid:218)py. Oczywi(cid:258)cie w tym rozwi(cid:200)zaniu zosta(cid:239) wykorzystany zaledwie drobny fragment mo(cid:285)liwo(cid:258)ci tokenów uwierzytelniaj(cid:200)cych, ale ten temat zostawiam Tobie. Zazwyczaj proces uwierzytelnienia polega na uzyskaniu tokenu, zarejestrowaniu jego daty wyga(cid:258)ni(cid:218)cia i zapisaniu go w pami(cid:218)ci. Jak to dzia(cid:239)a? Pozna(cid:239)e(cid:258) zatem pot(cid:218)g(cid:218) platformy Xamarin.Forms, umo(cid:285)liwiaj(cid:200)c(cid:200) tworzenie uniwersalnych apli- kacji wykorzystuj(cid:200)cych wspó(cid:239)dzielony kod, który mo(cid:285)na dostosowywa(cid:202) odpowiednio do potrzeb. Dzi(cid:218)ki klasie PageRenderer mo(cid:285)na wy(cid:258)wietla(cid:202) widoki i strony w sposób odpowiedni dla ró(cid:285)nych systemów operacyjnych. Pierwsz(cid:200) rzecz(cid:200), jak(cid:200) zrobi(cid:239)e(cid:258) po utworzeniu rozwi(cid:200)zania, by(cid:239)o zalogowanie si(cid:218) do konsoli deweloperskiej serwisów Facebook i Google w celu utworzenia nowego projektu, uaktywnienia mechanizmu uwierzytelniaj(cid:200)cego OAuth2 oraz uzyskania kluczy i przekierowuj(cid:200)cych adresów URL stron otwieranych po pomy(cid:258)lnym zalogowaniu u(cid:285)ytkownika. Mechanizmy OAuth i OAuth2 s(cid:239)u(cid:285)(cid:200) do sprawdzania, czy loguj(cid:200)cy si(cid:218) u(cid:285)ytkownik jest zarejestrowany w bazie serwisu uwierzytel- niaj(cid:200)cego. Dzi(cid:218)ki temu u(cid:285)ytkownik w celu zalogowania si(cid:218) do aplikacji mo(cid:285)e u(cid:285)ywa(cid:202) tych samych po(cid:258)wiadcze(cid:241), które stosuje do logowania si(cid:218) do serwisu. Kolejn(cid:200) operacj(cid:200) by(cid:239)o utworzenie dwóch klas pomocniczych. Pierwsza z nich, OAuthSettings, zawiera wszystkie ustawienia wymagane przez serwis uwierzytelniaj(cid:200)cy do otwarcia dost(cid:218)pu do aplikacji. Druga, statyczna klasa ProviderManager, zawiera statyczn(cid:200) metod(cid:218), której argumentem jest identyfikator serwisu uwierzytelniaj(cid:200)cego. Metoda ta zwraca instancj(cid:218) klasy OAuthSettings odpowiedni(cid:200) dla wskazanego serwisu. Uniwersalny interfejs u(cid:285)ytkownika sk(cid:239)ada si(cid:218) z dwóch stron. Pierwsza to strona g(cid:239)ówna, ProvidersAuthPage, która zawiera dwa przyciski. Po klikni(cid:218)ciu dowolnego z tych przycisków wywo(cid:239)ywana jest metoda obs(cid:239)ugi zdarzenia Clicked i nast(cid:218)puje przej(cid:258)cie do strony LoginPage, uwierzytelniaj(cid:200)cej u(cid:285)ytkownika za pomoc(cid:200) wybranego serwisu. W konstruktorze klasy LoginPage argument provider jest wykorzystywany do uzyskania odpo- wiedniej instancji klasy OAuthSettings i zapisania jej w publicznej w(cid:239)a(cid:258)ciwo(cid:258)ci. To wszystko. Ca(cid:239)a reszta jest wykonywana przez kod przystosowany do w(cid:239)a(cid:258)ciwego systemu operacyjnego. Kody klasy LoginPageRenderer s(cid:200) dostosowane do poszczególnych systemów i wykorzystuj(cid:200) funkcjonalno(cid:258)ci platformy Xamarin.Forms. W iOS jest to klasa UIViewController, w Androidzie klasa bardzo podobna do klasy Activity, a w Windows Phone klasa PhoneApplicationPage. W platformie dost(cid:218)pnych jest kilka innych klas do wy(cid:258)wietlania ró(cid:285)nego typu widoków. Przestrze(cid:241) nazw, w której zdefiniowa(cid:239)e(cid:258) powy(cid:285)sz(cid:200) klas(cid:218), opatrzy(cid:239)e(cid:258) atrybutem ExportRenderer, dzi(cid:218)ki któremu platforma Xamarin.Forms podczas dzia(cid:239)ania aplikacji (cid:239)aduje do pami(cid:218)ci odpo- wiedni kod. 50 Poleć książkęKup książkę Rozdzia(cid:225) 1. • Jeden pier(cid:286)cie(cid:276), by rz(cid:261)dzi(cid:252) wszystkimi W klasie LoginPageRenderer nadpisywana jest metoda OnElementChanged() i uzyskiwana strona platformy Xamarin.Forms. W iOS wykorzystywana jest w tym celu metoda ViewDidAppear(). Jednak w Androidzie nie istnieje analogiczna metoda, dlatego w metodzie OnElementChanged() wpisa(cid:239)e(cid:258) w(cid:239)asny kod uwierzytelniaj(cid:200)cy. Kod ten sprawdza, czy proces uwierzytelniania u(cid:285)ytkowni- ka ca(cid:239)y czas trwa, gdyby zamkn(cid:200)(cid:239) on stron(cid:218) logowania i otworzy(cid:239) j(cid:200) ponownie. Wtyczka Xamarin.Auth zawiera klas(cid:218) OAuth2Authenticator, której instancja jest tworzona z wykorzystaniem informacji zawartych w instancji klasy OAuthSettings, zapisanej we w(cid:239)a(cid:258)ciwo- (cid:258)ci ProviderOAuthSettings. W ten sposób wykorzystywane s(cid:200) najlepsze cechy obu klas. W dalszej cz(cid:218)(cid:258)ci kodu rejestrowane s(cid:200) trzy metody wywo(cid:239)ywane po pomy(cid:258)lnym uwierzytel- nieniu u(cid:285)ytkownika, po przerwaniu procesu uwierzytelnienia oraz po pojawieniu si(cid:218) b(cid:239)(cid:218)dów. Za pomoc(cid:200) metody Auth.GetUI() uzyskiwany jest obiekt w(cid:239)a(cid:258)ciwy danemu systemowi operacyj- nemu, wykorzystywany do wy(cid:258)wietlenia widoku uwierzytelniaj(cid:200)cego. Na koniec, w kodzie ob- s(cid:239)ugi zdarzenia Completed, zamykany jest widok uwierzytelniaj(cid:200)cy. Zobacz te(cid:285) (cid:81) Rozdzia(cid:239) 2., „Raz deklaruj, wsz(cid:218)dzie wizualizuj” (cid:81) Rozdzia(cid:239) 4., „Ró(cid:285)ne pojazdy, ten sam silnik” (cid:81) https://developer.xamarin.com/guides/xamarin-forms/application-fundamentals/ custom-renderer (cid:81) https://components.xamarin.com/view/xamarin.auth 51 Poleć książkęKup książkę Xamarin. Tworzenie aplikacji cross-platform. Receptury 52 Poleć książkęKup książkę Skorowidz Xamarin.Forms.Core, 28
Pobierz darmowy fragment (pdf)

Gdzie kupić całą publikację:

Xamarin. Tworzenie aplikacji cross-platform. Receptury
Autor:

Opinie na temat publikacji:


Inne popularne pozycje z tej kategorii:


Czytaj również:


Prowadzisz stronę lub blog? Wstaw link do fragmentu tej książki i współpracuj z Cyfroteką: