3 grudnia 2024
Notyfikacje push (ang. push notifications) – to powiadomienia, które otrzymujemy zaraz po tym jak ktoś, np. wyśle nam wiadomość przez komunikator, taki jak: Messenger, slack czy bitrix. Są one obsługiwane przez różne systemy operacyjne (tak, aktualne komputery z Windows 10 też obsługują taką technologię) oraz przez różne aplikacje, takie jak: przeglądarka, gra napisana w Unity czy aplikacja mobilna).
Ale jak to się dzieje, że nie musimy się martwić tym, czy mamy włączony komunikator? Opowiada za to tzw. Service Worker – usługa działająca w tle, która może także zostać wykorzystana do np. synchronizacji danych w tle. Oczywiście w tym przypadku rodzi się pytanie – co z bezpieczeństwem takiego rozwiązania? Przecież ktoś mógłby wykorzystać nasz sprzęt kiedy z niego nie korzystamy do niecnych celów!
Uspokajamy – zabezpieczenia tej technologii nie pozwalają niepowołanym osobom na dostęp do uprawnień i funkcji pozwalających na przejęcie kontroli nad naszym urządzeniem.
Technologia Google Firebase daje dostęp do wielu rozwiązań np. autentykacji, obsługi plików w chmurze, konfiguracji bez potrzeby deploymentu i wiele, wiele więcej w tym także do tego co nas interesuje, czyli obsługi wiadomości w aplikacji.
Od strony programistycznej sposób wygląda tak – wysyłamy z serwera zapytanie do serwerów Google, gdzie stoi Firebase, a gdy telefon jest dostępny w sieci, Firebase wysyła do niego wiadomość. Likwiduje to problem braku łączności z Internetem – po prostu wiadomości (zapytania) grupują się w chmurze Google, która nie wymaga od nas pisania dodatkowego kodu.
https://firebase.google.com/docs/cloud-messaging/js/client
Musimy przejść do konsoli Firebase i utworzyć projekt, z niego uzyskać klucz serwera, nazwę aplikacji oraz identyfikator nadawcy – jest to potrzebne do autentykacji z serwerem.
https://console.developers.google.com/apis/dashboard
To co zrobiliśmy przed chwilą służy nam tylko do odbierania wiadomości ze strony klienta. Jeżeli chcemy wysyłać wiadomości, musimy wejsć do chmury google, utworzyć odpowiedni interfejs i odblokować API Firebase Messaging wraz z odpowiednim uprawnieniem (inaczej dostaniemy błąd niedostatecznych uprawnień). Przyznam się szczerze że nie zagłębiałem się w każdy typ uprawnień osobno i po prostu przydzieliłem konto właściciela.
Będziemy stąd potrzebowali plik json z danymi logowania takimi jak klucz prywatny, poprzez analogiczną zakładkę.
path('firebase-messaging-sw.js', ServiceWorkerView.as_view(), name='service_worker'),
Firebase domyślnie ładuje plik firebase-messaging-sw.js z katalogu głównego. Wystarczy iż zdefiniujemy widok, który będzie zwracał ten plik pod urlem właśnie takim, jak nazwa pliku.
class ServiceWorkerView(TemplateView):
def get(self, request, *args, **kwargs):
service_url = os.path.join(BASE_DIR, 'templates/firebase-messaging-sw.js')
return render(request, service_url, content_type="application/x-javascript")
Gdy mamy wszystkie dane, potrzebujemy zakodzić naszą „usługę” która będzie wysyłała wiadomość do tokena naszego urządzenia, gdy zostanie wykryta zmiana np. dodany nowy artykuł na stronę – ja dla samych testów napisałem komendę która robi dokładnie to, tylko bez szczególnego wyzwalacza:
def send_to_token():
message = messaging.Message(
data={
'score': '850',
'time': '2:45',
},
token='f1TbiTptFfk:APA91bGEyE-aIXaX2A-aOXmgT8syfJJFTVHE0ZuZAzE9xsJYXVltNcKrHIPKkijODGrKXVlueEuIqTHwD1uSKU6kFc0hY-pKxAb_LFgk9_fUT6DhIeUrUhE4ONQ6qOmWMLIeEMgNApsa'
)
response = messaging.send(message)
print('Successfully sent message:', response)
class Command(BaseCommand):
help = 'Send example message to FireBase app'
def add_arguments(self, parser):
pass
def handle(self, *args, **options):
send_to_token()
Wcześniej musimy zainicjować naszą aplikację za pomocu odpowiedniego kodu:
import firebase_admin
from django.core.management.base import BaseCommand
from firebase_admin import credentials, messaging
from project.settings import BASE_DIR
creds = credentials.Certificate(os.path.join(BASE_DIR, 'webtechnika.json'))
default_app = firebase_admin.initialize_app(creds)
Teraz, będziemy musieli zaprogramować handler wiadomości w JavaScripcie lub naszej aplikacji – i to zadanie, zostawiam tobie czytelniku :) Mamy masę możliwości – musimy zaprogramować odbieranie tokena i przekazywanie np. poprzez Ajaxa do serwera, napisać odpowiedniego service workera który będzie odbierał nam wiadomości w tle i to by było wszystko. Całość odpowiednio opisane pod różne technologie znajdziemy tutaj:
https://firebase.google.com/docs/cloud-messaging/
Wszystko powinno nie zająć więcej niż 200 linii kodu i nie jest to nic skomplikowanego. Jeżeli chcemy pisać to w javascripcie trzeba pamiętać by odwoływać się do klasy firebase i firebase.messaging, wcześniej zainicjować aplikację i napisać odpowiedni handler eventów.
To wszystko jeżeli chodzi o Push Notyfikacje. Oczywiście Firebase pozwala na znacznie więcej, ale o tym będą kolejne artykuły na naszej stronie :) Mam nadzieję że ułatwiłem zrozumienie tej techologii oraz sposób jej wykorzystania.