ການແຈ້ງເຕືອນແບບ Push¶
ສົມມຸດວ່າທ່ານມີແອັບທີ່ສ້າງດ້ວຍ Clickable ແລະ ເຜີຍແຜ່ໃນ OpenStore. ແຕ່ຕອນນີ້ທ່ານຕ້ອງການສົ່ງການແຈ້ງເຕືອນແບບ Push ໃຫ້ຜູ້ໃຊ້ຂອງທ່ານ. ກ່ອນອື່ນໝົດ, ທ່ານຕ້ອງເຂົ້າໃຈວິທີການເຮັດວຽກຂອງມັນ:
ທຸກໆແອັບທີ່ໃຊ້ການແຈ້ງເຕືອນແບບ Push ຈະມີໂໂເຄັນ (token) ທີ່ບໍ່ຊ້ຳກັນ. ໂທເຄັນນີ້ລະບຸຜູ້ໃຊ້, ອຸປະກອນ ແລະ ຕົວແອັບເອງ. ໂທເຄັນຖືກສ້າງຂຶ້ນໂດຍ UBports Push Service.
ທ່ານຈະຕ້ອງການໂທເຄັນເພື່ອສົ່ງການແຈ້ງເຕືອນແບບ Push. ດັ່ງນັ້ນ ແອັບຈຶ່ງສົ່ງໂທເຄັນຂອງມັນໄປຍັງເຊີບເວີຂອງຜູ້ພັດທະນາແອັບ.
ດ້ວຍໂທເຄັນນັ້ນ ທ່ານສາມາດສົ່ງຄຳຮ້ອງຂໍ HTTP ໄປຍັງ UBports Push Server ເຊິ່ງຈະສົ່ງຕໍ່ການແຈ້ງເຕືອນໄປຍັງອຸປະກອນຂອງຜູ້ໃຊ້.
ມາຝຶກເຮັດໄປເທື່ອລະຂັ້ນຕອນ.
Note
ໃນຕົວຢ່າງຕໍ່ໄປນີ້ ພວກເຮົາຈະບໍ່ຕິດຕັ້ງເຊີບເວີ. ນອກຈາກນີ້ ການສື່ສານລະຫວ່າງແອັບຂອງທ່ານ ແລະ ເຊີບເວີຂອງທ່ານແມ່ນຂຶ້ນກັບທ່ານ. ກະລຸນາແຈ້ງຜູ້ໃຊ້ກ່ຽັບການສື່ສານກັບເຊີບເວີຂອງທ່ານ ໂດຍການສະໜອງນະໂຍບາຍຄວາມເປັນສ່ວນຕົວ!
ເຮັດໃຫ້ແອັບພ້ອມສຳລັບການແຈ້ງເຕືອນແບບ Push¶
ການນຳໃຊ້ PushClient¶
ທຳອິດພວກເຮົາຕ້ອງເພີ່ມກຸ່ມນະໂຍບາຍ "push-notification-client". ໄຟລ໌ apparmor ຂອງທ່ານອາດຈະມີລັກສະນະດັ່ງນີ້:
{
"policy_groups": [
"networking",
"push-notification-client"
],
"policy_version": 16.04
}
ໃນຂັ້ນຕອນຕໍ່ໄປ ພວກເຮົາຕ້ອງແກ້ໄຂສ່ວນ Qml. ພວກເຮົາຈຳເປັນຕ້ອງເພີ່ມອົງປະກອບ pushclient:
//...
import Ubuntu.PushNotifications 0.1
//...
PushClient {
id: pushClient
appId: "myapp.yourname_hookname"
onTokenChanged: console.log("👍", pushClient.token)
}
ທ່ານຕ້ອງຕັ້ງຄ່າ appId ໃຫ້ຖືກຕ້ອງ! ຖ້າຊື່ແອັບໃນໄຟລ໌ manifest ຂອງທ່ານແມ່ນ myapp.yourname ແລະ ຊື່ຂອງ hook ຫຼັກ (ອັນທີ່ຈັດການໄຟລ໌ .desktop) ແມ່ນ hookname, ດັ່ງນັ້ນ appId ແມ່ນ: myapp.yourname_hookname. ເມື່ອພວກເຮົາເລີ່ມແອັບ, ມັນຈະໄດ້ຮັບໂທເຄັນ ແລະ ສະແດງໂທເຄັນນີ້ໃນບັນທຶກ (logs). ດ້ວຍ clickable logs ພວກເຮົາຈະສາມາດ copy ໂທເຄັນນີ້ອອກຈາກ terminal. ແຕ່ແອັບຍັງບໍ່ພ້ອມທີ່ຈະຮັບການແຈ້ງເຕືອນແບບ push ເທື່ອ. ສຳລັບສິ່ງນີ້ ພວກເຮົາຕ້ອງການສິ່ງທີ່ເອີ້ນວ່າ pushhelper!
ການນຳໃຊ້ pushhelper¶
The pushhelper ແມ່ນສ່ວນໜຶ່ງຂອງແອັບທີ່ຈະຮັບການແຈ້ງເຕືອນແບບ push ທັງໝົດ ແລະ ປະມວນຜົນພວກມັນກ່ອນທີ່ຈະສົ່ງໄປຍັງສູນການແຈ້ງເຕືອນຂອງລະບົບ. ມັນຈະຮັບໄຟລ໌ json ແລະ ຕ້ອງສົ່ງອອກໄຟລ໌ json ອີກອັນໜຶ່ງໃນຮູບແບບທີ່ຖືກຕ້ອງ. pushhelper ຖືກແຍກອອກຈາກແອັບ. ດັ່ງນັ້ນພວກເຮົາຕ້ອງການ hook ໃໝ່ໃນ manifest. ມັນອາດຈະມີລັກສະນະດັ່ງນີ້:
{
//...
"title": "myapp",
"hooks": {
"myapp": {
"apparmor": "myapp.apparmor",
"desktop": "myapp.desktop"
},
"push": {
"apparmor": "push-apparmor.json",
"push-helper": "push.json"
}
},
//...
}
ມັນຄວນຈະຊັດເຈນວ່າຕອນນີ້ພວກເຮົາຕ້ອງການໄຟລ໌ apparmor ທີ່ແຕກຕ່າງ ແລະ ໄຟລ໌ executable ທີ່ແຕກຕ່າງ. ໄຟລ໌ push-apparmor.json ຕ້ອງມີພຽງແຕ່ກຸ່ມນະໂຍບາຍ push-notification-client ແລະ ຄວນມີລັກສະນະດັ່ງນີ້:
{
"template": "ubuntu-push-helper",
"policy_groups": [
"push-notification-client"
],
"policy_version": 16.04
}
push.json ແມ່ນສຳລັບການປ່ຽນເສັ້ນທາງໄປຍັງໄຟລ໌ executable:
{
"exec": "pushexec"
}
ໃນບົດຮຽນຂອງພວກເຮົາ ພວກເຮົາຈະໃຊ້ python ເພື່ອສ້າງ executable ທີ່ມີຊື່ວ່າ pushexec ເຊິ່ງຈະສົ່ງຕໍ່ການແຈ້ງເຕືອນໂດຍບໍ່ປ່ຽນແປງຫຍັງເລີຍ:
#!/usr/bin/python3
import sys
f1, f2 = sys.argv[1:3]
open(f2, "w").write(open(f1).read())
We also need to add this new files to the CMakeLists.txt and make the pushexec 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})
[…]
ຕອນນີ້ແອັບພ້ອມທີ່ຈະຮັບ ແລະ ປະມວນຜົນການແຈ້ງເຕືອນແບບ push ແລ້ວ!
ການໃຊ້ Push Service API¶
ດັ່ງນັ້ນຕອນນີ້ທ່ານມີໂທເຄັນ ແລະ ແອັບກໍພ້ອມທີ່ຈະຮັບ ແລະ ປະມວນຜົນການແຈ້ງເຕືອນແບບ push. ເພື່ອສົ່ງການແຈ້ງເຕືອນ, ທ່ານຕ້ອງສົ່ງຄຳຮ້ອງຂໍ HTTP ໄປທີ່ທີ່ຢູ່ນີ້: https://push.ubports.com/notify ປະເພດເນື້ອຫາ (content-type) ຕ້ອງເປັນ application/json ແລະ ມັນຕ້ອງຢູ່ໃນຮູບແບບທີ່ຖືກຕ້ອງ. ຕົວຢ່າງໃນ javascript ອາດຈະມີລັກສະນະດັ່ງນີ້:
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
}
}
}));
ວັດຖຸການແຈ້ງເຕືອນແບບ Push (Push Notification Object)¶
ພາລາມິເຕີ |
ປະເພດ |
ຄຳອະທິບາຍ |
|---|---|---|
appid |
string |
ຈຳເປັນ. ລະຫັດ (ID) ຂອງແອັບພລິເຄຊັນທີ່ຈະຮັບການແຈ້ງເຕືອນ,
ຕາມທີ່ອະທິບາຍໄວ້ໃນເອກະສານຝັ່ງ client.
|
expire_on |
string |
ຈຳເປັນ. ວັນທີ/ເວລາໝົດອາຍຸສຳລັບຂໍ້ຄວາມນີ້, ໃນ
|
token |
string |
ຈຳເປັນ. ໂທເຄັນທີ່ລະບຸຜູ້ໃຊ້+ອຸປະກອນ ທີ່ຈະສົ່ງຂໍ້ຄວາມໄປຫາ,
ຕາມທີ່ອະທິບາຍໄວ້ໃນເອກະສານຝັ່ງ client.
|
clear_pending |
bool |
ລຶບການແຈ້ງເຕືອນທີ່ຄ້າງຢູ່ກ່ອນໜ້ານີ້ທັງໝົດ. ໂດຍປົກກະຕິແມ່ນເພື່ອຕອບສະໜອງຕໍ່
ການໄດ້ຮັບຂໍ້ຜິດພາດ "too-many-pending" (ຄ້າງຢູ່ຫຼາຍເກີນໄປ). ຄ່າເລີ່ມຕົ້ນແມ່ນ false.
|
replace_tag |
string |
ຖ້າມີການແຈ້ງເຕືອນທີ່ຄ້າງຢູ່ທີ່ມີ tag ດຽວກັນ, ໃຫ້ລຶບມັນອອກກ່ອນ
ທີ່ຈະຈັດຄິວອັນໃໝ່ນີ້.
|
data |
Data |
ວັດຖຸ JSON. ເນື້ອຫາຂອງ data field ແມ່ນຕາມໃຈມັກ. ພວກເຮົາສາມາດໃຊ້
ມັນເພື່ອສົ່ງຂໍ້ມູນໃດໆໄປຍັງແອັບໄດ້.
|
Data¶
ພາລາມິເຕີ |
ປະເພດ |
ຄຳອະທິບາຍ |
|---|---|---|
notification |
Notification |
ວັດຖຸ JSON ທີ່ກຳນົດວ່າການແຈ້ງເຕືອນນີ້ຈະຖືກສະແດງແນວໃດ. |
message |
object |
ວັດຖຸ JSON ທີ່ຖືກສົ່ງໄປຍັງແອັບພລິເຄຊັນຕາມສະພາບເດີມ ຜ່ານ PopAll. |
Notification¶
ພາລາມິເຕີ |
ປະເພດ |
ຄຳອະທິບາຍ |
|---|---|---|
tag |
string |
Tag ຂອງການແຈ້ງເຕືອນແບບ push.
|
sound |
bool ຫຼື string |
ນີ້ແມ່ນ boolean (ຫຼິ້ນສຽງທີ່ກຳນົດໄວ້ລ່ວງໜ້າ) ຫຼື
path ໄປຫາໄຟລ໌ສຽງ. ຜູ້ໃຊ້ສາມາດປິດມັນໄດ້, ດັ່ງນັ້ນຢ່າເພິ່ງພາ
ມັນພຽງຢ່າງດຽວ. ຄ່າເລີ່ມຕົ້ນແມ່ນຫວ່າງເປົ່າ (ບໍ່ມີສຽງ). Path ແມ່ນ
relative (ສຳພັດ), ແລະ ຈະຖືກຊອກຫາໃນ (a) ຂອງແອັບພລິເຄຊັນ
.local/share/<pkgname>, ແລະ (b) standard xdg dirs. |
vibrate |
bool ຫຼື Vibrate |
ການແຈ້ງເຕືອນສາມາດມີ vibrate field, ເຊິ່ງເຮັດໃຫ້ເກີດການສັ່ນເຕືອນ
haptic, ເຊິ່ງສາມາດເປັນ boolean (ຖ້າ true, ສັ່ນ
ຕາມແບບທີ່ກຳນົດໄວ້ລ່ວງໜ້າ) ຫຼື ວັດຖຸ Vibrate.
|
emblem-counter |
Emblem-counter |
ວັດຖຸ JSON, ເຊິ່ງກຳນົດວິທີການສະແດງ emblem
counter (ຕົວນັບ).
|
card |
Card |
ວັດຖຸ JSON ທີ່ມີຂໍ້ມູນກ່ຽວກັບບັດການແຈ້ງເຕືອນ.
|
Card¶
ພາລາມິເຕີ |
ປະເພດ |
ຄຳອະທິບາຍ |
|---|---|---|
summary |
string |
ຈຳເປັນ. ຫົວຂໍ້. ບັດຈະບໍ່ຖືກສະແດງຖ້າບໍ່ມີ
ສິ່ງນີ້.
|
body |
string |
ຂໍ້ຄວາມທີ່ຍາວກວ່າ, ຄ່າເລີ່ມຕົ້ນແມ່ນຫວ່າງເປົ່າ.
|
actions |
array |
ຖ້າຫວ່າງເປົ່າ (ຄ່າເລີ່ມຕົ້ນ), ການແຈ້ງເຕືອນແບບ bubble ຈະ
ກົດບໍ່ໄດ້. ຖ້າທ່ານເພີ່ມ URL, ການແຈ້ງເຕືອນແບບ bubble
ຈະສາມາດກົດໄດ້ ແລະ ເປີດ URL ນັ້ນ. ການນຳໃຊ້ໜຶ່ງສຳລັບສິ່ງນີ້ແມ່ນການໃຊ້
a URL ເຊັ່ນ
appid://com.ubuntu.developer.ralsina.helloເຊິ່ງຈະສະຫຼັບໄປຫາແອັບ ຫຼື ເປີດມັນຂຶ້ນມາ.
|
icon |
string |
ໄອຄອນທີ່ກ່ຽວຂ້ອງກັບເຫດການທີ່ຖືກແຈ້ງເຕືອນ. ຄ່າເລີ່ມຕົ້ນແມ່ນ
ຫວ່າງເປົ່າ (ບໍ່ມີໄອຄອນ); ໄອຄອນສຳຮອງທີ່ກ່ຽວຂ້ອງກັບແອັບພລິເຄຊັນ
ຈະຖືກສະແດງເຊັ່ນກັນ, ໂດຍບໍ່ສົນໃຈ field ນີ້.
|
timestamp |
ຈຳນວນຖ້ວນ (integer) |
ວິນາທີນັບຕັ້ງແຕ່ unix epoch, ໃຊ້ສຳລັບ persist ເທົ່ານັ້ນໃນຕອນນີ້.
ຖ້າເປັນສູນ ຫຼື ບໍ່ໄດ້ຕັ້ງຄ່າ, ຄ່າເລີ່ມຕົ້ນແມ່ນ timestamp ປັດຈຸບັນ.
|
persist |
bool |
ຈະສະແດງໃນສູນການແຈ້ງເຕືອນຫຼືບໍ່; ຄ່າເລີ່ມຕົ້ນແມ່ນ false.
|
popup |
bool |
ຈະສະແດງໃນ bubble ຫຼືບໍ່. ຜູ້ໃຊ້ສາມາດປິດສິ່ງນີ້ໄດ້, ແລະ ສາມາດ
ພາດພວກມັນໄດ້ງ່າຍ, ດັ່ງນັ້ນຢ່າເພິ່ງພາມັນພຽງຢ່າງດຽວ. ຄ່າເລີ່ມຕົ້ນ
ແມ່ນ false.
|
Vibrate¶
ພາລາມິເຕີ |
ປະເພດ |
ຄຳອະທິບາຍ |
|---|---|---|
pattern |
array |
ລາຍຊື່ຂອງຈຳນວນຖ້ວນທີ່ອະທິບາຍຮູບແບບການສັ່ນ (ໄລຍະເວລາຂອງການສັ່ນສະຫຼັບກັນ
/ເວລາບໍ່ສັ່ນ, ເປັນ milliseconds).
|
repeat |
ຈຳນວນຖ້ວນ (integer) |
ຈຳນວນຄັ້ງທີ່ຮູບແບບຕ້ອງຖືກເຮັດຊ້ຳ (ຄ່າເລີ່ມຕົ້ນແມ່ນ 1, 0 ແມ່ນ
ຄືກັນກັບ 1).
|
Emblem-Counter¶
ພາລາມິເຕີ |
ປະເພດ |
ຄຳອະທິບາຍ |
|---|---|---|
count |
ຈຳນວນຖ້ວນ (integer) |
ຕົວເລກທີ່ຈະສະແດງຢູ່ເທິງໄອຄອນຂອງແອັບພລິເຄຊັນໃນ launcher. |
visible |
bool |
ຕັ້ງເປັນ true ເພື່ອສະແດງຕົວນັບ, ຫຼື false ເພື່ອເຊື່ອງມັນ. |
ເອກະສານອ້າງອີງ¶
ເບິ່ງເອກະສານຂອງ Lomiri Push Service.