Skip to main content
MellowtelをクロスプラットフォームのElectronアプリケーションに統合し、ユーザーが未使用のインターネット帯域幅を報酬やプレミアム機能と引き換えに共有できるようにします。Electron SDKは、Electronが動作する場所(macOS、Windows、Linux)であればどこでも動作します。
ユーザーの同意が必須です。 SDKは、ユーザーが明示的にオプトインした場合にのみ動作します。init()は、同意が記録されていない場合には静かに早期リターンします。そのため、SDKがエラーなしで開始されるがトラフィックを送信しない場合、最も可能性が高い理由はユーザーがまだオプトインしていないことです。

前提条件

  • Mellowtelアカウントと構成キー(ダッシュボードから取得)。
  • メインプロセスにアクセスできるElectronアプリケーション。

インストール

1. パッケージをインストールする

プロジェクトのルートから、Electron SDKをインストールします:

2. コードに追加する

Electronのメインプロセスファイル(通常はmain.tsまたはmain.js)でSDKをインポートし、アプリが準備完了する前にオプションでsetupMellowtelApp()を呼び出し、構成キーでMellowtelをインスタンス化し、ユーザーから同意を求め、サービスを開始するためにinit()を呼び出します。
YOUR_CONFIGURATION_KEYをMellowtelダッシュボードからのキーに置き換えてください。
各呼び出しが行うこと:
  • new Mellowtel(configurationKey, options?)はSDKをインスタンス化します。現在利用可能な唯一のオプションはdisableLogsで、デフォルトはtrueです。統合中はfalseに設定して、ターミナルで接続状態とリクエスト活動を確認できるようにします。
  • requestConsent(window, incentive)は、渡されたBrowserWindowにアンカーされたネイティブのElectronメッセージボックスをレンダリングします。第2引数はダイアログの目立つ見出し(例:“3ヶ月無料”)で、Mellowtelが何をするかの固定説明の上に表示されます。ユーザーが受け入れた場合はtrue、拒否またはダイアログを閉じた場合はfalse、すでに同意が記録されている場合はundefinedを解決します。SDKはオプトインの決定を自動的に保持するため、後でoptIn()を呼び出す必要はありません。
  • init()は、configurationKeyが空の場合にのみスローします。ユーザーがオプトインしていない場合は、ログを記録して静かにリターンします。それ以外の場合は、MellowtelのバックエンドにWebSocketを開きます。この呼び出しはレンダラーUIに対してブロックしないため、接続が確立される間もウィンドウは応答性を保ちます。

システムダイアログの中断を防ぐ(推奨)

SDKには、システムダイアログ(自動入力ポップアップ、翻訳バー、NTLM / Kerberos認証プロンプト、パスワードマネージャーの統合、メディアオーバーレイ、初回実行ダイアログ)を抑制するためのElectronコマンドラインフラグを設定するオプションのヘルパーsetupMellowtelApp()が付属しています。メインプロセスファイルの先頭で、app.whenReady()の前にこれを呼び出し、mellowtel-electronからのデフォルトエクスポートと一緒にインポートします。正規の使用法については、上流のREADMEを参照してください。

ユーザーの同意

同意ダイアログの表示は必須です。init()を呼び出す前にユーザーに明示的にオプトインさせ、いつでもオプトイン状態を管理できる方法を提供する必要があります。
同意を処理するための2つの方法があります:
  1. 組み込みのネイティブダイアログを使用する requestConsent(window, incentive)を介して。これは最も迅速な方法であり、上記のスニペットが示しているものです。インセンティブのコピーを見出しとして持つネイティブのElectron dialog.showMessageBoxをレンダリングし、ユーザーの決定を自動的に保持します。
  2. 独自の同意UIを構築する optIn(), optOut(), getOptInStatus()を通じてSDKを駆動します。ネイティブダイアログが提供するものを超えたカスタムブランディング、より豊かな説明、またはローカリゼーションが必要な場合に使用します。

同意ダイアログに含めるべきもの

1

Mellowtelが何をするかを説明する

簡単な言葉を使って説明します。例: “このアプリはMellowtelを使用して未使用のインターネット帯域幅を共有します。その見返りに、[利益/機能]を得ることができます。設定でいつでもオプトアウトできます。”
2

ユーザーに明確な選択肢を与える

明確な受け入れと拒否のオプションを含めます。
3

ポリシーへのリンクを含める

利用規約プライバシーポリシーへのリンクを含めます。

後でユーザーが同意を変更できるようにする

MellowtelはshowConsentSettings(window)を通じて組み込みの設定ダイアログを提供します。これは、ユーザーの現在の状態に一致するオプトイン/オプトアウトボタンを持つネイティブダイアログをレンダリングし、ユーザーが選択を切り替えたときに内部でoptIn()またはoptOut()を呼び出します。アプリ内のメニュー項目や設定ボタンに接続して、ユーザーが選択を再訪できるようにします。 独自の設定画面を構築したい場合は、getOptInStatus()を呼び出して現在の状態を読み取り、optIn() / optOut()を呼び出して変更します。

メソッドリファレンス

Mellowtelクラスは以下の公開メソッドを提供します。すべてはnew Mellowtel(configurationKey, options?)で作成したインスタンスで利用可能です。 ライフサイクル
  • init(): Promise<void>は、ユーザーがオプトインしている場合にサービスを開始し、そうでない場合は静かに早期リターンします。構成キーが空の場合にのみスローします。
  • shutdown(): Promise<void>は、アプリケーションが閉じるときにSDKリソースをクリーンアップします。WebSocketを閉じ、隠れたワーカウィンドウを破棄し、バックグラウンドタイマーをクリアします。ユーザーのオプトインの好みを保持します。
  • requestConsent(window: BrowserWindow, incentive: string): Promise<boolean | undefined>は、組み込みのネイティブ同意ダイアログを表示し、結果を保持します。受け入れの場合はtrue、拒否または閉じた場合はfalse、すでに同意が与えられている場合はundefinedを返します。
  • showConsentSettings(window: BrowserWindow): Promise<void>は、組み込みの同意管理ダイアログを表示します。ユーザーが選択を切り替えたときにSDKが内部でオプトイン/オプトアウトの遷移を処理します。
