Регистрация пользовательского протокола в процессе установки в электронном приложении

Привет, я новичок в электронике, и мне было интересно, как я могу зарегистрировать собственный протокол для приложения во время процесса установки приложения.

Я использую электронный строитель для создания приложения. Вот код сборки сборки

"build": {
"appId": "com.test.testapp",
"productName": "testapp",
"asar": true,
"protocols": [{
  "name": "testapp",
  "schemes": [ "testapp" ]
}],
"nsis": {
  "oneClick": false,
  "perMachine": true,
  "allowToChangeInstallationDirectory": true,
  "runAfterFinish": false,
  "createDesktopShortcut": true
},
"squirrelWindows": {
  "msi": true
},
"directories": {
  "output": "distribution"
}

Я знаю, что при добавлении строки ниже регистрируется пользовательский протокол

 app.setAsDefaultProtocolClient("testapp");

но это происходит, только если я запускаю приложение по крайней мере в первый раз.

Что я не хочу, нет никакой гарантии, что пользователь запустит приложение после установки.

Так есть ли способ, которым я могу зарегистрировать пользовательский протокол в процессе установки, используя электронный строитель

1 ответ

Я все еще новичок в области электронов и электроностроителей, но уже решил эту проблему для NSIS-цели. Прежде всего я должен отметить, что app.setAsDefaultProtocolClient насколько я понимаю, используется для обработки пользовательских протоколов внутри приложения. Вам нужно зарегистрировать этот пользовательский протокол, используя сам электронный строитель.

Во-вторых, мне нужно выбрать между NSIS и squirrelWindows. NSIS предпочтительнее, насколько я понимаю, потому что Squirrel менее поддерживается и имеет некоторые проблемы. Опять же, я не эксперт, но я кое-что прочитал об этом. Так что секция squirrelWindows избыточна. Вы не указываете win.target и это "nsis" по умолчанию.

Существует проблема с регистрацией пользовательского протокола для цели NSIS. Вы можете прочитать больше здесь: Протокол (схема) для Windows, но есть обходной путь. Вам нужно создать файл с именем installer.nsh в вашем build папка с таким содержимым:

!macro customInstall DetailPrint "Register evehq-ng URI Handler" DeleteRegKey HKCR "evehq-ng" WriteRegStr HKCR "evehq-ng" "" "URL:evehq-ng" WriteRegStr HKCR "evehq-ng" "EveHQ NG SSO authentication Protocol" "" WriteRegStr HKCR "evehq-ng\DefaultIcon" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME}" WriteRegStr HKCR "evehq-ng\shell" "" "" WriteRegStr HKCR "evehq-ng\shell\Open" "" "" WriteRegStr HKCR "evehq-ng\shell\Open\command" "" "$INSTDIR\${APP_EXECUTABLE_FILENAME} %1" !macroend

замещать evehq-ng с вашей строкой протокола и EveHQ NG SSO authentication Protocol с описанием вашего протокола.

После этого вы должны установить nsis.perMachine к истине.

Я еще не решил эту проблему для Linux, но работаю в этом направлении. Вы можете увидеть мой код в моем проекте доказательства концепций здесь: EveHQ-NG применение концепции доказательств.

Если вы решите эту проблему для Linux и MacOS, напишите мне сообщение здесь или на GitHub.

Надеюсь, поможет.

Поскольку вы используете electron-builder Вы можете сделать следующее:

"build": {
    ... other top level electron-builder keys ...
    "protocols": [
       {
           "name": "Custom Protocol Name",
           "schemes": [
               "customProtocol"
           ]
       }
    ]
}

В случае, если вы хотели справиться customProtocol://some-link с вашим приложением.

Более подробная информация: https://www.electron.build/configuration/configuration

(Ищи protocols; на данный момент документация немного неверно отформатирована. Это должен быть тот же ключ верхнего уровня, что и fileAssociations ключ над ним.)

Пользовательский протокол все еще открывается только после открытия электронного приложения. И я также добавил installer.nsh в папку сборки. Я не знаю в чем проблема.

package.json

    {
  "name": "electron-project",
  "version": "1.0.0",
  "description": "",
  "main": "main.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1",
    "start": "electron .",
    "pack": "build --dir",
    "dist": "build"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "electron": "^3.0.8",
    "electron-builder": "^20.38.5"
  },
  "dependencies": {
    "axios": "^0.18.0"
  },
  "build": {
    "win": {
      "target": "nsis"
    },
    "nsis": {
      "oneClick" : false , 
      "allowToChangeInstallationDirectory": true, 
      "include" : "dist/installer.nsh" , 
      "perMachine" : true 
    },
    "protocols": [{
      "name": "electron-deep-linking",
      "schemes": [
        "test"
      ]
    }],
    "mac": {
      "category": "public.app-category.Reference"
    }
  }
}

main.js

const { app, BrowserWindow } = require('electron')
const path = require('path')
const url = require('url')
let mainWindow

function createWindow() {
  mainWindow = new BrowserWindow({ width: 800, height: 600 })

  mainWindow.loadURL(url.format({
    pathname: path.join(__dirname, 'index.html'),
    protocol: 'file:',
    slashes: true
  }))

  mainWindow.on('closed', function () {

    mainWindow = null
  })
}
app.setAsDefaultProtocolClient('test')

app.on('ready', createWindow)

app.on('window-all-closed', function () {
  if (process.platform !== 'darwin') {
    app.quit()
  }
})

app.on('activate', function () {
  if (mainWindow === null) {
    createWindow()
  }
})

Electron предоставляет очень простой способ регистрации URL настраиваемого протокола на клиентском компьютере (Windows, Mac)

таким образом, мы можем зарегистрировать и удалить наш собственный протокол в машине

const {app} = require('electron')
app.on('ready', onReady)

function onReady() {

    .... // write other code 
    if(!app.isDefaultProtocolClient('quickstart')) {
        app.setAsDefaultProtocolClient("quickstart", 'C:\\Users\\karthi\\electron-quick-start\\electron-quick-start-win32-x64\\electron-quick-start.exe');

    }
}

этот код зарегистрирует пользовательский протокол в машине, затем вы можете открыть свое приложение, используя браузер, как quickstart://params

для удаления пользовательского протокола в машине

app.removeAsDefaultProtocolClient("quickstart", 'C:\\Users\\karthi\\electron-quick-start\\electron-quick-start-win32-x64\\electron-quick-start.exe');

здесь я использовал электронное приложение быстрого запуска, и я использовал electron-packager Npm для создания моего приложения

Для получения дополнительной информации пользовательский протокол электронного протокола

Другие вопросы по тегам