{APP_SCHEME}:///
で開きます。
slack:///
asanadesktop:///
※デスクトップアプリがないと開きません。
ちなみにChromeアプリは、chrome://apps
で管理できます。
アプリのインストールと管理-Chromeウェブストアのヘルプ
SlackやNotionなどのデスクトップアプリは、ログインする際に、ブラウザに移動しログインさせた後にデスクトップアプリに戻ります。
これらの動きについて調査します。
上記を調査するにあたって3つにスコープを分けました。
それぞれ解決策が見えたので共有します。
基本的な処理の流れは、以下のようになります。
How do I open a url from on default OS browser?
下記を任意のAPIで呼び出します。
const shell = require('electron').shell shell.openExternal('http:localhost:4000/login') // ログインページ
この際に、queryを入れることによって、デスクトップアプリからのログインかを判別します。
const shell = require('electron').shell shell.openExternal('http://localhost:8080/login?desktop_login') // desktop_loginで判別する
window.location.href = 'slack:///'
認証時のアクセストークンなどを扱う場合は、
asanadesktop:///desktop_start_session?external_auth_token=xxxx&email=xxxx@xxxx.xxx
のようなリンクになるかと思います。これはAsanaの例です。
(試していないので注視してください!)
nklayman/vue-cli-plugin-electron-builder: Easily Build Your Vue.js App For Desktop With Electronを使用しています。
通常のelectron-builderであれば、Common Configuration - electron-builderを参照してください。
vue.config.jsmodule.exports = { pluginOptions: { electronBuilder: { builderOptions: { protocols: { name: 'App', schemes: [ 'appdesktop' // ここがschemeになる ] }, // ついでにアイコン設定 mac: { icon: 'src/assets/app.icns' }, win: { icon: 'src/assets/app.ico' } } } }, }
nom run electron:build
を実行すると、dist_electron/builder-effective-config.yaml
が生成されるので、こちらで正しく設定されるか確認してください。
正しく設定できている場合、dmg
を解凍して、Chromeでappdesktop:///
を叩くと、起動できるはずです。
"electron:serve": "vue-cli-service electron:serve --mode development",
electron:serve
の場合は、vue.config.js
で設定したProtocol Schemeがうまく働かないので、下記のように設定してみてください。
app.setAsDefaultProtocolClient('appdesktop')
下記でScheme起動したURLを受け取ることができます。ここでTokenなどを受け取りましょう。
遷移などは、ipcRenderer.on()
を使用し発火させます。
app.on('open-url', async (event, url) => { console.log('event:', event) console.log('url:', url) // Focus if (win) { if (win.isMinimized()) win.restore() win.focus() } })