Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Windows 10
  • Push obavještenja su prestala stizati. Kako popraviti Push obavijesti na Androidu

Push obavještenja su prestala stizati. Kako popraviti Push obavijesti na Androidu

Na pisanje ovog članka potaknuo me zadatak koji mi je bio dodijeljen u jednom od mojih radnih projekata: implementacija Push obavijesti u aplikaciju. Činilo se da je sve jednostavno: proučavate dokumentaciju, primjere i idete naprijed. Osim toga, već sam imao iskustva u radu s notifikacijama. Ali nije ga bilo…

Servis u okviru kojeg je implementirana Android aplikacija ima prilično stroge zahtjeve za rad Push obavijesti. Potrebno je obavijestiti korisnika o nekoj radnji u roku od 30-60 sekundi. Ako je obavijest uspješna, zahtjev se šalje sa uređaja korisnika na server sa odgovarajućim statusom. Iz dokumentacije znamo da usluga GCM (Google Cloud Messaging) ne garantuje isporuku PUSH obavještenja uređajima, stoga, kao backdoor opcija, ukoliko se ovi vremenski okviri prekrše, naš servis obavještava korisnika putem SMS poruke. Budući da je cijena SMS poruka znatno veća od PUSH obavijesti, potrebno je što više smanjiti protok SMS poruka prema klijentskim uređajima.

Nakon što smo proučili dokumentaciju i instalirali push notifikacije, poslali smo prvu verziju aplikacije na testiranje nekoliko klijenata i počeli čekati. Rezultati su bili otprilike sljedeći:

  • uz aktivnu Wifi vezu, sve radi savršeno: obavijesti se isporučuju, klijenti su zadovoljni.
  • Uz aktivan mobilni internet, zabava je počela.
Neki klijenti su napisali da su imali kašnjenja u isporuci push obavještenja, ili su istovremeno primili i PUSH i SMS, što je prilično nepraktično. Drugi su napisali da uopšte nisu dobijali obaveštenja, već samo SMS. Za ostale, poput naših testnih uređaja, sve je bilo ok. Nakon što smo prikupili što je moguće više informacija od nezadovoljnih kupaca, počeli smo shvaćati problem i došli do sljedeće liste ograničenja (ova lista se kasnije pretvorila u potpuni FAQ):
  • Omogućen način rada za uštedu energije (na primjer, Stamina na Sony uređajima) utiče na rad Push obavijesti;
  • Korisnik mora imati najmanje 1 aktivan Google račun na uređaju;
  • morate biti sigurni da je trenutna verzija aplikacije Google Play usluge instalirana na vašem uređaju;
  • provjerite da li su obavještenja za aplikaciju onemogućena (označite polje na stranici aplikacije u postavkama telefona);
  • provjerite da li je pozadinski režim za aplikaciju ograničen (postavka se nalazi u meniju „Upotreba podataka“);
  • U dokumentaciji za GCM stoji da se obavijesti šalju samo na određene portove, pa treba uzeti u obzir i postavke rutera, firewall-a i antivirusa.
Nakon što smo poslali ovaj podsjetnik svim klijentima, ponovo smo počeli čekati rezultate. I opet se ispostavilo da su “ne baš dobri”. Počeli su da kopaju dalje.

U ovoj fazi, poruka koju su napisali momci sa Mail.ru-a mnogo je pomogla. Vrlo detaljno opisuje zamršenosti implementacije GCM-a na strani klijenta, kao i tačke zbog kojih Push obavijesti u mobilnim mrežama odbijaju raditi. Na kraju je donesena odluka da zadržim svoju vezu sa serverom u sprezi sa GCM-om.

Prije nego što počnete donositi odluku, vrijedi istaknuti nekoliko vrlo važnih točaka koje vam omogućavaju da suzite raspon potencijalno "nefunkcionalnih" uređaja:

  • problem se javlja samo kada je povezan na mobilni internet;
  • Prema riječima kupaca, problem se javlja na Androidu verzije 4 i novijim.
I tako, idemo na implementaciju.