手動オプトインコントロール
  • optIn(): Promise<void>は、ダイアログを表示せずにユーザーをオプトインとしてフラグします。独自のUIを通じて同意を収集した後にのみ使用します。
  • optOut(): Promise<void>は、ユーザーをオプトアウトとしてフラグし、完全なクリーンアップを実行します(shutdown()と同じリソース、さらに保存された同意の好みをクリアします)。その後にshutdown()を呼び出す必要はありません。
  • getOptInStatus(): boolean | undefinedは、現在のオプトイン状態を返します。ユーザーが選択をしたことがない場合はundefinedを返します。
  • getNodeId(): stringは、このインストールのMellowtelノード識別子を返します。サポートチケットを提出する際に便利です。
リクエストカウンター リクエスト数はelectron-storeを通じてローカルに保存され、アプリの再起動後も持続します。オプトインの影響をユーザーに示したい場合は、独自のUIに表示します。
  • getTotalRequestCount(): numberは、インストール以来処理された総リクエスト数を返します。
  • getDailyRequestCount(): numberは、今日処理されたリクエスト数を返します。
  • getRequestCountForDate(date: string): numberは、特定の日付YYYY-MM-DDのカウントを返します。
  • getDailyRequestsHistory(): { [date: string]: number }は、すべての日ごとのカウントをマップとして返します。
  • getRequestCountsInRange(startDate: string, endDate: string): { [date: string]: number }は、日付範囲のカウントを返します。
  • getRequestCounts(): { total: number; daily: number; dailyHistory: { [date: string]: number } }は、3つのカウンターすべてを1回の呼び出しで返します。

ライフサイクルとアプリのシャットダウン

最初のリクエストを処理した後、Mellowtelは隠れたElectronワーカウィンドウを作成することがあります。ホストアプリケーションは、アプリケーションが実際に閉じるときにshutdown()を呼び出す必要があります shutdown():
  • WebSocket接続を閉じます。
  • 隠れたワーカウィンドウを破棄します。
  • バックグラウンドタイマーとネットワークリソースをクリアします。
  • ユーザーのオプトインの好みを保持します。
shutdown() vs optOut(): shutdown()はアプリケーションライフサイクルのクリーンアップであり、同意は保持されます。optOut()はユーザーの同意を撤回し、すべてのリソースをクリーンアップします。この2つを混同しないでください。

シングルウィンドウアプリケーション

メインアプリケーションウィンドウが閉じるときにshutdown()を呼び出します:
Mellowtelの隠れたワーカウィンドウが発火を防ぐ可能性があるため、Electronのwindow-all-closedイベントにのみ依存しないでください。

トレイアプリケーション

ウィンドウをシステムトレイに隠すだけの場合はshutdown()を呼び出さないでください。明示的な終了アクションから呼び出します:

macOSアプリケーション

アプリケーションがウィンドウを閉じた後もアクティブな場合、ユーザーが実際にアプリケーションを終了するときにのみshutdown()を呼び出します。

オプトアウト

optOut()はすでに完全なクリーンアップを実行します:
その後にshutdown()を呼び出す必要はありません。shutdown()とは異なり、optOut()は保存された同意の好みも変更します。

再起動

shutdown()またはoptOut()の後、Mellowtelを再び開始できます:

同意の持続性

オプトイン状態は、プラットフォームデフォルトのelectron-store構成パスに保存されます:
  • macOS: ~/Library/Application Support/<YourAppName>/config.json
  • Windows: %APPDATA%\<YourAppName>\config.json
  • Linux: ~/.config/<YourAppName>/config.json
状態はアプリの更新後も持続します。アプリをアンインストールしても、アンインストーラーがアプリの構成ディレクトリを明示的に削除しない限り、自動的にはクリアされません。

トラブルシューティング

  1. mellowtel-electronをインストールしていることを確認します(スコープ付きGitHub Packages名ではありません)。
  2. npmキャッシュをクリアし、npm cache clean --forceを実行した後にnpm install mellowtel-electronを再試行します。
  1. app.whenReady()が解決された後、かつ有効で破棄されていないBrowserWindow参照でrequestConsentを呼び出していることを確認します。
  2. setupMellowtelApp()を使用している場合は、app.whenReady()前に呼び出されていることを確認します。
これは設計によるものです。ユーザーがオプトインしていない場合、init()は静かに早期リターンします。getOptInStatus()を確認して確認します。undefinedまたはfalseを返す場合は、まずrequestConsentを実行します。内部の「ユーザーがオプトインしていない」ログは、disableLogsがデフォルトのままの場合に抑制されるため(下記の「ログが静かです」を参照)、ターミナルはフラグを反転させるまでどちらの信号も示しません。
disableLogsコンストラクタオプションはデフォルトでtrueです。統合中に接続状態とリクエスト活動をターミナルで表示するために、コンストラクタの第2引数として{ disableLogs: false }を渡します。これは、「オプトインしていない」静かな無操作(上記参照)と実際の接続失敗を区別する最も迅速な方法でもあります。

完了までの推定時間: 10〜15分。 ヘルプが必要な場合やフィードバックがある場合は、info@mellowtel.comまでご連絡いただくか、Discordコミュニティに参加してください。