Notificacions d’inserció¶
Suposem que teniu una aplicació creada amb Clickable i publicada a l’OpenStore. Però ara voleu poder enviar notificacions Push als vostres usuaris. En primer lloc, cal entendre com funciona això:
Cada aplicació que utilitza notificacions push té un token únic. Aquest token identifica l’usuari, el dispositiu i la pròpia aplicació. La fitxa la genera el Servei de Push d’UBports.
Necessitaràs el testimoni per enviar una notificació push. Així que l’aplicació envia el seu testimoni al servidor del desenvolupador d’aplicacions.
Amb el token podeu enviar una sol·licitud HTTP al Servidor Push d’UBports que reenviarà la notificació al dispositiu de l’usuari.
Practiquem pas a pas.
Nota
En el següent exemple no implementarem un servidor. També la comunicació entre la teva app i el teu servidor depèn de tu. Si us plau, informeu l’usuari sobre la comunicació amb el vostre servidor proporcionant una política de privacitat!
Fes que l’aplicació estigui llesta per a notificacions push¶
Implementació del PushClient¶
Primer hem d’afegir el grup de polítiques «push-notification-client». El fitxer apparmor podria ser així:
{
"policy_groups": [
"networking",
"push-notification-client"
],
"policy_version": 16.04
}
En el següent pas hem de modificar les parts Qml. Cal afegir un component pushclient:
//...
import Ubuntu.PushNotifications 0.1
//...
PushClient {
id: pushClient
appId: "myapp.yourname_hookname"
onTokenChanged: console.log("👍", pushClient.token)
}
Heu d’establir el appId correcte! Si el nom de l’aplicació del vostre fitxer manifest és myapp.yourname i el nom del ganxo principal (el que gestiona el fitxer .desktop) és hookname, llavors el appId és: myapp.yournamehookname. Quan comencem ara l’aplicació, obtindrà un token i imprimirà aquest token als registres. Amb els registres clicables podrem copiar aquest testimoni fora del terminal. Però l’aplicació encara no està preparada per rebre una notificació push. Per a això necessitem alguna cosa que es diu pushhelper!
Implementació de l’ajudant push¶
El pushhelper és una part de l’aplicació que rebrà totes les notificacions push i les processarà abans d’enviar-les al centre de notificacions del sistema. Rebrà un fitxer json i haurà de generar un altre fitxer json en el format correcte. L’ajudant està separat de l’aplicació. Així que necessitem un nou ganxo en el manifest. Podria semblar així:
{
//...
"title": "myapp",
"hooks": {
"myapp": {
"apparmor": "myapp.apparmor",
"desktop": "myapp.desktop"
},
"push": {
"apparmor": "push-apparmor.json",
"push-helper": "push.json"
}
},
//...
}
Hauria de quedar clar que ara necessitem un fitxer de apparmor diferent i un fitxer executable diferent. El fitxer push-apparmor.json només ha de contenir el grup de polítiques push-notification-client i hauria de tenir aquest aspecte:
{
"template": "ubuntu-push-helper",
"policy_groups": [
"push-notification-client"
],
"policy_version": 16.04
}
El push.json és per a redirigir al fitxer executable:
{
"exec": "pushexec"
}
En el nostre tutorial utilitzarem python per a crear un executable anomenat pushexec que reenviarà la notificació sense canviar res:
#!/usr/bin/python3
import sys
f1, f2 = sys.argv[1:3]
open(f2, "w").write(open(f1).read())
També hem d’afegir aquests nous fitxers al CMakeLists.txt i fer que el pushexec sigui executable:
[…]
install(FILES pushexec PERMISSIONS OWNER_EXECUTE OWNER_WRITE OWNER_READ DESTINATION ${DATA_DIR})
install(FILES push.json DESTINATION ${DATA_DIR})
install(FILES push-apparmor.json DESTINATION ${DATA_DIR})
[…]
Ara l’aplicació està llesta per rebre i processar notificacions push!
Ús de l’API del servei Push¶
Així que ara tens el token i l’aplicació està llesta per rebre i processar notificacions push. Per enviar una notificació, cal enviar una sol·licitud HTTP a aquesta adreça: https://push.ubports.com/notify El tipus de contingut ha de ser application/json i ha d’ajustar-se al format correcte. Un exemple en javascript podria ser així:
var req = new XMLHttpRequest();
req.open("post", "https://push.ubports.com/notify", true);
req.setRequestHeader("Content-type", "application/json");
req.onreadystatechange = function() {
if ( req.readyState === XMLHttpRequest.DONE ) {
console.log("✍ Answer:", req.responseText);
}
}
var approxExpire = new Date ();
approxExpire.setUTCMinutes(approxExpire.getUTCMinutes()+10);
req.send(JSON.stringify({
"appid" : "appname.yourname_hookname",
"expire_on": approxExpire.toISOString(),
"token": "aAnqwiFn§DF%2",
"data": {
"notification": {
"card": {
"icon": "notification",
"summary": "Push Notification",
"body": "Hello world",
"popup": true,
"persist": true
},
"vibrate": true,
"sound": true
}
}
}));
Notificacions d’inserció¶
Paràmetre |
Tipus |
Descripció |
|---|---|---|
appid |
cadena |
Requerit. ID de l’aplicació que rebrà la notificació,
tal com es descriu a la documentació del costat del client.
|
expireon |
cadena |
Requerit. Data/hora de venciment d’aquest missatge, a
.ISO8601 Extendendformat <https://www.w3.org/TR/NOTE-datetime>..
|
token |
cadena |
Requerit. El testimoni que identifica l’usuari+dispositiu al qual el missatge és
dirigit, tal com es descriu a la documentació del costat del client.
|
neteja |
bool |
Descarta totes les notificacions pendents anteriors. Normalment en resposta a
s’està obtenint un error «massa pendent». Per defecte és fals.
|
reemplaça etiqueta |
cadena |
Si hi ha una notificació pendent amb la mateixa etiqueta, esborra-la abans
fent cua a aquest nou.
|
dades |
Dades |
Un objecte JSON. Els continguts del camp de dades són arbitraris. Podem utilitzar
per enviar qualsevol dada a l’app.
|
Dades¶
Paràmetre |
Tipus |
Descripció |
|---|---|---|
Notificacions d’inserció |
Notificacions d’inserció |
Un objecte JSON que defineix com es presentarà aquesta notificació. |
missatge |
objecte |
Un objecte JSON que es passa tal com és a l’aplicació a través de PopAll. |
Notificacions d’inserció¶
Paràmetre |
Tipus |
Descripció |
|---|---|---|
etiqueta |
cadena |
L’etiqueta de les notificacions push.
|
so |
bool o cadena |
Això és booleà (tocar un so predeterminat) o el
Camí a un fitxer de so. L’usuari pot desactivar-lo, així que no confiïs
en ella exclusivament. Per defecte està buit (sense so). El camí és
relatiu, i se cercarà a (a) les
.local/share/<pkgname>, i (b) directoris xdg estàndard. |
vibra |
booleà o vibrat |
La notificació pot contenir un camp de vibració, causant haptic
retroalimentació, que pot ser booleà (si és cert, vibra a
via predeterminada) o un objecte Vibrat.
|
emblem-counter |
Emblem-counter |
Un objecte JSON, que defineix com mostrar l’emblema
compador.
|
targeta |
Targeta |
Un objecte JSON amb informació sobre la targeta de notificació.
|
Targeta¶
Paràmetre |
Tipus |
Descripció |
|---|---|---|
resum |
cadena |
Requerit. Un títol. La targeta no es presentarà si és
Falta.
|
cos |
cadena |
Text més llarg, per defecte buit.
|
ubicació |
matriu |
Si està buit (per defecte), una notificació de bombolla és
no es pot fer clic. Si afegiu un URL, llavors les notificacions de bombolles
es pot fer clic i llançar aquest URL. Un ús per a això és l’ús
un URL com
appid://com.ubuntu.developer.ralsina.helloque canviarà a l’app o la llançarà.
|
icona |
cadena |
Una icona relacionada amb l’esdeveniment que s’està notificant. Per defecte a
buit (sense icona); una icona secundària relacionada amb l’aplicació
També es mostrarà, independentment d’aquest camp.
|
marca horària |
enter |
Segons des de l’època unix, només s’utilitza per a persistir per ara.
Si és zero o no s’estableix, per defecte es marca el temps actual.
|
persistència |
bool |
Si s’ha de mostrar al centre de notificacions; per defecte és fals.
|
emergent |
bool |
Si s’ha de mostrar en una bombolla. Els usuaris poden desactivar-ho i poden
fàcilment es perden, així que no confieu en ell exclusivament. Per defecte
a fals.
|
Vibra¶
Paràmetre |
Tipus |
Descripció |
|---|---|---|
patró |
matriu |
Una llista d’enters que descriuen un patró de vibració (duració de l’alternança
vibració/sense temps de vibració, en mil·lisegons).
|
repeteix |
enter |
Nombre de vegades que el patró s’ha de repetir (per defecte 1, 0 és el
igual que 1).
|
Emblema-component¶
Paràmetre |
Tipus |
Descripció |
|---|---|---|
Comptes |
enter |
Un número que es mostrarà sobre la icona de l’aplicació al llançador. |
visible |
bool |
Establiu-ho a «true» (cert) per a mostrar el comptador, o «false» (fals) per a ocultar-lo. |
Referències¶
Vegeu la documentació del Servei de Push de Lomiri.