Iskusni Android programer će odmah reći da postoje najmanje 2 rješenja za problem: koristite Service ili AlarmManager. Isprobali smo obje opcije. Razmotrimo prvu od njih.

Da bismo kreirali sistemski neuništivu uslugu koja će stalno visiti u pozadini i obavljati naš zadatak, koristili smo metodu:

StartForeground(int notificationID, Notification notification);
Gdje

  • notificationId - neki jedinstveni identifikator obavijesti koji će biti prikazan u statusnoj traci i u kliznoj zavjesi;
  • notification - sama notifikacija.
U ovom slučaju, obavezan uslov je da se obaveštenje prikaže u statusnoj traci. Ovaj pristup osigurava da će servisu biti dat veći prioritet (budući da je u interakciji sa UI dijelom sistema) kada postoji nedostatak memorije na uređaju i sistem će biti jedan od posljednjih koji će ga isprazniti. Ova obavijest nam nije potrebna, pa smo iskoristili sljedeću ideju: dovoljno je pokrenuti drugi servis istovremeno s prvim i za oba servisa kao notificationID koristiti istu vrijednost. Zatim ubijte drugu uslugu. U tom slučaju, obavijest će nestati sa statusne trake, ali će ostati funkcionalnost i prioritetne mogućnosti prve usluge.

Nakon implementacije ovog pristupa, poslali smo sklop na testiranje. Na osnovu rezultata ispostavilo se da sistem i dalje rasterećuje servis, a iz logova smo vidjeli koliko je došlo do značajnih vremenskih praznina prilikom traženja podataka u pozadini sa našeg servera. Stoga smo počeli implementirati drugu opciju - AlarmManager.

AlarmManager je klasa koja omogućava rad sa, grubo rečeno, “budilnikom”. Omogućava nam da odredimo vrijeme nakon kojeg će sistem poslati obavještenje o emitovanju, koje će probuditi našu aplikaciju i dati joj priliku da izvrši potrebne radnje. Postoje neka ograničenja u funkcioniranju ove metode i treba ih riješiti:

  • podaci o „alarmima“ će biti izbrisani nakon ponovnog pokretanja uređaja;
  • Podaci o alarmu će se izbrisati nakon ažuriranja aplikacije.
Prva grabulja na koju smo zakoračili bila je metoda

SetRepeating()
koji vam omogućava da postavite budilnik koji se ponavlja u određenom intervalu. Nakon što su zeznuli ovu metodu, počeli su testirati, a testovi su pokazali suprotno - "budilnik" se nije ponovio. Počeli smo da shvatamo šta se dešava i pogledali smo dokumentaciju. I tamo su pronašli odgovor na pitanje - počevši od API lvl 19 (Kitkat), apsolutno svi "budilci" u sistemu postali su jednokratni. Zaključak - uvijek čitajte dokumentaciju.

Ova grabulja nije bila razlog za frustraciju, jer je rješenje problema prilično jednostavno - pokrenite jednokratni "budilnik" i resetirajte ga nakon što se ugasi. Prilikom implementacije ovog pristupa naišli smo na sljedeću grabu – pokazalo se da je za različite API nivoe potrebno različito podesiti alarme, dok u dokumentaciji ništa nije rečeno. Ali ovaj problem je riješen sasvim jednostavno - bockanjem i guglanjem. Ispod je primjer koda koji vam omogućava da ispravno postavite alarme:

Privatni statički void setUpAlarm(konačni kontekst konteksta, konačna namjera, konačni int timeInterval) ( finalni AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); final PendingIntent pi = PendingIntent.getBroadcast(kontekst, timeInterval0) am.cancel(pi); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) (konačni AlarmManager.AlarmClockInfo alarmClockInfo = novi AlarmManager.AlarmClockInfo(System.currentTimeMillis() + timeInterval, pimC); alarmClockInfo, pi); ) else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) am.setExact(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi); else am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + timeInterval, pi); )
Želim da vam skrenem pažnju na zastavu AlarmManager.RTC_WAKEUP- uz pomoć njega sistem će omogućiti našoj aplikaciji da se „probudi“ kada je ekran neaktivan, kada je uređaj u zaključanom stanju.

