ການນຳເຂົ້າຈາກ Content Hub ແລະ URLdispatcher

"hooks": {
    "openstore": {
        "apparmor": "openstore/openstore.apparmor",
        "desktop": "openstore/openstore.desktop",
        "urls": "openstore/openstore.url-dispatcher",
        "content-hub": "openstore/openstore-contenthub.json"
    }
},

ໃນຄູ່ມືກ່ອນໜ້ານີ້ ພວກເຮົາໄດ້ເຫັນເລັກນ້ອຍກ່ຽວກັບວິທີການເຮັດວຽກຂອງ Content Hub. ໃນຄູ່ມືນີ້ ພວກເຮົາຈະເຫັນວ່າ URLdispatcher ເຮັດວຽກແນວໃດ ແລະ ວິທີຈັດການຂໍ້ມູນທີ່ນຳເຂົ້າຈາກ Content Hub.

ຈັດການຂໍ້ມູນຈາກ Content Hub

../../_images/02ichu.png

ແອັບ OpenStore ຈາກ open-store.io

ໜຶ່ງໃນວິທີທີ່ງ່າຍທີ່ສຸດໃນການທົດສອບແອັບ, ແມ່ນການສົ່ງ test click ໃຫ້ຕົວທ່ານເອງໃນ Telegram, ແລະ ເປີດໄຟລ໌ click ນັ້ນດ້ວຍ OpenStore ຜ່ານ Content Hub:

../../_images/03ichu.png

ຖ້າພວກເຮົາແຕະໃສ່ແອັບ OpenStore, ມັນຈະເປີດຂຶ້ນ ແລະ ມັນຈະຖາມວ່າພວກເຮົາຕ້ອງການຕິດຕັ້ງໄຟລ໌ click ບໍ່. ມາເບິ່ງ ໂຄ້ດ Main.qml ຂອງແອັບ ເພື່ອເບິ່ງວ່າມັນເຮັດແນວໃດ:

Connections {
        target: ContentHub

        onImportRequested: {
            var filePath = String(transfer.items[0].url).replace('file://', '')
            print("Should import file", filePath)
            var fileName = filePath.split("/").pop();
            var popup = PopupUtils.open(installQuestion, root, {fileName: fileName});
            popup.accepted.connect(function() {
                contentHubInstallInProgress = true;
                PlatformIntegration.clickInstaller.installPackage(filePath)
            })
        }
}

ທ່ານເຫັນອົງປະກອບ Connections ທີ່ກຳນົດເປົ້າໝາຍໄປທີ່ ContentHub ບໍ່? ເມື່ອມັນໄດ້ຮັບສັນຍານ onImportRequested, ມັນຈະເອົາ url ຂອງຂໍ້ມູນທີ່ສົ່ງມາຈາກ Content Hub (transfer.items[0].url ແມ່ນ url ຂອງຂໍ້ມູນທຳອິດທີ່ສົ່ງມາ) ແລະ ເປີດອົງປະກອບ PopUp ເພື່ອໃຫ້ຜູ້ໃຊ້ຕິດຕັ້ງ click.

ແລ້ວ URLdispatcher ເດ?

URL dispatcher ແມ່ນຊອບແວທີ່ຄ້າຍຄືກັບ Content Hub, ທີ່ເຮັດໃຫ້ຊີວິດຂອງພວກເຮົາງ່າຍຂຶ້ນໃນການພະຍາຍາມເລືອກແອັບທີ່ຖືກຕ້ອງສຳລັບໂປຣໂຕຄໍໃດໜຶ່ງ. ຕົວຢ່າງ: ພວກເຮົາອາດຈະຕ້ອງການເປີດເວັບບຣາວເຊີເມື່ອແຕະໃສ່ໂປຣໂຕຄໍ http. ຖ້າພວກເຮົາແຕະໃສ່ລິ້ງແຜນທີ່ ມັນຈະສະດວກຖ້າເປີດດ້ວຍ uNav ຫຼື ເປີດລິ້ງ twitter ໃນແອັບ Twitter! ມັນເຮັດວຽກແນວໃດ?

