Artykuł

freeimages.com freeimages.com
lis 15 2015
0

Obsługa notyfikacji push w Universal Apps

Dwa tygodnie temu popełniłem wpis na temat lokalnych notyfikacji, które z powodzeniem bez większych przeszkód można użyć w każdej aplikacji uniwersalnej. Dziś chciałbym pozostać w temacie notyfikacji, aczkolwiek tym razem podejdziemy do sprawy trochę bardziej globalnie - zajmiemy się tzw. notyfikacjami push.

Idea tego rodzaju notyfikacji jest prostsza niż się to powszechnie zdaje, a kluczem do sukcesu w naszym przypadku będzie usługa WNS oraz testowy serwis do wysyłania pushy. Oczywiście wysyłka notyfikacji docelowo powinna zostać zrealizowana w jakiejś usłudze backendowej, ale to już temat na inny wpis;-)

Idea WNS

Microsoft oferuje dwie usługi pozwalające na wysyłanie notyfikacji PUSH na urządzenia z systemem Windows Phone:

  • Starszy MPNS
  • Nowszy, stosowany również w dużym Windowsie WNS

W dzisiejszym tekście skupie się właśnie na tym drugim rozwiązaniu.

Ogólna idea WNS jest stosunkowo prosta. Aby skorzystać z tego rozwiązania, musimy mieć aktywne konto developera, na którym utworzymy projekt pustej aplikacji. Konieczne jest również przygotowanie danych potrzebnych do wysyłki PUSH:

  • Channel URI - id kanału - specjalny adres zawierający token określonego urządzenia, który za pomocą kodu C# wyciągamy w czasie pracy aplikacji
  • Package Security Identifier (SID) - bezpieczny identyfikator paczki - do wyciągnięcia z konta developera
  • Client Secret - hasło klienta - do wyciągnięcia z konta developera

W produkcyjnych rozwiązaniach, powinniśmy posiadać backend, do którego będą mogły uderzać aplikacje, które z kolei przesyłać będą uzyskany za pomocą kodu Channel URI. W backendzie powinny znaleźć się również informacje na temat SID oraz Client Secret. Backend powinien również być odpowiedzialny za komunikację z WNS. Na szczęście nie musimy tego robić sami - można wykorzystać gotowe rozwiązania np. bibliotekę PushSharp.

Osobiście na potrzeby tekstu, użyje testowej aplikacji webowej do wysyłki pushy.

Rejestracja aplikacji do pushy w panelu developera

Zakładam, że macie aktywne konto developera oraz utworzoną przynajmniej jedną aplikację (może być pusta). Po spełnieniu tych warunków, powinniśmy skojarzyć lokalną solucję z Visual Studio (jeśli wcześniej tego nie robiliście) z wybraną aplikacją. W tym celu klikamy PPM na projekt aplikacji Windows/Windows Phone, a następnie z menu kontekstowego wybieramy opcję Store i Associate App with the Store.... Następnie postępujemy według wskazówek umieszczonych na ekranie. Na jednym z ekranów, na którym pojawi się lista wszystkich waszych aplikacji - będzie również możliwość utworzenia nowej.

W kolejnym etapie, zarejestrujemy aplikację do pushy. W tym celu, logujemy się na konto developera (ze względu na dziwne tłumaczenie, w tekście używał będę angielskiej wersji językowej panelu), a następnie odnajdujemy wcześniej wybraną/utworzoną aplikację.

Na jej dashboardzie, w lewej części okna będzie widoczna zakładka Services oraz opcja Push notifications. Klikamy na nią. W nowo otwartej stronie, skupiamy się na sekcji WNS, w której odnajdujemy link Live Services site. Po wejściu w niego, znajdziemy wszystkie potrzebne nam informacje (możemy do nich wrócić w dowolnym momencie):

Testowy projekt

Na potrzeby dzisiejszego tekstu, możemy użyć projekt, który przygotowałem dwa tygodnie temu. Zasadniczo musimy wprowadzić do niego jedną modyfikację - pobieranie Channel URI podczas startu aplikacji. Możemy to zrobić np. w pliku App.xaml.cs.

Najpierw zmieniamy sygnaturę metody OnLaunched dodając do niej słówko kluczowe Async:

protected override async void OnLaunched(LaunchActivatedEventArgs e)

A następnie wewnątrz metody (np. przed inicjalizacją obiektu rootFrame) dodajemy kod:

var channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
Debug.WriteLine(channel.Uri);

To zasadniczo wystarczy na potrzeby naszego przykładu. Podczas testów będziemy musieli spojrzeć w okno Output Window, w celu odczytania Channel URI, który później przekażemy do usługi odpowiedzialnej za wysyłkę pushy.

Testy na emulatorze

Notyfikacje możemy przetestować również na emulatorze. Zaletą tego rozwiązania jest możliwość testów:

  • Bez znajomości Package SID
  • Bez znajomości Client Secret
  • Bez konieczności posiadania urządzenia

Oczywiście w ten sposób bardziej przetestujemy samo odbieranie notyfikacji niż ich poprawne przesyłanie, ale w początkowym etapie developmentu (np. gdy nie dostaliśmy danych konta od klienta), może to być dobra opcja by ruszyć do przodu z pracą.

Aby skorzystać z możliwości dostarczonych w emulatorze Microsoftu, musimy zrobić deploy aplikacji, a następnie włączyć rozszerzenia emulatora i na zakładce Notifications, zaznaczyć ptaszek przy opcji Simulation: Enabled.

W kolejnym kroku powinniśmy odinstalować aplikację i wykonać jej ponowny deploy na emulator. Od tego momentu będziemy mogli wysyłać testowe notyfikacje na wirtualne urządzenie. Jeśli Channel URI nie zostanie poprawnie odczytany z kodu, warto skorzystać z przycisku Refresh, bądź też wykonać ponowny deploy aplikacji.

Przy wysyłaniu notyfikacji, warto pamiętać o zmianie domyślnego tekstu (u mnie generował on błąd) oraz o wybraniu jako typu notyfikacji toast.

Testy na urządzeniu

Pushe są jedną z tych rzeczy, które naprawdę warto jest testować na fizycznym urządzeniu. W tym celu musimy najpierw uzyskać Channel URI. Możemy to zrobić uruchamiając aplikację na urządzeniu deweloperskim z włączonym trybem debugowania.

Po uzyskaniu Channel URI, musimy skorzystać z testowej aplikacji webowej, o której wspominałem już wyżej. Poniżej screen prezentujący poprawne użycie

Wszystkie dane powinniście już mieć:-)

Oczywiście wysyłając notyfikacje Push, możemy również ustawić atrybut launch i przetestować aplikację w taki sposób jak zrobiłem to dwa tygodnie temu.

Podoba Ci się ten wpis? Powiedz o tym innym!

Send to Kindle

Komentarze

blog comments powered by Disqus