Ovaj pristup sa “budilicama” nam je dao željeni rezultat - aplikacija u pozadini ispravno proziva server za nove podatke. Trenutno završavamo algoritam. Trenutno implementiramo i testiramo sljedeću optimizaciju, koja će nam omogućiti da suzimo raspon uređaja i na taj način smanjimo opterećenje servera:

  • poruka koju GCM šalje uređaju sadrži neki jedinstveni ID;
  • Nakon što smo dobili podatke GET zahtjeva u pozadini, provjeravamo da li na uređaju već postoji unos sa istim ID-om;
  • ako takvih podataka nema lokalno na uređaju, pamtimo ovaj ID i vrijeme kada je primljen T1;
  • čekamo PUSH sa istim ID-om, po prijemu pamtimo vrijeme T2 i provjeravamo razliku između T2 i T1;
  • ako je razlika veća od određenog privremenog kriterija (vrijednosti), onda uređaj ima problem sa isporukom obavještenja i za ispravan rad servisa potrebno je stalno tražiti podatke u pozadini od servera (savjetujem vam da izaberite kriterijum na osnovu problema koji se rešava.U našem slučaju, kriterijum jednak 5 minuta);
  • ovu razliku treba izračunati nekoliko puta, npr. 5-10 puta, tek nakon toga možemo zaključiti da uređaj zaista ima problem sa primanjem Push obavijesti (na ovaj način se eliminiše situacija banalnog prekida veze, timeouta i sl. );
  • potrebno je periodično pokretati ovaj algoritam (na primjer, jednom sedmično ili nakon ažuriranja OS-a na uređaju).
Sve najbolje. I manje takvih štaka.

P.S.
Mnogo je pomogao tokom procesa testiranja

26.05.2016

Svaka poslovna i aplikativna kompanija ima svoje liste omiljenih klijenata i projekata. Volimo naše kupce, posebno one koji, osim gotovog proizvoda na kraju, žele samostalno razumjeti tehnologije i podići se do nivoa specijaliste. Koriste se bilo koje metode, ali posebno je popularno “mučenje pitanjem” (bilo koji tester miruje).

Tehnički portret aplikacije u razvoju

Kreirali smo mobilnu aplikaciju za trgovinu odjećom, čija je arhitektura izgrađena na osnovnoj aktivnosti (fragmenti se koriste za prikaz informacija). Retrofit biblioteka je korištena za preuzimanje podataka sa servera, a ugrađena zavisna SQLite baza podataka je korištena za njihovo pohranjivanje. Učitavači su odabrani da izvršavaju zahtjeve do servera i preuzimaju iz baze podataka.

Kako bismo aplikaciju učinili interaktivnom i omogućili vam razmjenu poruka, omogućili smo push obavijesti. U ovom slučaju, VK i Facebook SDK se koriste za implementaciju autorizacije/registracije putem društvenih mreža i to izgleda ovako: kada korisnik pošalje poruku, on šalje zahtjev sa ovom porukom našem serveru. Generiše zahtjev sa porukom i podacima o korisniku kome je poruka upućena, te šalje sve informacije na Google server. Iz ovog zahtjeva generira push notifikaciju i šalje je na uređaj korisnika. Naša aplikacija prima ovaj push, analizira ga (obrađuje) i prikazuje u chatu - komunikacija je ostvarena.

Postoji problem: kada aplikacija počinje raditi u pozadini ili zašto push obavijesti stižu tek nakon pokretanja?

S ovim pitanjem nam se javio klijent, jer se kroz iskustvo suočio sa sljedećom dilemom: kada se pokrene sa drugog uređaja, aplikacija radi dobro, ali kako onda funkcionira “autoload”?

Hajde da razgovaramo. Aplikacija počinje raditi u pozadini odmah nakon instalacije, a pretplata na push obavijesti se vrši nakon registracije u aplikaciji.

Ako se korisnik ne registruje u njemu, tada mu push obavijesti neće raditi.