URLdispatcher ເລືອກວ່າແອັບໃດ (ອີງຕາມ manifest.json ຂອງພວກເຂົາ) ຈະເປີດລິ້ງໃດໜຶ່ງ.

../../_images/05ichu.png

ມາເບິ່ງວ່າແອັບນຳທາງຂອງພວກເຮົາມີລັກສະນະແນວໃດທາງໃນ. manifest ຂອງ uNav ສະແດງ hooks ພິເສດສຳລັບ URLdispatcher ໃນ ໂຄ້ດ manifest.json ຂອງມັນ:

1  [
2     {
3         "protocol": "http",
4         "domain-suffix": "map.unav.me"
5     },
6     {
7         "protocol": "http",
8         "domain-suffix": "unav-go.github.io"
9     },
10    {
11        "protocol": "geo"
12    },
13    {
14        "protocol": "http",
15        "domain-suffix": "www.openstreetmap.org"
16    },
17    {
18        "protocol": "http",
19        "domain-suffix": "www.opencyclemap.org"
20    },
21    {
22        "protocol": "https",
23        "domain-suffix": "maps.google.com"
24    }
25 ]

ນີ້ໝາຍຄວາມວ່າລິ້ງທີ່ມີລັກສະນະຄື http://map.unav.me/xxxxx,xxxxx ຈະຖືກເປີດໃນ uNav. ແລະ ນັ້ນຖືກກຳນົດໄວ້ໃນແຖວ 2 ແລະ 3, ບ່ອນທີ່ມັນຊອກຫາໂປຣໂຕຄໍ http ຕາມດ້ວຍ map.unav.me.

ນອກຈາກນັ້ນ, URI ທີ່ມີຮູບແບບ geo:xxx,xxx ຄວນເປີດໃນ uNav, ຕາມທີ່ກຳນົດໄວ້ໃນແຖວ 11.

ແລະ ພວກເຮົາຈັດການ URL ທີ່ໄດ້ຮັບແນວໃດ?

ຫຼັງຈາກ URLdispatcher ສົ່ງລິ້ງໄປຍັງແອັບທີ່ກ່ຽວຂ້ອງ, ພວກເຮົາຈຳເປັນຕ້ອງຈັດການ URL ຫຼື URI ນັ້ນໃນແອັບເປົ້າໝາຍ. ມາເບິ່ງວິທີເຮັດ:

ໃນໄຟລ໌ qml ຫຼັກ, ພວກເຮົາຕ້ອງເພີ່ມໂຄ້ດບາງຢ່າງເພື່ອໃຫ້ຮູ້ວ່າຈະເຮັດແນວໃດກັບ dispatched URL. ມາເບິ່ງວິທີທີ່ແອັບ Linphone ຈັດການສິ່ງນີ້ໂດຍການເພີ່ມ ການເຊື່ອມຕໍ່ໄປຍັງ URI Handler ດ້ວຍອົງປະກອບ Connections ໂດຍຕັ້ງ UriHandler ເປັນເປົ້າໝາຍ.

Connections {
    target: UriHandler

    onOpened: {
        console.log('Open from UriHandler')

        if (uris.length > 0) {
            console.log('Incoming call from UriHandler ' + uris[0]);
            showIncomingCall(uris[0]);
        }
    }
}

ໂຄ້ດນີ້ຈະຈັດການ URI ໃນຮູບແບບ linphone://sip:xxx@xxx.xx ເມື່ອແອັບເປີດຢູ່. ແຕ່ພວກເຮົາຕ້ອງເຮັດແນວໃດເພື່ອຈັດການລິ້ງນີ້ເມື່ອແອັບປິດຢູ່?

