Differences
This shows you the differences between two versions of the page.
| Both sides previous revision Previous revision Next revision | Previous revision | ||
|
laboratoare:laborator08 [2015/04/27 16:39] Andrei Roșu-Cojocaru |
laboratoare:laborator08 [2015/04/27 23:39] (current) Andrei Roșu-Cojocaru |
||
|---|---|---|---|
| Line 72: | Line 72: | ||
| * Se identifică **numărul de proiect** care va fi utilizat de dispozitivul mobil pentru a se înregistra la serverul Google Cloud Messaging for Android (''SENDER_ID''), acesta putând fi preluat din: | * Se identifică **numărul de proiect** care va fi utilizat de dispozitivul mobil pentru a se înregistra la serverul Google Cloud Messaging for Android (''SENDER_ID''), acesta putând fi preluat din: | ||
| * bara de adrese a aplicației de navigare {{ :laboratoare:laborator08:project_number01.png?nolink }} | * bara de adrese a aplicației de navigare {{ :laboratoare:laborator08:project_number01.png?nolink }} | ||
| - | * secțiunea //Overview// a consolei Google API {{ :laboratoare:laborator08:project_number02.png?nolink&1200 }} | + | * secțiunea //Overview// a consolei Google API {{ :laboratoare:laborator08:project_number02.png?nolink&1000 }} |
| * Se activează API-ul //Cloud Messaging for Android// din secțiunea //Mobile APIs//, ce poate fi accesată din //APIs & auth// → //APIs// a consolei Google API. | * Se activează API-ul //Cloud Messaging for Android// din secțiunea //Mobile APIs//, ce poate fi accesată din //APIs & auth// → //APIs// a consolei Google API. | ||
| Line 92: | Line 92: | ||
| **2.** Se instalează SDK-ul Google Play Services, necesară autentificării / deautentificării la Google Cloud Messaging for Android din cadrul aplicației instalată pe dispozitivul mobil. | **2.** Se instalează SDK-ul Google Play Services, necesară autentificării / deautentificării la Google Cloud Messaging for Android din cadrul aplicației instalată pe dispozitivul mobil. | ||
| * În Eclipse Luna, se accesează //Android SDK Manager// | * În Eclipse Luna, se accesează //Android SDK Manager// | ||
| - | * din bara de unelte\\ {{ :laboratoare:laborator08:eclipse_toolbar.png?nolink }} | + | * din bara de unelte\\ {{ :laboratoare:laborator08:eclipse_toolbar.png?nolink&900 }} |
| * din meniul principal, //Window// → //Android SDK Manager// | * din meniul principal, //Window// → //Android SDK Manager// | ||
| - | * Se selectează următoarele pachete:\\ {{ :laboratoare:laborator08:android_sdk_manager.png?nolink }} | + | * Se selectează următoarele pachete:\\ {{ :laboratoare:laborator08:android_sdk_manager.png?nolink&600 }} |
| * din secțiunea ''Android 4.1.2 (API 16)'', pachetul ''Google APIs'' | * din secțiunea ''Android 4.1.2 (API 16)'', pachetul ''Google APIs'' | ||
| * din sețiunea //Extras//, pachetul //Google Play Services// | * din sețiunea //Extras//, pachetul //Google Play Services// | ||
| Line 104: | Line 104: | ||
| * **AVD** | * **AVD** | ||
| - | * se creează un dispozitiv virtual pentru care va specifica la secțiunea //Target// valoarea //Google APIs (Google Inc.)//\\ {{ :laboratoare:laborator08:android_virtual_device01.png?nolink }} | + | * se creează un dispozitiv virtual pentru care va specifica la secțiunea //Target// valoarea //Google APIs (Google Inc.)//\\ {{ :laboratoare:laborator08:android_virtual_device01.png?nolink&400 }} |
| * se asociază datele unui cont Google (nume de utilizator, parola) din //Settings// → //Accounts//, selectându-se opțiunea //Add account//\\ {{ :laboratoare:laborator08:android_virtual_device02.png?nolink }} | * se asociază datele unui cont Google (nume de utilizator, parola) din //Settings// → //Accounts//, selectându-se opțiunea //Add account//\\ {{ :laboratoare:laborator08:android_virtual_device02.png?nolink }} | ||
| * **Genymotion** - vor trebui instalate manual ''ARM Transalation'' și ''Google Apps for Android'' întrucât suportul pentru acestea nu mai este asigurat începând cu versiunea 2.0 | * **Genymotion** - vor trebui instalate manual ''ARM Transalation'' și ''Google Apps for Android'' întrucât suportul pentru acestea nu mai este asigurat începând cu versiunea 2.0 | ||
| - | * în //Settings// → //ADB// → //ADB Connection Settings// se indică locația unde se găsește instalat SDK-ul de Android\\ {{ :laboratoare:laborator08:genymotion_settings.png?nolink }} | + | * în //Settings// → //ADB// → //ADB Connection Settings// se indică locația unde se găsește instalat SDK-ul de Android\\ {{ :laboratoare:laborator08:genymotion_settings.png?nolink&400 }} |
| * se instalează [[http://pdsd2014.andreirosucojocaru.ro/Genymotion-ARM-Translation_v1.1.zip|ARM Translation 1.1]] printr-o operație de tip drag-and-drop în ecranul principal al emulatorului | * se instalează [[http://pdsd2014.andreirosucojocaru.ro/Genymotion-ARM-Translation_v1.1.zip|ARM Translation 1.1]] printr-o operație de tip drag-and-drop în ecranul principal al emulatorului | ||
| * se afișează o fereastră de dialog ce va conține mesajul ''File transfer in progress...''\\ {{ :laboratoare:laborator08:file_transfer_in_progress.png?nolink }} | * se afișează o fereastră de dialog ce va conține mesajul ''File transfer in progress...''\\ {{ :laboratoare:laborator08:file_transfer_in_progress.png?nolink }} | ||
| Line 119: | Line 119: | ||
| * [[http://pdsd2014.andreirosucojocaru.ro/gapps-jb-20121011-signed.zip|Google Apps for Android 4.1]] | * [[http://pdsd2014.andreirosucojocaru.ro/gapps-jb-20121011-signed.zip|Google Apps for Android 4.1]] | ||
| * indiferent de rezultat, se repornește emulatorul prin comanda\\ <code>adb -s 192.168.56.101:5555 reboot</code> (respectiv ''adb reboot'') | * indiferent de rezultat, se repornește emulatorul prin comanda\\ <code>adb -s 192.168.56.101:5555 reboot</code> (respectiv ''adb reboot'') | ||
| - | * se asociază datele unui cont Google (nume de utilizator, parola) din //Settings// → //Accounts//, selectându-se opțiunea //Add account//\\ {{ :laboratoare:laborator08:google_account_setup01.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup02.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup03.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup04.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup05.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup06.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup07.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup08.png?nolink }}\\ {{ :laboratoare:laborator08:google_account_setup09.png?nolink }} | + | * se asociază datele unui cont Google (nume de utilizator, parola) din //Settings// → //Accounts//, selectându-se opțiunea //Add account//\\ {{ :laboratoare:laborator08:google_account_setup01.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup02.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup03.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup04.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup05.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup06.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup07.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup08.png?nolink&400 }}\\ {{ :laboratoare:laborator08:google_account_setup09.png?nolink&400 }} |
| - | * se actualizează //Play Store// prin accesarea opțiunii //Settings// de mai multe ori (procesul de actualizare va fi pornit în fundal, în mod automat)\\ {{ :laboratoare:laborator08:google_account_setup10.png?nolink }} | + | * se actualizează //Play Store// prin accesarea opțiunii //Settings// de mai multe ori (procesul de actualizare va fi pornit în fundal, în mod automat)\\ {{ :laboratoare:laborator08:google_account_setup10.png?nolink&400 }} |
| **4.** În situația în care se va folosi un server CCS (XMPP), în prezent, nu mai este necesară o înregistrare suplimentară pentru a se obține acceptul Google de a utiliza serviciul de transmitere a mesajelor de pe dispozitivul mobil. Anterior, o astfel de solicitare trebuia transmisă la [[https://services.google.com/fb/forms/gcm/|Upstream Google Cloud Messaging and User Notifications Sign-up]]. | **4.** În situația în care se va folosi un server CCS (XMPP), în prezent, nu mai este necesară o înregistrare suplimentară pentru a se obține acceptul Google de a utiliza serviciul de transmitere a mesajelor de pe dispozitivul mobil. Anterior, o astfel de solicitare trebuia transmisă la [[https://services.google.com/fb/forms/gcm/|Upstream Google Cloud Messaging and User Notifications Sign-up]]. | ||
| Line 131: | Line 131: | ||
| **6**. Se descarcă cea mai recentă versiune stabilă a mediului de dezvoltare Eclipse IDE for Java EE Developers (Windows: [[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-win32.zip|32-bit]]|[[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-win32-x86_64.zip|64-bit]], Linux: [[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-linux-gtk.tar.gz|32-bit]]|[[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz|64-bit]]) și se integrează cu serverul web Apache Tomcat. | **6**. Se descarcă cea mai recentă versiune stabilă a mediului de dezvoltare Eclipse IDE for Java EE Developers (Windows: [[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-win32.zip|32-bit]]|[[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-win32-x86_64.zip|64-bit]], Linux: [[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-linux-gtk.tar.gz|32-bit]]|[[http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/luna/SR2/eclipse-jee-luna-SR2-linux-gtk-x86_64.tar.gz|64-bit]]) și se integrează cu serverul web Apache Tomcat. | ||
| - | * //Window// → //Preferences// → //Server// → //Runtime Environments// și se accesează butonul //Add...//\\ {{ :laboratoare:laborator08:server_configuration01.png?nolink }} | + | * //Window// → //Preferences// → //Server// → //Runtime Environments// și se accesează butonul //Add...//\\ {{ :laboratoare:laborator08:server_configuration01.png?nolink&500 }} |
| - | * se specifică tipul serverului web (''Apache Tomcat v8.0'')\\ {{ :laboratoare:laborator08:server_configuration02.png?nolink }} | + | * se specifică tipul serverului web (''Apache Tomcat v8.0'')\\ {{ :laboratoare:laborator08:server_configuration02.png?nolink&500 }} |
| - | * se precizează locația la care se găsește serverul web (directorul în care a fost dezarhivat, fără alte configurări) și versiunea de Java Runtime Environment\\ {{ :laboratoare:laborator08:server_configuration03.png?nolink }} | + | * se precizează locația la care se găsește serverul web (directorul în care a fost dezarhivat, fără alte configurări) și versiunea de Java Runtime Environment\\ {{ :laboratoare:laborator08:server_configuration03.png?nolink&500 }} |
| <note tip>Se oferă și posibilitatea descărcării și instalării unei instanțe a serverului web Apache Tomcat, însă de regulă aceasta nu referă cea mai recentă versiune.</note> | <note tip>Se oferă și posibilitatea descărcării și instalării unei instanțe a serverului web Apache Tomcat, însă de regulă aceasta nu referă cea mai recentă versiune.</note> | ||
| - | {{ :laboratoare:laborator08:server_configuration04.png?nolink }} | + | {{ :laboratoare:laborator08:server_configuration04.png?nolink&500 }} |
| - | * //Window// → //Show View// → //Other...// → //Servers// → //Server// și se accesează legătura //No servers are available. Click this link to create a new server...// sau click pe butonul drept al mouse-ului în spațiul de lucru //Server// → //New// → //Server//\\ {{ :laboratoare:laborator08:server_configuration05.png?nolink }}\\ {{ :laboratoare:laborator08:server_configuration06.png?nolink }} | + | * //Window// → //Show View// → //Other...// → //Servers// → //Server// și se accesează legătura //No servers are available. Click this link to create a new server...// sau click pe butonul drept al mouse-ului în spațiul de lucru //Server// → //New// → //Server//\\ {{ :laboratoare:laborator08:server_configuration05.png?nolink }}\\ {{ :laboratoare:laborator08:server_configuration06.png?nolink&800 }} |
| - | * se selectează serverul web definit anterior și se accesează butonul //Finish//\\ {{ :laboratoare:laborator08:server_configuration07.png?nolink }} | + | * se selectează serverul web definit anterior și se accesează butonul //Finish//\\ {{ :laboratoare:laborator08:server_configuration07.png?nolink&500 }} |
| - | * se asociază proiectului un server web pe care va rula: click pe butonul drept al mouse-ului pe denumirea proiectului → //Properties// → //Server// și se selectează serverul web definit anterior\\ {{ :laboratoare:laborator08:server_configuration08.png?nolink }} | + | * se asociază proiectului un server web pe care va rula: click pe butonul drept al mouse-ului pe denumirea proiectului → //Properties// → //Server// și se selectează serverul web definit anterior\\ {{ :laboratoare:laborator08:server_configuration08.png?nolink&500 }} |
| * se realizează o referință către biblioteca serverului web, aceasta fiind trecută în classpath: click pe butonul drept al mouse-ului pe denumirea proiectului → //Build Path// → //Add Library// | * se realizează o referință către biblioteca serverului web, aceasta fiind trecută în classpath: click pe butonul drept al mouse-ului pe denumirea proiectului → //Build Path// → //Add Library// | ||
| - | * se alege //Server Runtime//\\ {{ :laboratoare:laborator08:server_configuration09.png?nolink }} | + | * se alege //Server Runtime//\\ {{ :laboratoare:laborator08:server_configuration09.png?nolink&500 }} |
| - | * se indică serverul web definit anterior și se accesează butonul ''Finish''\\ {{ :laboratoare:laborator08:server_configuration10.png?nolink }} | + | * se indică serverul web definit anterior și se accesează butonul ''Finish''\\ {{ :laboratoare:laborator08:server_configuration10.png?nolink&500 }} |
| **7.** Se descarcă și se instalează cea mai recentă versiune stabilă a motorului pentru baze de date MySQL. | **7.** Se descarcă și se instalează cea mai recentă versiune stabilă a motorului pentru baze de date MySQL. | ||
| Line 174: | Line 174: | ||
| Se realizează o referință către biblioteca pentru accesarea Google Cloud Messaging care este localizată în ''<android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib'' | Se realizează o referință către biblioteca pentru accesarea Google Cloud Messaging care este localizată în ''<android-sdk>/extras/google/google_play_services/libproject/google-play-services_lib'' | ||
| - | * se accesează //File// → //Import// → //Android// → //Existing Android Code Into Workspace//\\ {{ :laboratoare:laborator08:google_cloud_messaging_library_import01.png?nolink }} | + | * se accesează //File// → //Import// → //Android// → //Existing Android Code Into Workspace//\\ {{ :laboratoare:laborator08:google_cloud_messaging_library_import01.png?nolink&500 }} |
| - | * se indică locația unde se găsește instalată biblioteca pentru accesarea Google Cloud Messaging, creându-se o copie a acestuia în spațiul de lucru (se bifează opțiunea //Copy projects into workspace//)\\ {{ :laboratoare:laborator08:google_cloud_messaging_library_import02.png?nolink }} | + | * se indică locația unde se găsește instalată biblioteca pentru accesarea Google Cloud Messaging, creându-se o copie a acestuia în spațiul de lucru (se bifează opțiunea //Copy projects into workspace//)\\ {{ :laboratoare:laborator08:google_cloud_messaging_library_import02.png?nolink&800 }} |
| - | * în fereastra corespunzătoare proiectului aferent aplicației Android (click dreapta pe denumirea proiectului în //Package Explorer// → //Properties//), se accesează opțiunea //Android// și se specifică referința către biblioteca respectivă în secțiunea //Library// (accesând butonul //Add//)\\ {{ :laboratoare:laborator08:google_cloud_messaging_library_import03.png?nolink }} | + | * în fereastra corespunzătoare proiectului aferent aplicației Android (click dreapta pe denumirea proiectului în //Package Explorer// → //Properties//), se accesează opțiunea //Android// și se specifică referința către biblioteca respectivă în secțiunea //Library// (accesând butonul //Add//)\\ {{ :laboratoare:laborator08:google_cloud_messaging_library_import03.png?nolink&800 }} |
| ==== Structura Proiectului ==== | ==== Structura Proiectului ==== | ||
| Line 188: | Line 188: | ||
| - (opțional) un **serviciu** (''GoogleCloudMessagingIntentService'') lansat în execuție în momentul în care este livrat mesajul (de către ascultător) în cadrul căruia acesta este procesat propriu-zis; utilizarea unui serviciu este necesară doar în situația în care prelucrarea mesajului se realizează într-un interval de timp mai mare, fiind necesar să se asigure faptul că dispozitivul mobil nu devine inactiv între timp. | - (opțional) un **serviciu** (''GoogleCloudMessagingIntentService'') lansat în execuție în momentul în care este livrat mesajul (de către ascultător) în cadrul căruia acesta este procesat propriu-zis; utilizarea unui serviciu este necesară doar în situația în care prelucrarea mesajului se realizează într-un interval de timp mai mare, fiind necesar să se asigure faptul că dispozitivul mobil nu devine inactiv între timp. | ||
| - | {{ :laboratoare:laborator08:package_explorer.png?nolink }} | + | {{ :laboratoare:laborator08:package_explorer.png?nolink&500 }} |
| === Activitatea GoogleCloudMessagingActivity === | === Activitatea GoogleCloudMessagingActivity === | ||
| Line 874: | Line 874: | ||
| <note>În cazul în care nu dispuneți de un cont Google, acesta va trebui creat înainte de a implementa aceste cerințe.</note> | <note>În cazul în care nu dispuneți de un cont Google, acesta va trebui creat înainte de a implementa aceste cerințe.</note> | ||
| + | |||
| + | <note important>Aceste valori nu vor fi utilizate decât împreună, altfel se vor genera erori de tipul ''MismatchSenderId''.</note> | ||
| ==== Clientul Android ==== | ==== Clientul Android ==== | ||
| Line 903: | Line 905: | ||
| Mai multe detalii pot fi obținute în secțiunea [[:laboratoare:laborator08#configurare_client|Configurare client]] | Mai multe detalii pot fi obținute în secțiunea [[:laboratoare:laborator08#configurare_client|Configurare client]] | ||
| - | **6.** În interfața ''ro.pub.cs.systems.pdsd.lab08.googlecloudmessaging.general.Constants'', trebuie modificate următoarele valori: | + | **6.** În interfața ''ro.pub.cs.systems.pdsd.lab08.googlecloudmessaging.general.Constants'', trebuie modificate următoarele valori, __**numai în situația în care se folosește un server web Apache Tomcat**__: |
| * ''PROJECT_NUMBER'' - cu numărul de proiect generat de consola Google API; | * ''PROJECT_NUMBER'' - cu numărul de proiect generat de consola Google API; | ||
| - | * în situația în care se folosește un server de aplicații Apache Tomcat, adresa Internet pentru serviciile care expun funcționalități către dispozitivul mobil: | + | * adresele Internet pentru serviciile care expun funcționalități către dispozitivul mobil: |
| * dispozitiv mobil - adresa Internet indicată ca default gateway a rețelei de calculatoare din care fac parte dispozitivul mobil și mașina pe care se găsește serverul de aplicații; | * dispozitiv mobil - adresa Internet indicată ca default gateway a rețelei de calculatoare din care fac parte dispozitivul mobil și mașina pe care se găsește serverul de aplicații; | ||
| * AVD - 10.0.2.1; | * AVD - 10.0.2.1; | ||
| Line 1024: | Line 1026: | ||
| **15.** Să se instaleze motorul pentru gestiunea bazelor de date MySQL și să se ruleze script-ul ''googlecloudmessaging.sql'' din cadrul directorului ''ServletsJSP'' care creează o bază de date cu o tabelă în care vor fi stocate informațiile referitoare la identificatorii de înregistrare transmiși de clienții Android. | **15.** Să se instaleze motorul pentru gestiunea bazelor de date MySQL și să se ruleze script-ul ''googlecloudmessaging.sql'' din cadrul directorului ''ServletsJSP'' care creează o bază de date cu o tabelă în care vor fi stocate informațiile referitoare la identificatorii de înregistrare transmiși de clienții Android. | ||
| - | <code sql> | + | <code> |
| CREATE DATABASE googlecloudmessaging; | CREATE DATABASE googlecloudmessaging; | ||
| Line 1061: | Line 1063: | ||
| **18.** În acest moment, se poate realiza comunicația client Android ↔ server de aplicații prin intermediul serviciului Google Cloud Messaging: | **18.** În acest moment, se poate realiza comunicația client Android ↔ server de aplicații prin intermediul serviciului Google Cloud Messaging: | ||
| * clientul Android trimite identificatorul de înregistrare către serverul de aplicații; | * clientul Android trimite identificatorul de înregistrare către serverul de aplicații; | ||
| - | * se accesează componenta pentru transmiterea unui mesaj prin intermediul unei notificări în aplicația curentă de navigare (//eng.// browser)\\ {{ :laboratoare:message_push.png?nolink }} | + | * se accesează componenta pentru transmiterea unui mesaj prin intermediul unei notificări în aplicația curentă de navigare (//eng.// browser)\\ {{ pdsd:laboratoare:laborator08:message_push.png?nolink&800 }} |
| * PHP: http://pdsd2015.andreirosucojocaru.ro/exemple/laboratoare/laborator08/googlecloudmessaging/message_push.php; | * PHP: http://pdsd2015.andreirosucojocaru.ro/exemple/laboratoare/laborator08/googlecloudmessaging/message_push.php; | ||
| * JavaServlets / JSP (local): http://192.168.56.1:8080/GoogleCloudMessagingServer/MessagePushServlet. | * JavaServlets / JSP (local): http://192.168.56.1:8080/GoogleCloudMessagingServer/MessagePushServlet. | ||
| Line 1074: | Line 1076: | ||
| [[http://developer.android.com/reference/com/google/android/gms/gcm/GoogleCloudMessaging.html|Google Cloud Messaging API]]\\ | [[http://developer.android.com/reference/com/google/android/gms/gcm/GoogleCloudMessaging.html|Google Cloud Messaging API]]\\ | ||
| [[http://stackoverflow.com/questions/20121883/how-to-install-google-play-services-in-a-genymotion-vm-with-no-drag-and-drop-su|How to install Google Play Services in a Genymotion VM (with no drag and drop support)?]]\\ | [[http://stackoverflow.com/questions/20121883/how-to-install-google-play-services-in-a-genymotion-vm-with-no-drag-and-drop-su|How to install Google Play Services in a Genymotion VM (with no drag and drop support)?]]\\ | ||
| - | [[http://wiki.cyanogenmod.org/w/Google_Apps|Google Apps]]\\ | + | [[http://forum.xda-developers.com/showthread.php?t=2528952|Installing ARM Translation and GApps]]\\ |
| - | [[http://forum.xda-developers.com/showthread.php?t=2528952|Installing ARM Translation and GApps]] | + | [[http://developer.android.com/guide/topics/ui/notifiers/notifications.html|Android Notifications]] |