Postoje i druga objašnjenja koja treba uzeti u obzir:

  1. Push obavijesti funkcioniraju putem GCM (Google Cloud Messaging) usluge, tako da ako uređaj nema Google Play usluge, njihov rad je nestabilan ili je proizvođač izvršio izmjene u njihovom radu, tada push obavijesti neće raditi u potpunosti ili će biti prekidi u njihovom radu. Ako usluge Google Play nisu dostupne na vašem telefonu, nećete se moći ni registrirati za push obavještenja. Naravno, to se može učiniti i "prisilno": ako nakon registracije pretplata na push obavijesti na serveru ne uspije, onda morate nastaviti pokušavati svaki put kada se prijavite u aplikaciju dok rezultat ne bude uspješan. Razlog za ovu situaciju mogu biti problemi s radom Google Play usluga - u ovom slučaju pokušaj pretplate može završiti ničim.
  2. Razlog za nepravilan rad leži u neidealnom radnom okruženju. Našim klijentima preporučujemo za testiranje, a to nazivamo idealnim okruženjem, korištenje Google Nexus telefona (pokreću „čisti“ Android bez ikakvih promjena, a OS i servisi na njemu rade idealno), stabilan rad servera i interneta veza. Pod takvim uslovima, zahtjevi će biti izdati korektno, bez grešaka iu najkraćem mogućem roku. U tom slučaju aplikacija će brzo učitati nove podatke, prikazati ih i neće biti problema s netačnim prikazom informacija. Kod ostalih telefona (sa modifikovanim operativnim sistemom - kineski brendovi, Samsung, HTC, itd.) možete očekivati ​​ne samo nestabilan rad servera, već i ograničene mogućnosti aplikacije koja se razvija (zbog sistemskog uklanjanja mnogih metoda-funkcija) - da, push obavještenja se možda uopće ne pružaju.
  3. Ne zaboravite glavnu stvar - push obavijesti dolaze samo ako postoji stabilna internetska veza. Ako to nije slučaj, poruka će doći čim se veza uspostavi.

Sažetak

  • Idealno okruženje (besprekoran internet, „čista“ platforma) je idealno, pa upozorite klijente na sve moguće greške i ograničenja funkcionalnosti aplikacije.
  • Ne plašite se pitanja klijenata – oni će pažljivo tražiti nedostatke u vašem radu i pronaći ih! Hvala vam i brzo popravite greške.
  • Prije svega kreirajte aplikaciju za korisnike, fokusirajte se na njihove tehničke mogućnosti i ne stvarajte nepotrebne stvari.

Apple je odgovoran za ispravan rad Push obavijesti u iOS-u. Svaka aplikacija treće strane koja želi slati obavijesti korisniku mora za to koristiti Apple servere. Šema je sljedeća: programer će postaviti svoj vlastiti server, koji pristupa Appleovoj usluzi Push Notification Service (APNS), koja zauzvrat šalje obavijesti korisnicima na njihovim uređajima.

Stoga, ako vam određena aplikacija ne šalje obavijesti, onda je problem u krivim rukama programera, koji ne može pravilno konfigurirati interakciju svog servera s APNS-om. Ako prestanete da primate apsolutno sva obavještenja, pokušajte sa sljedećim uputama.

Odjavite se sa svog Apple ID naloga

Apple koristi vaš Apple ID za identifikaciju vaših uređaja. Ovako kompanija razumije gdje slati obavještenja. Prva stvar koju trebate učiniti ako imate problema s primanjem Push obavijesti je da se odjavite i ponovo prijavite na svoj Apple ID. To možete učiniti u Postavke > iTunes Store & App Store.

Ponovo povežite svoj uređaj na iCloud

Sličan korak treba ponoviti sa iCloud servisom u oblaku, koji je odgovoran za sinhronizaciju podataka između uređaja i sa Apple serverima. To možete učiniti u Postavke > iCloud.

Ponovo pokrenite uređaj

iOS nema mnogo alata za rješavanje problema, reboot je glavni. Podsjetimo vas da se ponovno pokretanje razlikuje od običnog isključivanja/uključivanja. Možete ponovo pokrenuti svoj uređaj dugim pritiskom na tipku za napajanje i tipku Home na starijim uređajima i dugim pritiskom na tipku za napajanje i smanjenje jačine zvuka na iPhone 7 i iPhone 7 Plus.

