無星的electron之旅(六)——electron 應用協議喚起

1、背景

應用但願能經過其餘應用喚起,這應該是個很是常見的需求html

2、如何喚起

搜半天,全是基於協議的。protocolvue

接着會發現關鍵代碼node

官網地址vue-cli

app.setAsDefaultProtocolClient(PROTOCOL, process.execPath, args);
複製代碼

可是這有一個關鍵點:你至少運行過一次程序,才能註冊這個協議!!!

這就讓人很難受了。segmentfault

那麼咱們須要想一想,有沒有辦法在安裝的時候把協議寫進去?windows

答案是:有。api

如何在安裝的時候把協議寫進去?

既然要在安裝的時候寫進去,那麼一定須要在打包的地方下功夫。瀏覽器

這裏我使用的是electron-builder來進行打包(個人項目是基於vue-cli4配合vue-cli-plugin-electron-builder建立的)markdown

所以咱們的打包配置文件中,須要寫入protocols配置app

注意,mac和Windows協議是分開的。

1.png

這裏咱們解釋一下

1.mac上直接在這寫就行。(親測可行)

mac的協議喚起,實質上是dmg安裝文件後的info.plist文件下的URLType,幹過iOS開發的同事應該都有經驗。

路徑是/Application/你的應用程序 右鍵顯示包內容 /Contents/Info.plist

3.png

2.Windows須要額外寫腳本 (寫本博客的時候,我還沒測試過Windows)(親測可行)

3

2.png

Windows須要經過指定打包方式nsis,並在打包時注入執行的sh腳本,以達到安裝注入協議的目的。

這裏有另外一個注意的點,就是卸載的時候最好能卸載掉對應的協議。(用戶體驗至上)

而後打包便可

到目前爲止,你的應用應該就能夠被喚起了

setAsDefaultProtocolClient是不須要寫的

3、怎麼喚起應用測試?

還記得以前你寫的協議名稱麼?好比我這裏叫szyxqca

打開瀏覽器,在地址欄輸入

szyxqca://
複製代碼

便可

理論上你的瀏覽器會喚起你的應用

4.png

若是要傳參呢?

szyxqca://startapp/here?xxx=123&xxx2=222
複製代碼

這裏的startapp/here其實都是沒用的,主要是配合添加host和path以及query,這種格式比較適合後期延展

4、如何經過這種方式傳參,怎麼接收呢?

須要兩個生命週期

// windows喚起
app.on('second-instance', (event, argv) => {
  if (process.platform === 'win32') {
    logger.warn('喚起');
    logger.warn(event, argv);
    //TODO:還沒寫
  }
});

// macOS喚起
app.on('open-url', (event, urlStr) => {
  logger.warn('喚起');
  logger.warn(event, urlStr);
  // 解析數據
  const urlObj = new URL(urlStr);
  const { searchParams } = urlObj;
  //數據
  const xxx = searchParams.get('xxx');
  const xxx2 = searchParams.get('xxx2');
});

複製代碼

5、可能碰到的問題:

1.喚醒的app不對

我在mac上喚醒app,一直莫名其妙喚起了./node_modules/electron/dist/Electron.app,而後我把全部的node_modules刪了,並從新打開了一下app,再喚起,正常了。

實測直接把dmg直接發給同事,他安裝之後能夠直接喚醒,不會錯誤喚醒。

多是electron的bug吧

參考文章

electron喚起原理

兩種方式的mac/win註冊協議喚起Electron應用

喚起示例

配置查看

經過協議喚起Electron應用

electron-builder

相關文章
相關標籤/搜索