Programiści iOS uwielbiają wyobrażać sobie ludzi stale korzystających z ich niesamowitej aplikacji. Ale, oczywiście, użytkownicy czasami będą musieli zamknąć aplikację i wykonywać inne czynności. Pranie samo się nie zwija! Szczęśliwie powiadomienia push pozwalają programistom docierać do użytkowników i wykonywać małe zadania-nawet jeśli użytkownicy nie aktywnie korzystają z aplikacji! W tym samouczku dowiesz się, jak:
- skonfigurować aplikację, aby otrzymywać powiadomienia push.
- wyświetlaj je swoim użytkownikom lub wykonuj inne zadania.
wprowadzenie
czym są powiadomienia push? Są to wiadomości wysyłane do aplikacji za pośrednictwem usługi Apple Push Notification service (APN), nawet jeśli aplikacja nie działa lub telefon jest uśpiony. Do czego można używać powiadomień push?
- wyświetl krótką wiadomość tekstową o nazwie alert, która zwraca uwagę na coś nowego w Twojej aplikacji.
- odtwarza dźwięk powiadomienia.
- Ustaw numer odznaki na ikonie aplikacji, aby poinformować użytkownika o nowych elementach.
- Zapewnij działania, które użytkownik może wykonać bez otwierania aplikacji.
- Pokaż załącznik multimedialny.
- Milcz, pozwalając aplikacji na wykonanie zadania w tle.
- grupuje powiadomienia w wątki.
- Edytuj lub usuń dostarczone powiadomienia.
- Uruchom kod, aby zmienić powiadomienie przed jego wyświetlaniem.
- wyświetl Niestandardowy, interaktywny interfejs użytkownika dla powiadomienia.
- i pewnie nie tylko.
Ten samouczek obejmuje wiele z tych zastosowań, aby pomóc ci rozpocząć tworzenie powiadomień push w aplikacjach. Aby ukończyć ten samouczek, musisz wykonać następujące czynności:
- Xcode 11.4 lub nowszy. Wcześniejsze wersje Xcode nie obsługują powiadomień push za pomocą symulatora.
- członkostwo Apple Developer Program, aby móc skompilować aplikację z uprawnieniem powiadomień Push.
aby wysyłać i odbierać powiadomienia push, musisz wykonać trzy główne zadania:
- skonfiguruj swoją aplikację i zarejestruj ją w APN.
- Wyślij powiadomienie push z serwera do określonych urządzeń za pośrednictwem APN. Zasymulujesz to za pomocą Xcode.
- używaj wywołań zwrotnych w aplikacji do odbierania i obsługi powiadomień push.
wysyłanie powiadomień push jest obowiązkiem komponentu serwerowego Twojej aplikacji. Wiele aplikacji używa stron trzecich do wysyłania powiadomień push. Inni używają niestandardowych rozwiązań lub popularnych bibliotek (takich jak Houston). W tym samouczku będziesz dotykać wysyłania wiadomości push, więc pamiętaj, aby sprawdzić, dokąd iść? sekcja bazująca na twojej wiedzy na temat Powiadomień push.
aby rozpocząć, pobierz projekt startowy WenderCast za pomocą przycisku Pobierz Materiały na górze lub na dole tego samouczka. WenderCast to źródło dla wszystkich raywenderlich.com podcasty i najświeższe wiadomości.
w folderze startowym otwórz WenderCast.xcodeproj. Wybierz WenderCast w Nawigatorze projektu, a następnie wybierz obiekt docelowy WenderCast. W zakładce Ogólne& możliwości wybierz swój zespół programistów. Zbuduj i uruchom w symulatorze.
wendercast wyświetla listę raywenderlich.com podcastów i pozwala użytkownikom na ich odtwarzanie. Ale nie pozwala użytkownikom wiedzieć, kiedy nowy podcast jest dostępny, a zakładka wiadomości jest pusta! Wkrótce rozwiążesz te problemy za pomocą powiadomień push.
wysyłanie i odbieranie powiadomień Push
Konfigurowanie aplikacji
bezpieczeństwo jest bardzo ważne dla powiadomień push. Nie chcesz, aby ktoś inny wysyłał powiadomienia push do użytkowników za pośrednictwem aplikacji. Aby skonfigurować aplikację do bezpiecznego odbierania powiadomień push, musisz wykonać kilka zadań.
włączenie usługi powiadomień Push
najpierw musisz zmienić identyfikator pakietu. W Xcode zaznacz WenderCast w Nawigatorze projektu, a następnie wybierz cel WenderCast. Wybierz Ogólne, a następnie Zmień identyfikator pakietu na unikalny, aby serwer powiadomień push firmy Apple mógł kierować push do tej aplikacji.
następnie musisz utworzyć identyfikator aplikacji na swoim koncie programisty i włączyć uprawnienia powiadomień push. Xcode ma prosty sposób, aby to zrobić: przy nadal wybranym celu WenderCast, kliknij podpisywanie & Capabilities kartę, a następnie kliknij przycisk + Capability. Wpisz „push” w polu filtra i naciśnij Enter.
Po dodaniu uprawnienia powiadomień push Twój projekt powinien wyglądać następująco:
Za kulisami tworzy to identyfikator aplikacji, a następnie dodaje do niego uprawnienia powiadomień push. Możesz zalogować się do Apple Developer Center, aby to sprawdzić:
to wszystko, czego potrzebujesz do skonfigurowania. Jesteś gotowy, aby rozpocząć ulepszanie aplikacji.
Prośba o pozwolenie na powiadomienia użytkownika
Rejestracja powiadomień push obejmuje dwa kroki. Najpierw musisz uzyskać zgodę użytkownika na wyświetlanie powiadomień. Następnie możesz zarejestrować urządzenie, aby otrzymywać powiadomienia zdalne (push). Jeśli wszystko pójdzie dobrze, system dostarczy Ci token urządzenia, który możesz traktować jako „adres” tego urządzenia.
w WenderCast zarejestrujesz się do powiadomień push Natychmiast Po uruchomieniu aplikacji. Najpierw poproś o uprawnienia użytkownika.
Otwórz AppDelegate.swift i dodać następujące do góry pliku:
import UserNotifications
następnie dodaj następującą metodę na końcuAppDelegate
:
func registerForPushNotifications() { //1 UNUserNotificationCenter.current() //2 .requestAuthorization(options: ) { granted, _ in //3 print("Permission granted: \(granted)") }}
co ten kod robi:
-
UNUserNotificationCenter
obsługuje wszystkie działania związane z powiadomieniami w aplikacji, w tym powiadomienia push. - wywołujesz
requestAuthorization(options:completionHandler:)
, aby (zgadłeś) poprosić o autoryzację wyświetlania powiadomień. Przekazanyoptions
wskazuje typy powiadomień, z których ma korzystać Twoja aplikacja – tutaj prosisz o alert, dźwięk i plakietkę. - moduł obsługi zakończenia otrzymuje Bool, który wskazuje, czy autoryzacja zakończyła się pomyślnie. W takim przypadku wystarczy wydrukować wynik.
requestAuthorization(options:completionHandler:)
mogą zawierać dowolną kombinacjęUNAuthorizationOptions
:
- .znaczek: wyświetla numer w rogu ikony aplikacji.
- .dźwięk: Odtwórz dźwięk.
- .alert: wyświetla powiadomienie tekstowe.
- .carPlay: wyświetlanie powiadomień w CarPlay.
- .tymczasowe: po nie przerywających powiadomień. Użytkownik nie otrzyma prośby o pozwolenie, jeśli użyjesz tylko tej opcji, ale powiadomienia będą wyświetlane tylko po cichu w Centrum powiadomień.
- .providesAppNotificationSettings: wskazuje, że aplikacja ma własny interfejs użytkownika dla ustawień powiadomień.
- .criticalAlert: Zignoruj przełącznik wyciszenia i nie przeszkadzać. Aby skorzystać z tej opcji, musisz mieć specjalne uprawnienia od Apple, ponieważ jest ona przeznaczona tylko do bardzo specjalnych zastosowań.
dodaj następującą pozycję na końcuapplication(_:didFinishLaunchingWithOptions:)
, tuż przed return
:
registerForPushNotifications()
wywołanieregisterForPushNotifications()
zapewnia, że aplikacja będzie próbowała zarejestrować powiadomienia push za każdym razem, gdy zostanie uruchomiona.
Zbuduj i uruchom. Po uruchomieniu aplikacji powinien pojawić się monit z prośbą o pozwolenie na wysyłanie powiadomień.
Dotknij Zezwól, i puf! Aplikacja może teraz wyświetlać powiadomienia. Świetnie! Ale co, jeśli użytkownik odmówi uprawnień? Dodaj tę metodę do AppDelegate
:
func getNotificationSettings() { UNUserNotificationCenter.current().getNotificationSettings { settings in print("Notification settings: \(settings)") }}
najpierw określiłeś żądane ustawienia. Ta metoda zwraca ustawienia przyznane przez użytkownika. Na razie je drukujesz, ale wkrótce wrócisz tutaj, aby zrobić z tym więcej.
wregisterForPushNotifications()
, zamień wywołanie narequestAuthorization(options:completionHandler:)
na następujące:
UNUserNotificationCenter.current() .requestAuthorization( options: ) { granted, _ in print("Permission granted: \(granted)") guard granted else { return } self?.getNotificationSettings() }
dodano wywołanie dogetNotificationSettings()
w programie obsługi zakończenia. Jest to ważne, ponieważ użytkownik może w dowolnym momencie przejść do aplikacji Ustawienia i zmienić swoje uprawnienia powiadomień. guard
unika wykonywania tego połączenia w przypadkach, gdy pozwolenie nie zostało udzielone.
rejestracja w APN
teraz, gdy masz uprawnienia, zarejestrujesz się do zdalnych powiadomień!
w getNotificationSettings()
dodaj poniżej print
wewnątrz zamknięcia:
guard settings.authorizationStatus == .authorized else { return }DispatchQueue.main.async { UIApplication.shared.registerForRemoteNotifications()}
tutaj weryfikujesz authorizationStatus
to .authorized
: użytkownik przyznał uprawnienia do powiadamiania. Jeśli tak, zadzwoń do UIApplication.shared.registerForRemoteNotifications()
, aby rozpocząć rejestrację w usłudze powiadomień Push firmy Apple. Musisz wywołać to w głównym wątku, w przeciwnym razie otrzymasz ostrzeżenie o uruchomieniu.
dodaj na końcuAppDelegate
:
func application( _ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { let tokenParts = deviceToken.map { data in String(format: "%02.2hhx", data) } let token = tokenParts.joined() print("Device Token: \(token)")}
ta metoda jest wywoływana przez system iOS za każdym razem, gdy zakończy się wywołanieregisterForRemoteNotifications()
. Kod może wyglądać tajemniczo, ale po prostu bierze odebrany deviceToken
I konwertuje go na ciąg znaków. Token urządzenia jest owocem tego procesu. Jest dostarczany przez APN i jednoznacznie identyfikuje tę aplikację na tym konkretnym urządzeniu.
wysyłając powiadomienie push, serwer używa tokenów jako „adresów” do dostarczenia do odpowiednich urządzeń. W aplikacji, można teraz wysłać ten token do serwera, aby zapisać i wykorzystać później do wysyłania powiadomień.
Dodaj teraz:
func application( _ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Failed to register: \(error)")}
ta metoda zostanie wywołana przez iOS, jeśliregisterForRemoteNotifications()
nie powiedzie się. Na razie tylko drukujesz błąd.
To jest to! Buduj i uciekaj. Ponieważ korzystasz z symulatora, zobaczysz błądFailed to register
. Na razie możesz to zignorować. Później, gdy uruchomisz na prawdziwym urządzeniu, powinieneś otrzymać token na wyjściu konsoli. Oto przykład:
wysyłanie symulowanego powiadomienia Push
Użyj edytora tekstu, aby utworzyć plik o nazwie pierwszy.apn, który przekażesz do narzędzia Xcode simctl. Wklej poniższy tekst JSON i zapisz plik.
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}
struktura tego JSON zostanie wyjaśniona w następnej sekcji. Cierpliwości, koniku polny.
Zbuduj i uruchom aplikację ponownie na symulatorze, a następnie wykonaj aplikację w tle lub zablokuj urządzenie. Aplikacja nie jest jeszcze w stanie przetwarzać powiadomień push na pierwszym planie.
aby korzystać z simctl, musisz znać identyfikator urządzenia symulatora, w którym uruchamiasz aplikację. Jeśli w symulatorze działa tylko jedno urządzenie, możesz użyć booted zamiast identyfikatora. Aby uzyskać identyfikator, w Xcode wybierz Windows ▸ Urządzenia i Symulatory, a następnie wybierz kartę symulatory u góry i wybierz używany symulator z listy po lewej stronie. Użyj myszki, aby skopiować identyfikator. Może być konieczne poszerzenie okna dialogowego, aby je w pełni zobaczyć.
Otwórz aplikację Terminal i przejdź do katalogu, w którym zapisałeś jako pierwszy.apn. Następnie wpisz następujące polecenie używając booted lub identyfikatora urządzenia z Xcode zamiast device_identifier: xcrun simctl push device_identifier bundle_identifier first.apn
. Zastąp device_identifier
identyfikatorem urządzenia skopiowanym z Xcode i zastąp bundle_identifier
identyfikatorem pakietu aplikacji — tym, którego użyłeś podczas pierwszej konfiguracji projektu. Oto przykład:
Uruchom polecenie, a zobaczysz powiadomienie push pojawi się na symulatorze!
dotknij powiadomienia, aby uruchomić aplikację.
czy to nie jest fajne? :]
przeglądanie podstawowego powiadomienia Push
zanim przejdziesz do obsługi powiadomień push, spójrz na treść wysłanego powiadomienia:
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}
ładunek jest słownikiem JSON, który zawiera co najmniej jeden element, aps, który jest również słownikiem. W tym przykładzie aps
zawiera pola alert
sound
I link_url
. Gdy urządzenie otrzyma to powiadomienie push, wyświetli widok alertu z tekstem ” Breaking News!”i odtwarza standardowy efekt dźwiękowy.
link_url
jest w rzeczywistości polem niestandardowym. Możesz dodać niestandardowe pola do ładunku w ten sposób, a zostaną one dostarczone do Twojej aplikacji. Ponieważ nie obsługujesz go jeszcze w aplikacji, Ta para klucz/wartość obecnie nic nie robi.
link_url
powinny znajdować się na poziomie równym wpisowi słownika aps
, a nie wewnątrz niego. Nadal działa, jeśli umieścisz go w środku, ale zawsze sugerujemy przestrzeganie dokumentacji Apple i poprawi to w naszej następnej aktualizacji tego samouczka.istnieje osiem wbudowanych kluczy, które można dodać do słownikaaps
(zobacz oficjalny numer klucza ładunku, aby uzyskać więcej informacji):
- alert: Może to być ciąg znaków, jak w poprzednim przykładzie, lub słownik. Jako słownik może zlokalizować tekst lub zmienić inne aspekty powiadomienia.
- znaczek: jest to liczba, która zostanie wyświetlona w rogu ikony aplikacji. Możesz usunąć odznakę, ustawiając ją na 0.
- dźwięk: nazwa pliku niestandardowego dźwięku powiadomienia znajdującego się w aplikacji. Muszą być krótsze niż 30 sekund.
- thread-id: Użyj tego klucza do grupowania powiadomień.
- category: określa kategorię powiadomienia, która jest używana do wyświetlania niestandardowych działań w powiadomieniu. Wkrótce to odkryjesz.
- content-available: ustawiając ten klucz na
1
, powiadomienie push staje się ciche. Dowiesz się o tym w sekcji cichych powiadomień Push poniżej. - mutable-content: ustawiając ten klucz na
1
, Twoja aplikacja może zmodyfikować powiadomienie przed jego wyświetlaniem. - target-content-id: jest to identyfikator wywołanego okna.
poza nimi możesz dodać tyle danych niestandardowych, ile chcesz, o ile ładunek nie przekracza 4096 bajtów.
gdy już masz dość zabawy, wypróbowując te opcje i wysyłając powiadomienia push do symulatora, przejdź do następnej sekcji!
Obsługa powiadomień Push
w tej sekcji dowiesz się, jak wykonywać czynności, gdy aplikacja otrzymuje powiadomienia i gdy użytkownicy je stukają.
zrozumienie, co się dzieje, gdy otrzymasz powiadomienie Push
gdy Twoja aplikacja otrzyma powiadomienie push, iOS wywołuje metodę wUIApplicationDelegate
.
musisz obsłużyć powiadomienie w różny sposób, w zależności od tego, w jakim stanie jest Twoja aplikacja po otrzymaniu powiadomienia:
- Jeśli Twoja aplikacja nie była uruchomiona, a użytkownik uruchamia ją, dotykając powiadomienia push, iOS przekazuje powiadomienie do Twojej aplikacji w
launchOptions
zapplication(_:didFinishLaunchingWithOptions:)
. - Jeśli Twoja aplikacja była uruchomiona na pierwszym planie lub w tle, system powiadomi Twoją aplikację, wywołując
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
. Gdy użytkownik otworzy aplikację, dotykając powiadomienia push, system iOS może ponownie wywołać tę metodę, dzięki czemu można zaktualizować interfejs użytkownika i wyświetlić odpowiednie informacje.
w pierwszym przypadku WenderCast utworzy element wiadomości i otworzy się bezpośrednio w zakładce Aktualności. W AppDelegate.swift, Dodaj następujący kod na końcu application(_:didFinishLaunchingWithOptions:)
, tuż przed instrukcją return:
// Check if launched from notificationlet notificationOption = launchOptions?// 1if let notification = notificationOption as? , let aps = notification as? { // 2 NewsItem.makeNewsItem(aps) // 3 (window?.rootViewController as? UITabBarController)?.selectedIndex = 1}
oto, co robisz:
- sprawdź, czy wartość dla
UIApplication.LaunchOptionsKey.remoteNotification
istnieje wlaunchOptions
. Jeśli tak, Twoja aplikacja została uruchomiona z powiadomienia. Będzie to zawierać przesyłany ładunek powiadomień push. - ponieważ istnieje słownik
aps
, utwórz z nimNewsItem
. - Zmień wybraną kartę kontrolera kart na sekcję aktualności.
aby to przetestować, musisz edytować schemat WenderCast. Najpierw Zbuduj i uruchom, aby zainstalować najnowszy kod na symulatorze. Następnie kliknij schemat WenderCast i wybierz Edytuj schemat…:
wybierz Uruchom z paska bocznego, a następnie w zakładce Informacje wybierz poczekaj na uruchomienie pliku wykonywalnego:
Ta opcja sprawi, że debugger będzie czekał na uruchomienie aplikacji po raz pierwszy po uruchomieniu instalowanie, aby dołączyć do niego.
Zbuduj i uruchom. Po zakończeniu instalacji, wyślij więcej najświeższych wiadomości za pomocą xcrun simctl
jak wcześniej. Stuknij powiadomienie, a aplikacja otworzy się na wiadomości:
aby poradzić sobie z sytuacją, w której aplikacja jest uruchomiona po otrzymaniu powiadomienia push, Dodaj do AppDelegate
:
func application( _ application: UIApplication, didReceiveRemoteNotification userInfo: , fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) { guard let aps = userInfo as? else { completionHandler(.failed) return } NewsItem.makeNewsItem(aps)}
to próbuje wyodrębnić punkty dostępowe z dostarczonego userInfo
obiekt i, jeśli się powiedzie, tworzy z niego nowy NewsItem
.
ponieważ iOS wywołuje tę metodę, gdy aplikacja jest uruchomiona, musisz zmienić schemat z powrotem na automatyczne uruchamianie aplikacji, aby ją przetestować. W edytorze Scheme w obszarze Uruchom wybierz opcję Automatycznie.
Zbuduj i uruchom. Zachowaj aplikację działającą na pierwszym planie i na karcie wiadomości. Wyślij kolejne powiadomienie push o nowościach i obejrzyj je w kanale:
To wszystko! Twoja aplikacja może teraz w magiczny sposób otrzymywać najświeższe wiadomości. :]
praca z wykonywalnymi powiadomieniami
wykonywalne powiadomienia umożliwiają dodawanie niestandardowych przycisków do samego powiadomienia. Być może zauważyłeś to w powiadomieniach e-mail lub tweetach, które umożliwiają „odpowiedź” lub „Ulubione” na miejscu.
Twoja aplikacja może definiować powiadomienia, które można wykonać podczas rejestracji, używając kategorii. Każda kategoria powiadomienia może mieć kilka wstępnie ustawionych działań niestandardowych.
Po zarejestrowaniu serwer może ustawić kategorię powiadomienia push. Odpowiednie działania będą dostępne dla użytkownika po otrzymaniu.
dla WenderCast zdefiniujesz kategorię wiadomości z niestandardową akcją o nazwie View. Ta akcja pozwoli użytkownikom na przeglądanie wiadomości w aplikacji, jeśli zdecydują się.
wregisterForPushNotifications()
, wstaw poniższy tekst tuż pod strażą i nad wywołaniem do getNotificationSettings()
:
// 1let viewAction = UNNotificationAction( identifier: Identifiers.viewAction, title: "View", options: )// 2let newsCategory = UNNotificationCategory( identifier: Identifiers.newsCategory, actions: , intentIdentifiers: , options: )// 3UNUserNotificationCenter.current().setNotificationCategories()
przechodząc przez to, krok po kroku:
- Utwórz nową akcję powiadomień z widokiem tytułu na przycisku, która otwiera aplikację na pierwszym planie po uruchomieniu. Akcja ma odrębny identyfikator, którego system iOS używa do rozróżniania innych akcji w tym samym powiadomieniu.
- definiuje kategorię wiadomości, która będzie zawierać akcję view. Ma to również odrębny identyfikator, który będzie musiał zawierać ładunek, aby określić, że powiadomienie push należy do tej kategorii.
- zarejestruj nowe powiadomienie, wywołując
setNotificationCategories
.
Zbuduj i uruchom aplikację, aby zarejestrować nowe ustawienia powiadomień.
tło aplikacji, a następnie wyślij następujący ładunek za pomocąxcrun simctl
narzędzie:
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}
gdy pojawi się powiadomienie, pociągnij go, aby wyświetlić działanie widoku:
ładnie! Dotknięcie widoku uruchomi WenderCast, ale nie robi jeszcze nic ekscytującego. Aby go wyświetlić, musisz zrobić więcej obsługi zdarzeń w delegacie.
Obsługa akcji powiadamiania
za każdym razem, gdy zostanie uruchomiona akcja powiadamiania, UNUserNotificationCenter
informuje swojego delegata. Z powrotem w AppDelegate.swift, dodaj następujące rozszerzenie klasy na dole pliku:
// MARK: - UNUserNotificationCenterDelegateextension AppDelegate: UNUserNotificationCenterDelegate { func userNotificationCenter( _ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void ) { // 1 let userInfo = response.notification.request.content.userInfo // 2 if let aps = userInfo as? , let newsItem = NewsItem.makeNewsItem(aps) { (window?.rootViewController as? UITabBarController)?.selectedIndex = 1 // 3 if response.actionIdentifier == Identifiers.viewAction, let url = URL(string: newsItem.link) { let safari = SFSafariViewController(url: url) window?.rootViewController? .present(safari, animated: true, completion: nil) } } // 4 completionHandler() }}
To jest wywołanie zwrotne, które otrzymasz, gdy aplikacja otworzy się z powodu niestandardowej akcji. Może się wydawać, że dużo się dzieje, ale nie ma tu zbyt wiele nowości:
- Pobierz
userInfo
słownik. - Utwórz
NewsItem
ze słownikaaps
I przejdź do zakładki Aktualności. - Sprawdź
actionIdentifier
. Jeśli jest to akcja „Widok”, a link jest prawidłowym adresem URL, wyświetla link wSFSafariViewController
. - wywołanie funkcji wypełniania, którą system przekazuje do ciebie.
jest jeszcze jeden ostatni bit: musisz ustawić delegata naUNUserNotificationCenter
. Dodaj tę linię do góry application(_:didFinishLaunchingWithOptions:)
:
UNUserNotificationCenter.current().delegate = self
Zbuduj i uruchom. Zamknij ponownie aplikację, a następnie wyślij kolejne powiadomienie o nowościach z następującym ładunkiem:
{ "aps": { "alert": "New Posts!", "sound": "default", "link_url": "https://raywenderlich.com", "category": "NEWS_CATEGORY" }}
pociągnij powiadomienie i dotknij akcji Widok, a zobaczysz, jak WenderCast prezentuje kontroler widoku Safari zaraz po uruchomieniu:
Gratulacje, zaimplementowałeś powiadomienie z możliwością działania! Wyślij jeszcze kilka i spróbuj otworzyć powiadomienie na różne sposoby, aby zobaczyć, jak się zachowuje.
wysyłanie na prawdziwe urządzenie
Jeśli nie chcesz wysyłać powiadomień push na prawdziwe urządzenie lub nie potrzebujesz jeszcze cichych powiadomień push, możesz pominąć tę sekcję i przejść do sekcji Gdzie iść?
Jeśli jednak chcesz dowiedzieć się, jak wysyłać powiadomienia push do prawdziwego urządzenia i spróbować silent push, musisz wykonać dodatkową konfigurację. Pobierz narzędzie PushNotifications. Będziesz używać tej aplikacji narzędzia do wysyłania powiadomień do prawdziwego urządzenia. Aby go zainstalować, postępuj zgodnie z instrukcjami w sekcji Jak zainstalować. Zwróć szczególną uwagę na to, jak otworzyć aplikację, ponieważ musisz zmienić niektóre ustawienia, aby uruchomić to narzędzie.
przejdź do centrum programistów Apple i zaloguj się.
wysyłanie powiadomień push wymaga klucza uwierzytelniania. W centrum członków wybierz certyfikaty, identyfikatory & profile, a następnie znajdź klucze w lewym okienku. Po prawej stronie tytułu klawiszy znajduje się przycisk+. Kliknij go, aby utworzyć nowy klucz.
nadaj kluczowi nazwę, np. Push Notification Key. W obszarze Usługi kluczowe wybierz usługę powiadomień Push Apple (APN).
kliknij Kontynuuj, a następnie zarejestruj się na następnym ekranie, aby utworzyć nowy klucz. Dotknij Pobierz. Pobrany plik będzie miał nazwę podobną do AuthKey_4SVKWF966R. p8. Śledź ten plik-będziesz go potrzebował do wysyłania powiadomień! Część 4SVKWF966R nazwy pliku jest identyfikatorem klucza. Przyda ci się też to.
ostatnim elementem, którego potrzebujesz, jest identyfikator zespołu. Przejdź do strony szczegółów członkostwa centrum członków, aby je znaleźć.
udało Ci się! Dzięki nowemu kluczowi możesz teraz wysłać swoje pierwsze powiadomienie push! Potrzebujesz jeszcze jednej rzeczy.
Uruchom aplikację na prawdziwym urządzeniu i skopiuj token Urządzenia z konsoli debuggera i przygotuj go.
Uruchom PushNotifications i wykonaj następujące kroki:
- w obszarze Uwierzytelnianie wybierz Token.
- kliknij przycisk Wybierz P8 i wybierz .plik p8 z poprzedniej sekcji.
- wprowadź swój identyfikator klucza i identyfikator zespołu w odpowiednich polach.
- w sekcji Body wprowadź identyfikator pakietu aplikacji i token urządzenia.
- Zmień treść żądania tak, aby wyglądała tak:
{ "aps": { "alert": "Breaking News!", "sound": "default", "link_url": "https://raywenderlich.com" }}
kliknij przycisk Wyślij w przycisku PushNotifications.
powinieneś otrzymać powiadomienie push:
rozwiązywanie typowych problemów
oto kilka problemów, które możesz napotkać:
- niektóre powiadomienia przychodzą, ale nie wszystko: jeśli wysyłasz wiele powiadomień push jednocześnie, ale otrzymujesz tylko kilka, nie obawiaj się! To z założenia. APNs utrzymuje kolejkę QoS (Quality of Service) dla każdego urządzenia. Rozmiar tej kolejki wynosi 1, więc jeśli wysyłasz wiele powiadomień, Ostatnie powiadomienie zostanie nadpisane.
- Problem z połączeniem się z usługą powiadomień Push: jedną z możliwości może być firewall blokujący porty używane przez APN. Upewnij się, że odblokowujesz te porty.
Korzystanie z cichych powiadomień Push
cichych powiadomień push może obudzić aplikację po cichu, aby wykonać niektóre zadania w tle. WenderCast może użyć tej funkcji, aby po cichu odświeżyć listę podcastów.
z odpowiednim komponentem serwera może to być bardzo wydajne. Twoja aplikacja nie będzie musiała stale wyszukiwać danych. Możesz wysłać mu ciche powiadomienie push, gdy tylko nowe dane są dostępne.
aby rozpocząć, ponownie wybierz obiekt docelowy WenderCast. Teraz kliknij kartę podpisywanie& możliwości i dodaj możliwość trybów tła. Następnie zaznacz opcję powiadomienia zdalne:
Teraz Twoja aplikacja obudzi się w tle, gdy otrzyma jeden z tych powiadomień push.
w AppDelegate.swift, znajdź application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
. Zastąp wywołanie na NewsItem.makeNewsItem()
następującymi wpisami:
// 1if aps as? Int == 1 { let podcastStore = PodcastStore.sharedStore // 2 podcastStore.refreshItems { didLoadNewItems in // 3 completionHandler(didLoadNewItems ? .newData : .noData) }} else { // 4 NewsItem.makeNewsItem(aps) completionHandler(.newData)}
przechodząc przez kod:
- sprawdzasz, czy
content-available
jest ustawione na 1. Jeśli tak, to jest to ciche powiadomienie. - odświeżasz listę podcastów, która jest asynchronicznym wywołaniem sieciowym.
- Po zakończeniu odświeżania, zadzwoń do modułu obsługi uzupełniania, aby poinformować system, czy aplikacja załadowała nowe dane.
- Jeśli nie jest to ciche powiadomienie, to jest to news, więc zrób News.
pamiętaj, aby zadzwonić do obsługi zakończenia z uczciwym wynikiem. System mierzy zużycie baterii i czas, który aplikacja wykorzystuje w tle, a w razie potrzeby może zdławić aplikację.
To wszystko. Aby go przetestować, Zbuduj i uruchom aplikację i naciśnij następujący ładunek za pomocą narzędzia PushNotifications:
{ "aps": { "content-available": 1 }}
Jeśli wszystko pójdzie dobrze, nic nie powinno się wydarzyć, chyba że nowy podcast został właśnie dodany do zdalnej bazy danych. Aby potwierdzić, że kod działa zgodnie z oczekiwaniami, ustaw punkt przerwania w application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
I przejdź przez niego po wysłaniu powiadomienia.
gdzie stąd iść?
Gratulacje! Ukończyłeś ten samouczek i zrobiłeś WenderCast w pełni funkcjonalną aplikację z powiadomieniami push!
możesz pobrać ukończony projekt za pomocą przycisku Pobierz Materiały na górze lub na dole tego samouczka.
chcesz zagłębić się we wszystko, co możesz zrobić z powiadomieniami push, takimi jak tworzenie niestandardowych interfejsów użytkownika i wysyłanie krytycznych alertów? Nasza książka z samouczkami powiadomień Push nauczy Cię zaawansowanych funkcji powiadomień push.
kolejnym zasobem jest samouczek powiadomień Push dla systemu iOS: Rich Push Notifications tutorial.
mimo że powiadomienia push są ważną częścią nowoczesnych aplikacji, bardzo często użytkownicy odmawiają uprawnień do aplikacji, jeśli przesadzisz z powiadomieniami. Ale dzięki przemyślanemu projektowi powiadomienia push mogą sprawić, że użytkownicy będą wracać do aplikacji raz po raz!
Ten kot otrzymał powiadomienie push, że jego obiad jest gotowy!
mam nadzieję, że podobał Ci się ten samouczek powiadomień push. Jeśli masz jakieś pytania, zostaw je na poniższym forum dyskusyjnym.
raywenderlich.com tygodniowy
raywenderlich.com newsletter to najprostszy sposób, aby być na bieżąco ze wszystkim, co musisz wiedzieć jako programista mobilny.
Otrzymuj cotygodniowy przegląd naszych samouczków i kursów, a otrzymasz darmowy pogłębiony kurs e-mail jako bonus!
Średnia ocena
4.9/5
dodaj ocenę dla tej treści
Zaloguj się, aby dodać ocenę