Označite način rada Ne ometaj

Ako je sistem postavljen na način rada Ne ometaj, nećete čuti obavještenja u određeno vrijeme. Pazite da ga ne uključite trajno. To je razumljivo ako se na statusnoj traci uređaja nalazi ikona polumjeseca.

Provjerite postavke aplikacije

iOS ima vrlo fleksibilan sistem obavještavanja koji vam omogućava da prilagodite svaku aplikaciju onako kako želite. Može da šalje Push obaveštenja, može da prikazuje obaveštenja samo na ikoni aplikacije, sa banerima na vrhu ekrana, može da prikazuje ili ne prikazuje obaveštenja na zatvorenom ekranu. Ukratko, postoji mnogo opcija, sve ih možete pogledati u “Postavke” > “Obavijesti”. Ako ste prilikom prvog pokretanja aplikacije slučajno blokirali slanje obavještenja, uvijek možete promijeniti ovu postavku u ovom meniju.

Provjerite dugme za isključivanje zvuka

Apsurdan, ali, kako praksa pokazuje, izuzetno koristan savjet. Mali prekidač na bočnoj strani iPhone-a nema efekta na funkcioniranje Push obavijesti, ali isključuje zvukove sistemskih obavijesti. Stoga, ako ga slučajno prebacite, možda nećete čuti važna obavještenja.

Prestali ste primati obavještenja od određene aplikacije (ili svih odjednom) na vašem iPhoneu i iPadu? U ovom uputstvu smo govorili o najefikasnijim načinima za popravljanje ove greške.

Prijavite se ponovo sa svojim Apple ID-om

Prva stvar koju trebate učiniti ako imate problema s primanjem obavijesti na svom iPhoneu ili iPadu je da se ponovo prijavite na svoj Apple ID. Da biste to učinili, idite na meni “ Postavke» → « iTunes Store i App Store", kliknite na Apple ID i u prozoru koji se otvori odaberite " Izači" Nakon toga, na istoj stranici trebate kliknuti na “ Da uđem» i navedite informacije o svom Apple ID računu.

Ponovo povežite svoj uređaj na iCloud

Također biste se trebali odjaviti i ponovo prijaviti na svoj iCloud nalog. Da biste to učinili, idite na meni " Postavke» → iCloud i na samom dnu stranice kliknite na " Izači" Zatim se ponovo prijavite na iCloud na istoj stranici.

Prisilno restartujte svoj uređaj

Prethodna dva koraka možda neće pomoći odmah, već tek nakon što izvršite hard reboot iPhone ili iPad. Držite pritisnute dugmad Dom(Dugme za smanjivanje jačine zvuka na iPhone 7/7 Plus) i Ishrana i držite ih dok se Apple logo ne pojavi na ekranu. Nakon uključivanja uređaja, problem sa primanjem obavještenja bi trebao nestati.

Imajte na umu da u nekim slučajevima prisilno ponovno pokretanje pomaže da se samostalno nosi sa softverskom greškom.

Alternativni način

Mnogim korisnicima iPhonea i iPada s problemom primanja obavijesti pomogao je metod sličan prethodnim:

Korak 1. Idite na meni " Postavke» → « iTunes Store i App Store" i odjavite se sa svog Apple ID naloga.

Korak 2: Isključite i uključite svoj iPhone ili iPad.

Korak 3. Nakon uključivanja, idite na meni " Postavke» → « iTunes Store i App Store", kliknite " Da uđem» i prijavite se koristeći podatke vašeg Apple ID naloga.

Provjerite postavke sistema

Ako gore navedeni koraci nisu pomogli, najvjerovatnije je problem u postavkama iOS-a ili određenih aplikacija. Prvo idite na meni " Postavke» → « Ne ometaj» i provjerite je li uključen “tihi” način rada.

I, drugo, odaberite aplikaciju od koje ne primate obavještenja u izborniku " Postavke» → « Obavještenja" i uvjerite se da je prekidač " Dozvoljavanje obavještenja» aktivan.

