Notificări Push pentru mai multe conturi

Momentan lucrez la o aplicație Cordova, dar presupun că-i o treabă validă și pentru o aplicație nativă.

De ce am nevoie

O aplicație în care te poți autentfica cu mai multe conturi (e.g. Slack), iar fiecare cont să aibă setări individuale pentru notificările push.

Cum funcționează notificările push

Cel puțin pe iOS, tot ce face telefonul este să-ți dea un token atunci când accepți să primești notificările și… cam atât.

Articolele și tutorialele nu detaliază mai mult decât „ah, ai nevoie de un server, dar nu discutăm despre asta acum”. Prin urmare știi că ai nevoie de un server, dar restul trebuie să-ți dai seama singur.

Cum am făcut

În momentul în care un utilizator se autentifică într-un cont pe telefon, pe lângă user/pass trimit și token-ul generat de setările push și starea curentă și țin setarea (și) pe server. Alternativ, dacă nu este nevoie de autentificare cu user/pass, poți face un request AJAX spre server în care trimiți doar token-ul.

Atunci când e de trimis o notificare pentru un anumit utilizator de pe un anumit device, iau user și token din db, încropesc payload necesar și îl trimit.

Tabela din DB este banală, cu trei coloane: id | token | user_id și se face join cu tabela de utilizatori pentru a ști cui să trimiți notificare. În funcție de ce ai pe server, poți trimite notificări ori în timp real, când se întâmplă ceva, ori printr-un cron, la fiecare x minute/ore.

Nu pot să dau mai multe detalii aici pentru că nu eu sunt cel ce s-a ocupat de server.


Acum… că o fi bine sau nu, nu știu. E deja a doua aplicație la care procedăm așa, deci aș zice că-i ok :slight_smile:

2 Likes

Roagă-l pe cel ce s-a ocupat de server să vină și el să ne zică ce-a făcut pe partea lui. :slight_smile:

Eu pentru notificări push am folosit OneSignal și îl voi folosii și la proiectul la care lucrez acum, pentru că este puternic și flexibil. Îți permite să faci multe chestii.

Este un serviciu care unifică notificările push pentru android, ios și web, și îți permite să trimiți foarte ușor notificări printr-un api rest.

Are plugin pentru Cordova/phonegap.
Cum as implementa eu asta:
În aplicație la autentificare trimit la OneSignal un tag pentru deviceul respectiv, tag “auth_users” ce conține un array cu id-urile userilor logati pe dispozitiv.
Pe server când trebuie să trimit o notificare push către userul cu idul X, caut prin api toate deviceurile care au idul X în array-ul din tagul “auth_users”, și trimit notificarea.
Eventual, pentru securitate, în loc de idul userului, as face un token unic pentru notificări. Pentru că tagurile care se trimit la OneSignal cred că pot fii manipulate.