ພວກເຮົາຈຳເປັນຕ້ອງເພີ່ມ ໂຄ້ດພິເສດ ເລັກນ້ອຍ ເຊິ່ງຈະກວມເອົາສອງກໍລະນີ: 1) ພວກເຮົາໄດ້ຮັບໜຶ່ງ URL 2) ພວກເຮົາໄດ້ຮັບຫຼາຍກວ່າໜຶ່ງ URL

ມາກວດເບິ່ງວ່າ Qt.application.arguments ບໍ່ຫວ່າງເປົ່າ ຫຼື ບໍ່ ແລະ ຖ້າບໍ່, ມີ argument ໃດທີ່ກົງກັບຮູບແບບ URI ຂອງພວກເຮົາ.

Component.onCompleted: {
    //Check if opened the app because we have an incoming call
    if (Qt.application.arguments && Qt.application.arguments.length > 0) {

        for (var i = 0; i < Qt.application.arguments.length; i++) {
            if (Qt.application.arguments[i].match(/^linphone/)) {
                console.log("Incoming Call on Closed App")
                showIncomingCall(Qt.application.arguments[i]);
            }
        }
    }

    //Start timer for Registering Status
    checkStatus.start()
}

ຢ່າລືມກວດເບິ່ງວ່າ %u (ເພື່ອຮັບ 1 URL) ຫຼື %U (ເພື່ອຮັບ 1 ຫຼື ຫຼາຍກວ່າ URLs) ມີຢູ່ໃນແຖວ Exec ໃນໄຟລ໌ .desktop ຂອງແອັບ.

ເຄື່ອງມື

ຈາກ command line, ຄຳສັ່ງ lomiri-url-dispatcher-dump ຈະໃຫ້ລາຍຊື່ເຕັມຂອງ protocol schemes ທີ່ລົງທະບຽນ ແລະ ແອັບທີ່ກ່ຽວຂ້ອງ.

ເຄື່ອງມືທີ່ມີປະໂຫຍດອີກອັນໜຶ່ງ, ແຕ່ບໍ່ໄດ້ຕິດຕັ້ງໂດຍຄ່າເລີ່ມຕົ້ນໃນອຸປະກອນແມ່ນ lomiri-url-dispatcher-tools, ມັນອະນຸຍາດໃຫ້ທ່ານຈຳລອງການເອີ້ນຈາກແອັບພາກສ່ວນທີສາມ. ເຊັ່ນ: lomiri-url-dispatcher https://youtu.be/CIX-a-i6B1w ຈະເປີດ youtube webapp.

ເພື່ອຕິດຕັ້ງ, ເຮັດໃຫ້ partition ຂອງທ່ານຂຽນໄດ້ (sudo mount -o rw,remount /) ແລະ ຕິດຕັ້ງມັນຜ່ານ sudo apt install lomiri-url-dispatcher-tools

ຈະເກີດຫຍັງຂຶ້ນຖ້າມີຫຼາຍກວ່າໜຶ່ງແອັບທີ່ມີການກຳນົດປະເພດ URL ດຽວກັນ?

ຄຳຖາມທີ່ດີຫຼາຍ. ຈະເກີດຫຍັງຂຶ້ນຖ້າພວກເຮົາແຕະໃສ່ລິ້ງ Twitter? URL ດັ່ງກ່າວຖືກຈັດການໂດຍ URLdispatcher ໃນຖານະໂປຣໂຕຄໍ http ຫຼື ໂປຣໂຕຄໍ http://twitter ແນວໃດ?

ຈະເກີດຫຍັງຂຶ້ນຖ້າສອງແອັບມີໂປຣໂຕຄໍທີ່ກຳນົດໄວ້ຄືກັນ?

ຕອນນີ້ເຖິງເວລາທີ່ຈະທົດສອບ ແລະ ແບ່ງປັນຜົນລັດໃນຄູ່ມືຖັດໄປ.