Ljubitelji društvene mreže VKontakte često se susreću s problemom nedostatka push obavijesti. Prozori sa brzim dijalozima se ne pojavljuju, što uzrokuje određene neugodnosti. Problemi mogu biti različiti, pokušat ćemo razgovarati o njima i razumjeti metode rješavanja.

Problematični problemi sa obavještenjima u VK-u

Zapravo, rješavanje svakog problema nije teško. Među njima su sljedeće:

  1. Ažuriranja stranica društvenih mreža, preopterećenje servera i drugi tehnički problemi. Često se možete susresti sa nečim ovakvim kada dođe do globalnih promjena na društvenoj mreži. Mnoge funkcije su nedostupne, uključujući push obavijesti;
  2. Globalne postavke računa nisu uspjele. Možda ste vi sami ili vaši rođaci slučajno ili namjerno mogli promijeniti neke parametre u VK-u. Rješenje problema uključuje provjeru pojedinačnih parametara i vraćanje traženih vrijednosti na njihov prvobitni položaj;
  3. Promjena postavki u privatnim razgovorima s više ljudi. Pojava poruka je često dosadna i nametljiva, pa neki korisnici isključuju određene elemente i žale se na nedostatak iskačućih prozora;
  4. Pretraživač ne podržava java skripte. Naravno, to je danas rijetkost, ali problematična pitanja se javljaju. Ovdje će pomoći samo jedan lijek! Šta tačno, pročitajte dalje u članku.

Tehničke tačke: čekanje i ažuriranje

U ovom odeljku pokušaćemo da rešimo probleme sa tačkama br. 1 i 4. Što se tiče prvog, ovde je sve prilično jednostavno. Ažuriranja i preopterećenja sistema su privremeni i morat ćete biti strpljivi i čekati. Koliko će trajati ova neugodnost? Sve zavisi od konkretne situacije:

  1. Ako se izvrši velika revizija pojedinih elemenata stranice, proces će trajati do 8 sati. Za to vrijeme, pojedinačni moduli će se ponovo pokrenuti, uspostaviti veze i provjeriti funkcionalnost. Da biste pratili ažuriranja, preporučujemo da se pretplatite na zvaničnu razvojnu grupu na VK;
  2. Preopterećenje servera takođe može predstavljati problem kada radite sa obaveštenjima. Sada su programeri smanjili opterećenje stranice, ali ponekad je moguće naići na ovaj fenomen, posebno ljeti. Postoji samo jedno rješenje, čekajte i nadajte se da ćete sami ispraviti situaciju. Ako se pojave crvene greške, preporučujemo da obrišete keš pretraživača.

Aplikacije za rad u web okruženju su druga priča. Neki programi ne podržavaju java skripte ili su jednostavno blokirani u globalnim postavkama. Koristite drugi softver, vratite sve na originalne vrijednosti ili ponovo instalirajte najnoviju verziju softvera. Ovo smo riješili, sada pređimo na parametre za VKontakte.

Neispravne ili pokvarene postavke


Često se problem javlja zbog neispravnih ili pokvarenih parametara. Problem se može riješiti kroz sljedeće korake:

  1. Morate otići na odgovarajući odjeljak. Ovo se radi klikom na ikonu imena u gornjem desnom uglu;
  2. U novom prozoru "Postavke" morat ćete pronaći odjeljak "Obavijesti", nakon čega će se na središnjem ekranu pojaviti klizači. Moraju biti u pravom položaju. Ako nije u redu, ispravite ga;
  3. U slučaju masovnih dijaloga, potrebno je da proverite da li je odgovarajuća funkcija omogućena direktno u dijalogu. Da biste to učinili, idite na željeni chat, pronađite tri tačke na vrhu i odaberite "Onemogući/omogući obavijesti".

Problem je riješen, u nekim slučajevima morat ćete se odjaviti i prijaviti te obrisati keš memoriju. Nadamo se da su savjeti pomogli i da ste otklonili neugodnost. Također morate obratiti pažnju da VK koristi obavijesti putem e-pošte i SMS-a, o tome ćemo govoriti u budućim člancima.

Najbolji članci na ovu temu